+ STM32.DCMI

This commit is contained in:
Vovanium 2021-11-07 18:14:08 +03:00
parent a0e6b440ef
commit 235b5c4320
1 changed files with 241 additions and 0 deletions

241
source/f4/stm32-dcmi.ads Normal file
View File

@ -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;