+ STM32.DCMI
This commit is contained in:
parent
a0e6b440ef
commit
235b5c4320
|
@ -0,0 +1,241 @@
|
|||
with Interfaces;
|
||||
use Interfaces;
|
||||
package STM32.DCMI is
|
||||
|
||||
-- CR
|
||||
|
||||
type Capture_Mode is (
|
||||
Continuous,
|
||||
Snapshot
|
||||
) with Size => 1;
|
||||
for Capture_Mode use (
|
||||
Continuous => 0,
|
||||
Snapshot => 1
|
||||
);
|
||||
|
||||
type Clock_Polarity is (
|
||||
Capture_on_Falling, -- Input pixel clock
|
||||
Capture_on_Rising -- Inverted pixel clock
|
||||
) with Size => 1;
|
||||
for Clock_Polarity use (
|
||||
Capture_on_Falling => 0,
|
||||
Capture_on_Rising => 1
|
||||
);
|
||||
|
||||
type Signal_Polarity is (
|
||||
Active_Low,
|
||||
Active_High
|
||||
) with Size => 1;
|
||||
for Signal_Polarity use (
|
||||
Active_Low => 0,
|
||||
Active_High => 1
|
||||
);
|
||||
|
||||
type Frame_Capture_Rate is (
|
||||
Every_Frame,
|
||||
Frames_1_of_2,
|
||||
Frames_1_of_4
|
||||
) with Size => 2;
|
||||
for Frame_Capture_Rate use (
|
||||
Every_Frame => 2#00#,
|
||||
Frames_1_of_2 => 2#01#,
|
||||
Frames_1_of_4 => 2#10#
|
||||
);
|
||||
|
||||
type Extended_Data_Mode is (
|
||||
Data_8_Bit,
|
||||
Data_10_Bit,
|
||||
Data_12_Bit,
|
||||
Data_14_Bit
|
||||
) with Size => 2;
|
||||
for Extended_Data_Mode use (
|
||||
Data_8_Bit => 2#00#,
|
||||
Data_10_Bit => 2#01#,
|
||||
Data_12_Bit => 2#10#,
|
||||
Data_14_Bit => 2#11#
|
||||
);
|
||||
|
||||
type Byte_Select is (
|
||||
All_Bytes,
|
||||
Bytes_1_of_2,
|
||||
Bytes_1_of_4,
|
||||
Bytes_2_of_4
|
||||
) with Size => 2;
|
||||
for Byte_Select use (
|
||||
All_Bytes => 2#00#,
|
||||
Bytes_1_of_2 => 2#01#,
|
||||
Bytes_1_of_4 => 2#10#,
|
||||
Bytes_2_of_4 => 2#11#
|
||||
);
|
||||
|
||||
type Line_Select is (
|
||||
Every_Line,
|
||||
Lines_1_of_2
|
||||
) with Size => 1;
|
||||
for Line_Select use (
|
||||
Every_Line => 0,
|
||||
Lines_1_of_2 => 1
|
||||
);
|
||||
|
||||
type Even_Odd_Select is (
|
||||
First,
|
||||
Second
|
||||
) with Size => 1;
|
||||
for Even_Odd_Select use (
|
||||
First => 0,
|
||||
Second => 1
|
||||
);
|
||||
|
||||
type Control_Register_1 is record
|
||||
CAPTURE : Boolean := False; -- Capture enable
|
||||
CM : Capture_Mode := Continuous; -- Capture mode
|
||||
CROP : Boolean := False; -- Crop feature enable
|
||||
JPEG : Boolean := False; -- JPEG format
|
||||
ESS : Boolean := False; -- Embedded synchronization
|
||||
PCKPOL : Clock_Polarity := Capture_on_Falling; -- Pixel clock polarity
|
||||
HSPOL : Signal_Polarity := Active_Low; -- Horizontal synchronization
|
||||
VSPOL : Signal_Polarity := Active_Low; -- Vertical synchronization
|
||||
FCRC : Frame_Capture_Rate := Every_Frame; -- Frame capture rate control
|
||||
EDM : Extended_Data_Mode := Data_8_Bit; -- Extended data mode
|
||||
Unused_12 : Integer range 0 .. 3 := 0;
|
||||
ENABLE : Boolean := False; -- DCMI enable
|
||||
Unused_15 : Integer range 0 .. 1 := 0;
|
||||
BSM : Byte_Select := All_Bytes; -- Byte Select mode (available only on STM43F446)
|
||||
OEBS : Even_Odd_Select := First; -- Odd/Even Byte Select (available only on STM43F446)
|
||||
LSM : Line_Select := Every_Line; -- Line Select mode (available only on STM43F446)
|
||||
OELS : Even_Odd_Select := First; -- Odd/Even Line Select (available only on STM43F446)
|
||||
Unused_21 : Integer range 0 .. 2**11 - 1 := 0;
|
||||
end record with Size => 32;
|
||||
for Control_Register_1 use record
|
||||
CAPTURE at 0 range 0 .. 0;
|
||||
CM at 0 range 1 .. 1;
|
||||
CROP at 0 range 2 .. 2;
|
||||
JPEG at 0 range 3 .. 3;
|
||||
ESS at 0 range 4 .. 4;
|
||||
PCKPOL at 0 range 5 .. 5;
|
||||
HSPOL at 0 range 6 .. 6;
|
||||
VSPOL at 0 range 7 .. 7;
|
||||
FCRC at 0 range 8 .. 9;
|
||||
EDM at 0 range 10 .. 11;
|
||||
Unused_12 at 0 range 12 .. 13;
|
||||
ENABLE at 0 range 14 .. 14;
|
||||
Unused_15 at 0 range 15 .. 15;
|
||||
BSM at 0 range 16 .. 17;
|
||||
OEBS at 0 range 18 .. 18;
|
||||
LSM at 0 range 19 .. 19;
|
||||
OELS at 0 range 20 .. 20;
|
||||
Unused_21 at 0 range 21 .. 31;
|
||||
end record;
|
||||
|
||||
-- SR
|
||||
|
||||
type Status_Register is record
|
||||
HSYNC : Boolean; -- HSYNC in active state (synchronization between lines)
|
||||
VSYNC : Boolean; -- VSYNC in active state (synchronization between frames)
|
||||
FNE : Boolean; -- FIFO not empty
|
||||
end record with Size => 32;
|
||||
for Status_Register use record
|
||||
HSYNC at 0 range 0 .. 0;
|
||||
VSYNC at 0 range 1 .. 1;
|
||||
FNE at 0 range 2 .. 2;
|
||||
end record;
|
||||
|
||||
-- RIS, IER, MIS, ICR
|
||||
|
||||
type Interrupt_Register is record
|
||||
FRAME : Boolean := False; -- Capture complete raw interrupt
|
||||
OVR : Boolean := False; -- Overrun raw interrupt
|
||||
ERR : Boolean := False; -- Synchronization error raw inte
|
||||
VSYNC : Boolean := False; -- VSYNC raw interrupt status
|
||||
LINE : Boolean := False; -- Line raw interrupt status
|
||||
Unused_5 : Integer range 0 .. 2**27 - 1 := 0;
|
||||
end record with Size => 32;
|
||||
for Interrupt_Register use record
|
||||
FRAME at 0 range 0 .. 0;
|
||||
OVR at 0 range 1 .. 1;
|
||||
ERR at 0 range 2 .. 2;
|
||||
VSYNC at 0 range 3 .. 3;
|
||||
LINE at 0 range 4 .. 4;
|
||||
Unused_5 at 0 range 5 .. 31;
|
||||
end record;
|
||||
|
||||
-- ESCR, ESUR
|
||||
|
||||
type Embedded_Synchronization_Register is record
|
||||
FS : Unsigned_8 := 0; -- Frame start delimiter code / unmask
|
||||
LS : Unsigned_8 := 0; -- Line start delimiter code / unmask
|
||||
LE : Unsigned_8 := 0; -- Line end delimiter code / unmask
|
||||
FE : Unsigned_8 := 0; -- Frame end delimiter code / unmask
|
||||
end record with Size => 32;
|
||||
for Embedded_Synchronization_Register use record
|
||||
FS at 0 range 0 .. 7;
|
||||
LS at 0 range 8 .. 15;
|
||||
LE at 0 range 16 .. 23;
|
||||
FE at 0 range 24 .. 31;
|
||||
end record;
|
||||
|
||||
-- CWSTRT
|
||||
|
||||
type Crop_Window_Start_Register is record
|
||||
HOFFCNT : Integer range 0 .. 2**14 - 1 := 0; -- Horizontal offset count
|
||||
Unused_14 : Integer range 0 .. 3 := 0;
|
||||
VST : Integer range 0 .. 2**13 - 1 := 0; -- Vertical start line count
|
||||
Unused_29 : Integer range 0 .. 7 := 0;
|
||||
|
||||
end record with Size => 32;
|
||||
for Crop_Window_Start_Register use record
|
||||
HOFFCNT at 0 range 0 .. 13;
|
||||
Unused_14 at 0 range 14 .. 15;
|
||||
VST at 0 range 16 .. 28;
|
||||
Unused_29 at 0 range 29 .. 31;
|
||||
|
||||
end record;
|
||||
|
||||
-- CWSIZE
|
||||
|
||||
type Crop_Window_Size_Register is record
|
||||
CAPCNT : Integer range 0 .. 2**14 - 1 := 0; -- Capture byte count minus 1
|
||||
Unused_14 : Integer range 0 .. 3 := 0;
|
||||
VLINE : Integer range 0 .. 2**14 - 1 := 0; -- Vertical line count minus 1
|
||||
Unused_30 : Integer range 0 .. 3 := 0;
|
||||
end record with Size => 32;
|
||||
for Crop_Window_Size_Register use record
|
||||
CAPCNT at 0 range 0 .. 13;
|
||||
Unused_14 at 0 range 14 .. 15;
|
||||
VLINE at 0 range 16 .. 29;
|
||||
Unused_30 at 0 range 30 .. 31;
|
||||
end record;
|
||||
|
||||
-- DR
|
||||
|
||||
type Data_Register is array (0 .. 3) of Unsigned_8 with Pack, Size => 32;
|
||||
|
||||
type DCMI_Registers is record
|
||||
CR : Control_Register_1;
|
||||
SR : Status_Register;
|
||||
RIS : Interrupt_Register;
|
||||
IER : Interrupt_Register;
|
||||
MIS : Interrupt_Register;
|
||||
ICR : Interrupt_Register;
|
||||
ESCR : Embedded_Synchronization_Register;
|
||||
ESUR : Embedded_Synchronization_Register;
|
||||
CWSTRT : Crop_Window_Start_Register;
|
||||
CWSIZE : Crop_Window_Size_Register;
|
||||
DR : Data_Register;
|
||||
end record;
|
||||
for DCMI_Registers use record
|
||||
CR at 16#00# range 0 .. 31;
|
||||
SR at 16#04# range 0 .. 31;
|
||||
RIS at 16#08# range 0 .. 31;
|
||||
IER at 16#0C# range 0 .. 31;
|
||||
MIS at 16#10# range 0 .. 31;
|
||||
ICR at 16#14# range 0 .. 31;
|
||||
ESCR at 16#18# range 0 .. 31;
|
||||
ESUR at 16#1C# range 0 .. 31;
|
||||
CWSTRT at 16#20# range 0 .. 31;
|
||||
CWSIZE at 16#24# range 0 .. 31;
|
||||
DR at 16#28# range 0 .. 31;
|
||||
end record;
|
||||
|
||||
end STM32.DCMI;
|
||||
|
Loading…
Reference in New Issue