stm32-ada/source/f4/stm32-dma2d.ads

209 lines
6.3 KiB
Ada

with Interfaces;
with STM32.Graphics;
use STM32.Graphics;
package STM32.DMA2D is
-- CR
type DMA2D_Mode is (
Memory_to_Memory,
Memory_to_Memory_with_PFC,
Memory_to_Memory_with_Blending,
Register_to_Memory
) with Size => 2;
for DMA2D_Mode use (
Memory_to_Memory => 2#00#,
Memory_to_Memory_with_PFC => 2#01#,
Memory_to_Memory_with_Blending => 2#10#,
Register_to_Memory => 2#11#
);
type Control_Register is record
START : Boolean;
SUSP : Boolean;
ABRT : Boolean; -- Note this field is renamed
Reserved_3 : Integer range 0 .. 2**5 - 1;
TEIE : Boolean;
TCIE : Boolean;
TWIE : Boolean;
CAEIE : Boolean;
CTCIE : Boolean;
CEIE : Boolean;
Reserved_14 : Integer range 0 .. 2**2 - 1;
MODE : DMA2D_Mode;
Reserved_18 : Integer range 0 .. 2**14 - 1;
end record with Size => 32;
for Control_Register use record
START at 0 range 0 .. 0;
SUSP at 0 range 1 .. 1;
ABRT at 0 range 2 .. 2;
Reserved_3 at 0 range 3 .. 7;
TEIE at 0 range 8 .. 8;
TCIE at 0 range 9 .. 9;
TWIE at 0 range 10 .. 10;
CAEIE at 0 range 11 .. 11;
CTCIE at 0 range 12 .. 12;
CEIE at 0 range 13 .. 13;
Reserved_14 at 0 range 14 .. 15;
MODE at 0 range 16 .. 17;
Reserved_18 at 0 range 18 .. 31;
end record;
-- ISR, IFCR
type Interrupt_Status_Register is record
TEIF : Boolean;
TCIF : Boolean;
TWIF : Boolean;
CAEIF : Boolean;
CTCIF : Boolean;
CEIF : Boolean;
Reserved_6 : Integer range 0 .. 2**26 - 1;
end record with Size => 32;
for Interrupt_Status_Register use record
TEIF at 0 range 0 .. 0;
TCIF at 0 range 1 .. 1;
TWIF at 0 range 2 .. 2;
CAEIF at 0 range 3 .. 3;
CTCIF at 0 range 4 .. 4;
CEIF at 0 range 5 .. 5;
Reserved_6 at 0 range 6 .. 31;
end record;
-- FGPFCCR, BGPFCCR
type CLUT_Color_Mode is new Color_Mode range ARGB8888 .. RGB888
with Size => 1;
type Alpha_Mode is (
No_Alpha_Modification,
Replace_Alpha,
Multiply_Alpha
) with Size => 2;
for Alpha_Mode use (
No_Alpha_Modification => 2#00#,
Replace_Alpha => 2#01#,
Multiply_Alpha => 2#10#
);
type PFC_Control_Register is record
CM : Color_Mode;
CCM : CLUT_Color_Mode;
START : Boolean;
Reserved_6 : Integer range 0 .. 2**2 - 1;
CS : Integer range 0 .. 2**8 - 1;
AM : Alpha_Mode;
Reserved_18 : Integer range 0 .. 2**6 - 1;
ALPHA : Integer range 0 .. 2**8 - 1;
end record with Size => 32;
for PFC_Control_Register use record
CM at 0 range 0 .. 3;
CCM at 0 range 4 .. 4;
START at 0 range 5 .. 5;
Reserved_6 at 0 range 6 .. 7;
CS at 0 range 8 .. 15;
AM at 0 range 16 .. 17;
Reserved_18 at 0 range 18 .. 23;
ALPHA at 0 range 24 .. 31;
end record;
-- FGCOLR, BGCOLR, FGCLUT(), BGCLUT() use Color_Register from STM32.Graphics
subtype Color_Register is ARGB8888_Pixel;
-- OPFCCR
type Output_Color_Mode is new Color_Mode range ARGB8888 .. ARGB4444
with Size => 3;
type Output_PFC_Control_Register is record
CM : Output_Color_Mode;
Reserved_3 : Integer range 0 .. 2**29 - 1;
end record with Size => 32;
for Output_PFC_Control_Register use record
CM at 0 range 0 .. 2;
Reserved_3 at 0 range 3 .. 31;
end record;
-- OCOLR
type Output_Color_Register is new Interfaces.Unsigned_32;
-- should be implemented on more convenient way
-- NLR
type Number_of_Line_Register is record
NL : Integer range 0 .. 2**16 - 1;
PL : Integer range 0 .. 2**14 - 1;
end record with Size => 32;
for Number_of_Line_Register use record
NL at 0 range 0 .. 15;
PL at 0 range 16 .. 31;
end record;
-- AMTCR
type AHB_Master_Timer_Configuration_Register is record
EN : Boolean;
Reserved_1 : Integer range 0 .. 2**7 - 1;
DT : Integer range 0 .. 2**8 - 1;
Reserved_16 : Integer range 0 .. 2**16 - 1;
end record with Size => 32;
for AHB_Master_Timer_Configuration_Register use record
EN at 0 range 0 .. 0;
Reserved_1 at 0 range 1 .. 7;
DT at 0 range 8 .. 15;
Reserved_16 at 0 range 16 .. 31;
end record;
-- FGCLUT, BGCLUT arrays
type Color_Lookup_Table is array (0 .. 2**8 - 1) of Color_Register;
type DMA2D_Registers is record
CR : Control_Register;
ISR : Interrupt_Status_Register;
IFCR : Interrupt_Status_Register;
FGMAR : Address_Register;
FGOR : Integer range 0 .. 2**14 - 1;
BGMAR : Address_Register;
BGOR : Integer range 0 .. 2**14 - 1;
FGPFCCR : PFC_Control_Register;
FGCOLR : Color_Register;
BGPFCCR : PFC_Control_Register;
BGCOLR : Color_Register;
FGCMAR : Address_Register;
BGCMAR : Address_Register;
OPFCCR : Output_PFC_Control_Register;
OCOLR : Output_Color_Register;
OMAR : Address_Register;
OOR : Integer range 0 .. 2**14 - 1;
NLR : Number_of_Line_Register;
LWR : Integer range 0 .. 2**16 - 1;
AMTCR : AHB_Master_Timer_Configuration_Register;
FGCLUT : Color_Lookup_Table;
BGCLUT : Color_Lookup_Table;
end record with Volatile;
for DMA2D_Registers use record
CR at 16#0000# range 0 .. 31;
ISR at 16#0004# range 0 .. 31;
IFCR at 16#0008# range 0 .. 31;
FGMAR at 16#000C# range 0 .. 31;
FGOR at 16#0010# range 0 .. 31;
BGMAR at 16#0014# range 0 .. 31;
BGOR at 16#0018# range 0 .. 31;
FGPFCCR at 16#001C# range 0 .. 31;
FGCOLR at 16#0020# range 0 .. 31;
BGPFCCR at 16#0024# range 0 .. 31;
BGCOLR at 16#0028# range 0 .. 31;
FGCMAR at 16#002C# range 0 .. 31;
BGCMAR at 16#0030# range 0 .. 31;
OPFCCR at 16#0034# range 0 .. 31;
OCOLR at 16#0038# range 0 .. 31;
OMAR at 16#003C# range 0 .. 31;
OOR at 16#0040# range 0 .. 31;
NLR at 16#0044# range 0 .. 31;
LWR at 16#0048# range 0 .. 31;
AMTCR at 16#004C# range 0 .. 31;
FGCLUT at 16#0400# range 0 .. 2**8 * 32 - 1;
BGCLUT at 16#0800# range 0 .. 2**8 * 32 - 1;
end record;
end STM32.DMA2D;