249 lines
7.7 KiB
Ada
249 lines
7.7 KiB
Ada
package STM32.Digital_Camera_Interface with Pure 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;
|
|
pragma Volatile_Full_Access (CR);
|
|
SR : Status_Register;
|
|
pragma Volatile_Full_Access (SR);
|
|
RIS : Interrupt_Register;
|
|
pragma Volatile_Full_Access (RIS);
|
|
IER : Interrupt_Register;
|
|
pragma Volatile_Full_Access (IER);
|
|
MIS : Interrupt_Register;
|
|
pragma Volatile_Full_Access (MIS);
|
|
ICR : Interrupt_Register;
|
|
pragma Volatile_Full_Access (ICR);
|
|
ESCR : Embedded_Synchronization_Register;
|
|
pragma Volatile_Full_Access (ESCR);
|
|
ESUR : Embedded_Synchronization_Register;
|
|
pragma Volatile_Full_Access (ESUR);
|
|
CWSTRT : Crop_Window_Start_Register;
|
|
pragma Volatile_Full_Access (CWSTRT);
|
|
CWSIZE : Crop_Window_Size_Register;
|
|
pragma Volatile_Full_Access (CWSIZE);
|
|
DR : Data_Register;
|
|
pragma Volatile_Full_Access (DR);
|
|
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.Digital_Camera_Interface;
|