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

137 lines
3.6 KiB
Ada

package STM32.F4.SysCfg is
pragma Pure;
type Memory_Mapping is (
Main_Flash,
System_Flash,
FSMC_Bank_1,
Embedded_SRAM
);
for Memory_Mapping use (
Main_Flash => 2#00#,
System_Flash => 2#01#,
FSMC_Bank_1 => 2#10#,
Embedded_SRAM => 2#11#
);
type Memory_Remap_Register is record
MEM_MODE: Memory_Mapping;
Reserved_2: Integer range 0 .. 2**30 - 1;
end record with Size => 32;
for Memory_Remap_Register use record
MEM_MODE at 0 range 0 .. 1;
Reserved_2 at 0 range 2 .. 31;
end record;
type Ethernet_Phy_Interface is (
MII,
RMII
);
for Ethernet_Phy_Interface use (
MII => 0,
RMII => 1
);
type Peripherial_Mode_Register is record
Reserved_0: Integer range 0 .. 2**23 - 1;
MII_RMII_SEL: Ethernet_Phy_Interface;
Reserved_24: Integer range 0 .. 2**8 - 1;
end record with Size => 32;
for Peripherial_Mode_Register use record
Reserved_0 at 0 range 0 .. 22;
MII_RMII_SEL at 0 range 23 .. 23;
Reserved_24 at 0 range 24 .. 31;
end record;
type Peripherial_Interrupt_Pin is (
PA_Pin, PB_Pin, PC_Pin, PD_Pin,
PE_Pin, PF_Pin, PG_Pin, PH_Pin,
PI_Pin
);
for Peripherial_Interrupt_Pin use (
PA_Pin => 2#0000#, PB_Pin => 2#0001#,
PC_Pin => 2#0010#, PD_Pin => 2#0011#,
PE_Pin => 2#0100#, PF_Pin => 2#0101#,
PG_Pin => 2#0110#, PH_Pin => 2#0111#,
PI_Pin => 2#1000#
);
generic
Base: Integer;
package External_Interrupt_Configuration is
type Configuration_Array is
array (Base .. Base+3) of Peripherial_Interrupt_Pin with Pack, Size => 16;
type Register is record
EXTI: Configuration_Array;
Reserved_16: Integer range 0 .. 2**16 - 1;
end record with Size => 32;
for Register use record
EXTI at 0 range 0 .. 15;
Reserved_16 at 0 range 16 .. 31;
end record;
end External_Interrupt_Configuration;
package External_Interrupt_Configuration_1 is
new External_Interrupt_Configuration(0);
package External_Interrupt_Configuration_2 is
new External_Interrupt_Configuration(4);
package External_Interrupt_Configuration_3 is
new External_Interrupt_Configuration(8);
package External_Interrupt_Configuration_4 is
new External_Interrupt_Configuration(12);
type Compensation_Cell_Power_Down_Mode is (
Compensation_Cell_Power_Down,
Compensation_Cell_Enabled
);
for Compensation_Cell_Power_Down_Mode use (
Compensation_Cell_Power_Down => 0,
Compensation_Cell_Enabled => 1
);
type Compensation_Cell_Control_Register is record
CMP_PD: Compensation_Cell_Power_Down_Mode;
Reserved_1: Integer range 0 .. 2**7 - 1;
READY: Boolean;
Reserved_9: Integer range 0 .. 2**23 - 1;
end record with Size => 32;
for Compensation_Cell_Control_Register use record
CMP_PD at 0 range 0 .. 0;
Reserved_1 at 0 range 1 .. 7;
READY at 0 range 8 .. 8;
Reserved_9 at 0 range 9 .. 31;
end record;
type SYSCFG_Registers is record
MEMRMP: Memory_Remap_Register with Volatile_Full_Access;
PMC: Peripherial_Mode_Register with Volatile_Full_Access;
EXTICR1: External_Interrupt_Configuration_1.Register with Volatile_Full_Access;
EXTICR2: External_Interrupt_Configuration_2.Register with Volatile_Full_Access;
EXTICR3: External_Interrupt_Configuration_3.Register with Volatile_Full_Access;
EXTICR4: External_Interrupt_Configuration_4.Register with Volatile_Full_Access;
CMPCR: Compensation_Cell_Control_Register with Volatile_Full_Access;
end record;
for SYSCFG_Registers use record
MEMRMP at 16#00# range 0 .. 31;
PMC at 16#04# range 0 .. 31;
EXTICR1 at 16#08# range 0 .. 31;
EXTICR2 at 16#0C# range 0 .. 31;
EXTICR3 at 16#10# range 0 .. 31;
EXTICR4 at 16#14# range 0 .. 31;
CMPCR at 16#20# range 0 .. 31;
end record;
end STM32.F4.SysCfg;