Initial, enough to flash a led
This commit is contained in:
parent
128511d766
commit
e73f93cd43
|
@ -0,0 +1,43 @@
|
||||||
|
with Interfaces;
|
||||||
|
use Interfaces;
|
||||||
|
|
||||||
|
package body STM32.General_Purpose_IO is
|
||||||
|
|
||||||
|
package body GPIO_Port_Boolean is
|
||||||
|
|
||||||
|
procedure Set(Value: Boolean) is
|
||||||
|
begin
|
||||||
|
Register.BSRR := (
|
||||||
|
BR => 2**Bit,
|
||||||
|
BS => 2**Bit * Boolean'Pos(Value)
|
||||||
|
);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function Value return Boolean is
|
||||||
|
begin
|
||||||
|
return (Register.IDR and 2**Bit) /= 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end GPIO_Port_Boolean;
|
||||||
|
|
||||||
|
package body GPIO_Port_Modular is
|
||||||
|
|
||||||
|
Size: constant Positive := 1 + Last_Bit - First_Bit;
|
||||||
|
Mask: constant Unsigned_16 := 2**(Last_Bit + 1) - 2**First_Bit;
|
||||||
|
|
||||||
|
procedure Set(Value: Format) is
|
||||||
|
begin
|
||||||
|
Register.BSRR := (
|
||||||
|
BR => Mask,
|
||||||
|
BS => 2**First_Bit * Unsigned_16(Value)
|
||||||
|
);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function Value return Format is
|
||||||
|
begin
|
||||||
|
return Format((Register.IDR / 2**First_Bit) and (2**Size - 1));
|
||||||
|
end;
|
||||||
|
|
||||||
|
end GPIO_Port_Modular;
|
||||||
|
|
||||||
|
end STM32.General_Purpose_IO;
|
|
@ -0,0 +1,25 @@
|
||||||
|
with Interfaces;
|
||||||
|
with STM32.Registers.GPIO;
|
||||||
|
|
||||||
|
package STM32.General_Purpose_IO is
|
||||||
|
-- Single GPIO pin
|
||||||
|
generic
|
||||||
|
Register: in out Registers.GPIO.GPIO_Registers;
|
||||||
|
Bit: Registers.GPIO.Port_Bit_Number;
|
||||||
|
package GPIO_Port_Boolean is
|
||||||
|
procedure Set(Value: Boolean) with Inline; -- Output to port
|
||||||
|
function Value return Boolean with Inline; -- Read port
|
||||||
|
end GPIO_Port_Boolean;
|
||||||
|
|
||||||
|
-- Multi-pin GPIO
|
||||||
|
generic
|
||||||
|
type Format is mod <>;
|
||||||
|
Register: in out Registers.GPIO.GPIO_Registers;
|
||||||
|
First_Bit: Registers.GPIO.Port_Bit_Number;
|
||||||
|
Last_Bit: Registers.GPIO.Port_Bit_NUmber;
|
||||||
|
package GPIO_Port_Modular is
|
||||||
|
procedure Set(Value: Format) with Inline;
|
||||||
|
function Value return Format with Inline;
|
||||||
|
end GPIO_Port_Modular;
|
||||||
|
|
||||||
|
end STM32.General_Purpose_IO;
|
|
@ -0,0 +1,47 @@
|
||||||
|
package STM32.Registers.EXTI is
|
||||||
|
pragma Preelaborate;
|
||||||
|
|
||||||
|
type Event_Number is range 0 .. 22;
|
||||||
|
package Events is
|
||||||
|
PVD: constant Event_Number := 16;
|
||||||
|
RTC_Alarm: constant Event_Number := 17;
|
||||||
|
USB_OTG_FS_Wakeup: constant Event_Number := 18;
|
||||||
|
Ethernet_Wakeup: constant Event_Number := 19;
|
||||||
|
USB_OTG_HS_Wakeup: constant Event_Number := 20;
|
||||||
|
RTC_Tamper: constant Event_Number := 21;
|
||||||
|
RTC_Timestamp: constant Event_Number := 21; -- alias for RTC_Tamper
|
||||||
|
RTC_Wakeup: constant Event_Number := 22;
|
||||||
|
end Events;
|
||||||
|
|
||||||
|
type Event_Array is array (Event_Number) of Boolean
|
||||||
|
with Pack, Size=>23;
|
||||||
|
|
||||||
|
type Event_Set_Register is record
|
||||||
|
MR: Event_Array;
|
||||||
|
Reserved_23: Integer range 0 .. 2**9-1;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for Event_Set_Register use record
|
||||||
|
MR at 0 range 0 .. 22;
|
||||||
|
Reserved_23 at 0 range 23 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
type EXTI_Registers is record
|
||||||
|
IMR: Event_Set_Register;
|
||||||
|
EMR: Event_Set_Register;
|
||||||
|
RTSR: Event_Set_Register;
|
||||||
|
FTSR: Event_Set_Register;
|
||||||
|
SWIER: Event_Set_Register;
|
||||||
|
PR: Event_Set_Register;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
for EXTI_Registers use record
|
||||||
|
IMR at 16#00# range 0 .. 31;
|
||||||
|
EMR at 16#04# range 0 .. 31;
|
||||||
|
RTSR at 16#08# range 0 .. 31;
|
||||||
|
FTSR at 16#0C# range 0 .. 31;
|
||||||
|
SWIER at 16#10# range 0 .. 31;
|
||||||
|
PR at 16#14# range 0 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
end STM32.Registers.EXTI;
|
|
@ -0,0 +1,313 @@
|
||||||
|
with Interfaces;
|
||||||
|
package STM32.Registers.FSMC is
|
||||||
|
pragma Pure;
|
||||||
|
type Memory_Type is (
|
||||||
|
SRAM,
|
||||||
|
PSRAM,
|
||||||
|
NOR_Flash
|
||||||
|
);
|
||||||
|
|
||||||
|
type Memory_Databus_Width is (
|
||||||
|
Databus_8_bit,
|
||||||
|
Databus_16_bit
|
||||||
|
);
|
||||||
|
|
||||||
|
for Memory_Databus_Width use (
|
||||||
|
Databus_8_bit => 2#00#,
|
||||||
|
Databus_16_bit => 2#01#
|
||||||
|
);
|
||||||
|
|
||||||
|
type CRAM_Page_Size is (
|
||||||
|
CRAM_No_Burst_Split,
|
||||||
|
CRAM_Page_128_Bytes,
|
||||||
|
CRAM_Page_256_Bytes,
|
||||||
|
CRAM_Page_512_Bytes,
|
||||||
|
CRAM_Page_1024_Bytes
|
||||||
|
);
|
||||||
|
|
||||||
|
for CRAM_Page_Size use (
|
||||||
|
CRAM_No_Burst_Split => 2#000#,
|
||||||
|
CRAM_Page_128_Bytes => 2#001#,
|
||||||
|
CRAM_Page_256_Bytes => 2#010#,
|
||||||
|
CRAM_Page_512_Bytes => 2#011#,
|
||||||
|
CRAM_Page_1024_Bytes => 2#100#
|
||||||
|
);
|
||||||
|
|
||||||
|
type FSMC_BCR is record
|
||||||
|
MBKEN: Boolean;
|
||||||
|
MUXEN: Boolean;
|
||||||
|
MTYP: Memory_Type;
|
||||||
|
MWID: Memory_Databus_Width;
|
||||||
|
FACCEN: Boolean;
|
||||||
|
Reserved_7: Integer range 0 .. 2**1 - 1;
|
||||||
|
BURSTEN: Boolean;
|
||||||
|
WAITPOL: Boolean;
|
||||||
|
WRAPMOD: Boolean;
|
||||||
|
WAITCFG: Boolean;
|
||||||
|
WREN: Boolean;
|
||||||
|
WAITEN: Boolean;
|
||||||
|
EXTMOD: Boolean;
|
||||||
|
ASYNCWAIT: Boolean;
|
||||||
|
CPSIZE: CRAM_Page_Size;
|
||||||
|
CBURSTRW: Boolean;
|
||||||
|
Reserved_20: Integer range 0 .. 2**12 - 1;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for FSMC_BCR use record
|
||||||
|
MBKEN at 0 range 0 .. 0;
|
||||||
|
MUXEN at 0 range 1 .. 1;
|
||||||
|
MTYP at 0 range 2 .. 3;
|
||||||
|
MWID at 0 range 4 .. 5;
|
||||||
|
FACCEN at 0 range 6 .. 6;
|
||||||
|
Reserved_7 at 0 range 7 .. 7;
|
||||||
|
BURSTEN at 0 range 8 .. 8;
|
||||||
|
WAITPOL at 0 range 9 .. 9;
|
||||||
|
WRAPMOD at 0 range 10 .. 10;
|
||||||
|
WAITCFG at 0 range 11 .. 11;
|
||||||
|
WREN at 0 range 12 .. 12;
|
||||||
|
WAITEN at 0 range 13 .. 13;
|
||||||
|
EXTMOD at 0 range 14 .. 14;
|
||||||
|
ASYNCWAIT at 0 range 15 .. 15;
|
||||||
|
CPSIZE at 0 range 16 .. 18;
|
||||||
|
CBURSTRW at 0 range 19 .. 19;
|
||||||
|
Reserved_20 at 0 range 20 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
type FSMC_Access_Mode is (
|
||||||
|
Access_Mode_A,
|
||||||
|
Access_Mode_B,
|
||||||
|
Access_Mode_C,
|
||||||
|
Access_Mode_D
|
||||||
|
);
|
||||||
|
|
||||||
|
for FSMC_Access_Mode use (
|
||||||
|
Access_Mode_A => 0,
|
||||||
|
Access_Mode_B => 1,
|
||||||
|
Access_Mode_C => 2,
|
||||||
|
Access_Mode_D => 3
|
||||||
|
);
|
||||||
|
|
||||||
|
type FSMC_BTR is record
|
||||||
|
ADDSET: Integer range 0 .. 2**4 - 1; -- Address setup duration
|
||||||
|
ADDHLD: Integer range 1 .. 2**4 - 1; -- Address hold phase duration
|
||||||
|
DATAST: Integer range 1 .. 2**8 - 1; -- Data phase duration
|
||||||
|
BUSTURN: Integer range 0 .. 2**4 - 1; -- Bus turnaround delay
|
||||||
|
CLKDIV: Integer range 0 .. 2**4 - 1; -- Clock divide ratio (offset by 1)
|
||||||
|
DATLAT: Integer range 0 .. 2**4 - 1; -- Data latenct (offset by 2)
|
||||||
|
ACCMOD: FSMC_Access_Mode;
|
||||||
|
Reserved_30: Integer range 0 .. 2**2 - 1;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for FSMC_BTR use record
|
||||||
|
ADDSET at 0 range 0 .. 3;
|
||||||
|
ADDHLD at 0 range 4 .. 7;
|
||||||
|
DATAST at 0 range 8 .. 15;
|
||||||
|
BUSTURN at 0 range 16 .. 19;
|
||||||
|
CLKDIV at 0 range 20 .. 23;
|
||||||
|
DATLAT at 0 range 24 .. 27;
|
||||||
|
ACCMOD at 0 range 28 .. 29;
|
||||||
|
Reserved_30 at 0 range 30 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
type FSMC_BWTR is record
|
||||||
|
ADDSET: Integer range 0 .. 2**4 - 1;
|
||||||
|
ADDHLD: Integer range 0 .. 2**4 - 1;
|
||||||
|
DATAST: Integer range 0 .. 2**8 - 1;
|
||||||
|
BUSTURN: Integer range 0 .. 2**4 - 1;
|
||||||
|
Reserved_20: Integer range 0 .. 2**8 - 1;
|
||||||
|
ACCMOD: Integer range 0 .. 2**2 - 1;
|
||||||
|
Reserved_30: Integer range 0 .. 2**2 - 1;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for FSMC_BWTR use record
|
||||||
|
ADDSET at 0 range 0 .. 3;
|
||||||
|
ADDHLD at 0 range 4 .. 7;
|
||||||
|
DATAST at 0 range 8 .. 15;
|
||||||
|
BUSTURN at 0 range 16 .. 19;
|
||||||
|
Reserved_20 at 0 range 20 .. 27;
|
||||||
|
ACCMOD at 0 range 28 .. 29;
|
||||||
|
Reserved_30 at 0 range 30 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
type P_Memory_Type is (
|
||||||
|
PC_Card,
|
||||||
|
NAND_Flash
|
||||||
|
);
|
||||||
|
|
||||||
|
for P_Memory_Type use (
|
||||||
|
PC_Card => 0,
|
||||||
|
NAND_Flash => 1
|
||||||
|
);
|
||||||
|
|
||||||
|
type ECC_Page_Size is (
|
||||||
|
ECC_Page_256_Bytes,
|
||||||
|
ECC_Page_512_Bytes,
|
||||||
|
ECC_Page_1024_Bytes,
|
||||||
|
ECC_Page_2048_Bytes,
|
||||||
|
ECC_Page_4096_Bytes,
|
||||||
|
ECC_Page_8192_Bytes
|
||||||
|
);
|
||||||
|
|
||||||
|
for ECC_Page_Size use (
|
||||||
|
ECC_Page_256_Bytes => 2#000#,
|
||||||
|
ECC_Page_512_Bytes => 2#001#,
|
||||||
|
ECC_Page_1024_Bytes => 2#010#,
|
||||||
|
ECC_Page_2048_Bytes => 2#011#,
|
||||||
|
ECC_Page_4096_Bytes => 2#100#,
|
||||||
|
ECC_Page_8192_Bytes => 2#101#
|
||||||
|
);
|
||||||
|
|
||||||
|
-- PC Card / NAND flash control registers
|
||||||
|
type FSMC_PCR is record
|
||||||
|
Reserved_0: Integer range 0 .. 1;
|
||||||
|
PWAITEN: Boolean;
|
||||||
|
PBKEN: Boolean;
|
||||||
|
PTYP: P_Memory_Type;
|
||||||
|
PWID: Memory_Databus_Width;
|
||||||
|
ECCEN: Boolean; -- ECC computation enable
|
||||||
|
Reserved_7: Integer range 0 .. 2**2 - 1;
|
||||||
|
TCLR: Integer range 0 .. 2**4 - 1; -- CLE-RE delay (offset by 1)
|
||||||
|
TAR: Integer range 0 .. 2**4 - 1; -- ALE-RE delay (offset by 1)
|
||||||
|
ECCPS: ECC_Page_Size;
|
||||||
|
Reserved_20: Integer range 0 .. 2**12 - 1;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for FSMC_PCR use record
|
||||||
|
Reserved_0 at 0 range 0 .. 0;
|
||||||
|
PWAITEN at 0 range 1 .. 1;
|
||||||
|
PBKEN at 0 range 2 .. 2;
|
||||||
|
PTYP at 0 range 3 .. 3;
|
||||||
|
PWID at 0 range 4 .. 5;
|
||||||
|
ECCEN at 0 range 6 .. 6;
|
||||||
|
Reserved_7 at 0 range 7 .. 8;
|
||||||
|
TCLR at 0 range 9 .. 12;
|
||||||
|
TAR at 0 range 13 .. 16;
|
||||||
|
ECCPS at 0 range 17 .. 19;
|
||||||
|
Reserved_20 at 0 range 20 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
type FSMC_SR is record
|
||||||
|
IRS: Boolean;
|
||||||
|
ILS: Boolean;
|
||||||
|
IFS: Boolean;
|
||||||
|
IREN: Boolean;
|
||||||
|
ILEN: Boolean;
|
||||||
|
IFEN: Boolean;
|
||||||
|
FEMPT: Boolean;
|
||||||
|
Reserved_7: Integer range 0 .. 2**25 - 1;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for FSMC_SR use record
|
||||||
|
IRS at 0 range 0 .. 0;
|
||||||
|
ILS at 0 range 1 .. 1;
|
||||||
|
IFS at 0 range 2 .. 2;
|
||||||
|
IREN at 0 range 3 .. 3;
|
||||||
|
ILEN at 0 range 4 .. 4;
|
||||||
|
IFEN at 0 range 5 .. 5;
|
||||||
|
FEMPT at 0 range 6 .. 6;
|
||||||
|
Reserved_7 at 0 range 7 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
type FSMC_PMEM is record
|
||||||
|
MEMSET: Integer range 0 .. 2**8 - 1;
|
||||||
|
MEMWAIT: Integer range 0 .. 2**8 - 1;
|
||||||
|
MEMHOLD: Integer range 0 .. 2**8 - 1;
|
||||||
|
MEMHIZ: Integer range 0 .. 2**8 - 1;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for FSMC_PMEM use record
|
||||||
|
MEMSET at 0 range 0 .. 7;
|
||||||
|
MEMWAIT at 0 range 8 .. 15;
|
||||||
|
MEMHOLD at 0 range 16 .. 23;
|
||||||
|
MEMHIZ at 0 range 24 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
type FSMC_PATT is record
|
||||||
|
ATTSET: Integer range 0 .. 2**8 - 1;
|
||||||
|
ATTWAIT: Integer range 0 .. 2**8 - 1;
|
||||||
|
ATTHOLD: Integer range 0 .. 2**8 - 1;
|
||||||
|
ATTHIZ: Integer range 0 .. 2**8 - 1;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for FSMC_PATT use record
|
||||||
|
ATTSET at 0 range 0 .. 7;
|
||||||
|
ATTWAIT at 0 range 8 .. 15;
|
||||||
|
ATTHOLD at 0 range 16 .. 23;
|
||||||
|
ATTHIZ at 0 range 24 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
type FSMC_PIO is record
|
||||||
|
IOSET: Integer range 0 .. 2**8 - 1;
|
||||||
|
IOWAIT: Integer range 0 .. 2**8 - 1;
|
||||||
|
IOHOLD: Integer range 0 .. 2**8 - 1;
|
||||||
|
IOHIZ: Integer range 0 .. 2**8 - 1;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for FSMC_PIO use record
|
||||||
|
IOSET at 0 range 0 .. 7;
|
||||||
|
IOWAIT at 0 range 8 .. 15;
|
||||||
|
IOHOLD at 0 range 16 .. 23;
|
||||||
|
IOHIZ at 0 range 24 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
type FSMC_Registers is record
|
||||||
|
BCR1: FSMC_BCR;
|
||||||
|
BCR2: FSMC_BCR;
|
||||||
|
BCR3: FSMC_BCR;
|
||||||
|
BCR4: FSMC_BCR;
|
||||||
|
BTR1: FSMC_BTR;
|
||||||
|
BTR2: FSMC_BTR;
|
||||||
|
BTR3: FSMC_BTR;
|
||||||
|
BTR4: FSMC_BTR;
|
||||||
|
BWTR1: FSMC_BWTR;
|
||||||
|
BWTR2: FSMC_BWTR;
|
||||||
|
BWTR3: FSMC_BWTR;
|
||||||
|
BWTR4: FSMC_BWTR;
|
||||||
|
PCR2: FSMC_PCR;
|
||||||
|
PCR3: FSMC_PCR;
|
||||||
|
PCR4: FSMC_PCR;
|
||||||
|
SR2: FSMC_SR;
|
||||||
|
SR3: FSMC_SR;
|
||||||
|
SR4: FSMC_SR;
|
||||||
|
PMEM2: FSMC_PMEM;
|
||||||
|
PMEM3: FSMC_PMEM;
|
||||||
|
PMEM4: FSMC_PMEM;
|
||||||
|
PATT2: FSMC_PATT;
|
||||||
|
PATT3: FSMC_PATT;
|
||||||
|
PATT4: FSMC_PATT;
|
||||||
|
PIO4: FSMC_PIO;
|
||||||
|
ECCR2: Interfaces.Unsigned_32;
|
||||||
|
ECCR3: Interfaces.Unsigned_32;
|
||||||
|
end record with Volatile;
|
||||||
|
|
||||||
|
for FSMC_Registers use record
|
||||||
|
BCR1 at 16#0000# range 0 .. 31;
|
||||||
|
BCR2 at 16#0008# range 0 .. 31;
|
||||||
|
BCR3 at 16#0010# range 0 .. 31;
|
||||||
|
BCR4 at 16#0018# range 0 .. 31;
|
||||||
|
BTR1 at 16#0004# range 0 .. 31;
|
||||||
|
BTR2 at 16#000C# range 0 .. 31;
|
||||||
|
BTR3 at 16#0014# range 0 .. 31;
|
||||||
|
BTR4 at 16#001C# range 0 .. 31;
|
||||||
|
BWTR1 at 16#0104# range 0 .. 31;
|
||||||
|
BWTR2 at 16#010C# range 0 .. 31;
|
||||||
|
BWTR3 at 16#0114# range 0 .. 31;
|
||||||
|
BWTR4 at 16#011C# range 0 .. 31;
|
||||||
|
PCR2 at 16#0060# range 0 .. 31;
|
||||||
|
PCR3 at 16#0080# range 0 .. 31;
|
||||||
|
PCR4 at 16#00A0# range 0 .. 31;
|
||||||
|
SR2 at 16#0064# range 0 .. 31;
|
||||||
|
SR3 at 16#0084# range 0 .. 31;
|
||||||
|
SR4 at 16#00A4# range 0 .. 31;
|
||||||
|
PMEM2 at 16#0068# range 0 .. 31;
|
||||||
|
PMEM3 at 16#0088# range 0 .. 31;
|
||||||
|
PMEM4 at 16#00A8# range 0 .. 31;
|
||||||
|
PATT2 at 16#006C# range 0 .. 31;
|
||||||
|
PATT3 at 16#008C# range 0 .. 31;
|
||||||
|
PATT4 at 16#00AC# range 0 .. 31;
|
||||||
|
PIO4 at 16#00B0# range 0 .. 31;
|
||||||
|
ECCR2 at 16#0074# range 0 .. 31;
|
||||||
|
ECCR3 at 16#0094# range 0 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
end STM32.Registers.FSMC;
|
|
@ -0,0 +1,178 @@
|
||||||
|
with Interfaces;
|
||||||
|
use Interfaces;
|
||||||
|
|
||||||
|
package STM32.Registers.GPIO is
|
||||||
|
pragma Pure;
|
||||||
|
|
||||||
|
subtype Port_Bit_Number is Natural range 0 .. 15;
|
||||||
|
|
||||||
|
-- MODER
|
||||||
|
type Port_Mode is (
|
||||||
|
Input_Mode,
|
||||||
|
Output_Mode,
|
||||||
|
Alternate_Mode,
|
||||||
|
Analog_mode
|
||||||
|
) with Size => 2;
|
||||||
|
|
||||||
|
for Port_Mode use (
|
||||||
|
Input_Mode => 2#00#,
|
||||||
|
Output_Mode => 2#01#,
|
||||||
|
Alternate_Mode => 2#10#,
|
||||||
|
Analog_Mode => 2#11#
|
||||||
|
);
|
||||||
|
|
||||||
|
type Port_Mode_Register is array(Port_Bit_Number) of Port_Mode
|
||||||
|
with Pack, Size => 32;
|
||||||
|
|
||||||
|
-- OTYPER
|
||||||
|
type Output_Type is (
|
||||||
|
Push_Pull_Type,
|
||||||
|
Open_Low_Type
|
||||||
|
) with Size => 1;
|
||||||
|
|
||||||
|
for Output_Type use (
|
||||||
|
Push_Pull_Type => 2#0#,
|
||||||
|
Open_Low_Type => 2#1#
|
||||||
|
);
|
||||||
|
|
||||||
|
pragma Warnings(Off, "16 bits of ""Output_Type_Register"" unused");
|
||||||
|
|
||||||
|
type Output_Type_Register is array(Port_Bit_Number) of Output_Type
|
||||||
|
with Pack, Size => 32;
|
||||||
|
|
||||||
|
pragma Warnings(On, "16 bits of ""Output_Type_Register"" unused");
|
||||||
|
|
||||||
|
-- OSPEEDR
|
||||||
|
type Output_Speed is (
|
||||||
|
Low_Speed, -- 50pF ---100--- ns
|
||||||
|
Medium_Speed, -- 50pF 20 10 6 ns
|
||||||
|
High_Speed, -- 40pF 10 6 4 ns
|
||||||
|
Very_High_Speed -- 30pF 6 4 2.5ns
|
||||||
|
) with Size => 2;
|
||||||
|
|
||||||
|
for Output_Speed use (
|
||||||
|
Low_Speed => 2#00#,
|
||||||
|
Medium_Speed => 2#01#,
|
||||||
|
High_Speed => 2#10#,
|
||||||
|
Very_High_Speed => 2#11#
|
||||||
|
);
|
||||||
|
|
||||||
|
type Output_Speed_Register is array(Port_Bit_Number) of Output_Speed
|
||||||
|
with Pack, Size => 32;
|
||||||
|
|
||||||
|
-- PUPDR
|
||||||
|
type Port_Pull is (
|
||||||
|
No_Pull,
|
||||||
|
Pull_Up,
|
||||||
|
Pull_Down
|
||||||
|
) with Size => 2;
|
||||||
|
|
||||||
|
for Port_Pull use (
|
||||||
|
No_Pull => 2#00#,
|
||||||
|
Pull_Up => 2#01#,
|
||||||
|
Pull_Down => 2#10#
|
||||||
|
);
|
||||||
|
|
||||||
|
type Port_Pull_Register is array(Port_Bit_Number) of Port_Pull
|
||||||
|
with Pack, Size => 32;
|
||||||
|
|
||||||
|
-- BSRR
|
||||||
|
type Bit_Set_Reset_Register is record
|
||||||
|
BS: Unsigned_16;
|
||||||
|
BR: Unsigned_16;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for Bit_Set_Reset_Register use record
|
||||||
|
BS at 0 range 0 .. 15;
|
||||||
|
BR at 0 range 16 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
-- LCKR
|
||||||
|
type Lock_Bit_Array is array (Port_Bit_Number) of Boolean with Pack, Size => 16;
|
||||||
|
type Configuration_Lock_Register is record
|
||||||
|
LCK: Lock_Bit_Array;
|
||||||
|
LCKK: Boolean;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for Configuration_Lock_Register use record
|
||||||
|
LCK at 0 range 0 .. 15;
|
||||||
|
LCKK at 0 range 16 .. 16;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
-- AFRL/AFRH
|
||||||
|
type Alternate_Function is mod 16;
|
||||||
|
|
||||||
|
package Alternate_Functions is
|
||||||
|
|
||||||
|
-- AFL constants
|
||||||
|
SYS : constant Alternate_Function := 0;
|
||||||
|
TIM1 : constant Alternate_Function := 1;
|
||||||
|
TIM2 : constant Alternate_Function := 1;
|
||||||
|
TIM3 : constant Alternate_Function := 2;
|
||||||
|
TIM4 : constant Alternate_Function := 2;
|
||||||
|
TIM5 : constant Alternate_Function := 2;
|
||||||
|
TIM8 : constant Alternate_Function := 3;
|
||||||
|
TIM9 : constant Alternate_Function := 3;
|
||||||
|
TIM10 : constant Alternate_Function := 3;
|
||||||
|
TIM11 : constant Alternate_Function := 3;
|
||||||
|
I2C1 : constant Alternate_Function := 4;
|
||||||
|
I2C2 : constant Alternate_Function := 4;
|
||||||
|
I2C3 : constant Alternate_Function := 4;
|
||||||
|
SPI1 : constant Alternate_Function := 5;
|
||||||
|
SPI2 : constant Alternate_Function := 5;
|
||||||
|
I2S2 : constant Alternate_Function := 5;
|
||||||
|
I2S2Ext : constant Alternate_Function := 5;
|
||||||
|
SPI3 : constant Alternate_Function := 6;
|
||||||
|
I2SExt : constant Alternate_Function := 6;
|
||||||
|
I2S3 : constant Alternate_Function := 6;
|
||||||
|
USART1 : constant Alternate_Function := 7;
|
||||||
|
USART2 : constant Alternate_Function := 7;
|
||||||
|
USART3 : constant Alternate_Function := 7;
|
||||||
|
I2S3Ext : constant Alternate_Function := 7;
|
||||||
|
UART4 : constant Alternate_Function := 8;
|
||||||
|
UART5 : constant Alternate_Function := 8;
|
||||||
|
USART6 : constant Alternate_Function := 8;
|
||||||
|
CAN1 : constant Alternate_Function := 9;
|
||||||
|
CAN2 : constant Alternate_Function := 9;
|
||||||
|
TIM12 : constant Alternate_Function := 9;
|
||||||
|
TIM13 : constant Alternate_Function := 9;
|
||||||
|
TIM14 : constant Alternate_Function := 9;
|
||||||
|
OTG_FS : constant Alternate_Function := 10;
|
||||||
|
OTG_HS : constant Alternate_Function := 10;
|
||||||
|
ETH : constant Alternate_Function := 11;
|
||||||
|
FSMC : constant Alternate_Function := 12;
|
||||||
|
SDIO : constant Alternate_Function := 12;
|
||||||
|
OTG_FS_B : constant Alternate_Function := 12;
|
||||||
|
DCMI : constant Alternate_Function := 13;
|
||||||
|
EVENTOUT : constant Alternate_Function := 15;
|
||||||
|
|
||||||
|
end Alternate_Functions;
|
||||||
|
|
||||||
|
type Alternate_Function_Register is array (0 .. 15) of Alternate_Function
|
||||||
|
with Pack, Size => 64;
|
||||||
|
|
||||||
|
type GPIO_Registers is record
|
||||||
|
MODER: Port_Mode_Register;
|
||||||
|
OTYPER: Output_Type_Register;
|
||||||
|
OSPEEDR: Output_Speed_Register;
|
||||||
|
PUPDR: Port_Pull_Register;
|
||||||
|
IDR: Interfaces.Unsigned_32;
|
||||||
|
ODR: Interfaces.Unsigned_32;
|
||||||
|
BSRR: Bit_Set_Reset_Register;
|
||||||
|
LCKR: Configuration_Lock_Register;
|
||||||
|
AFR: Alternate_Function_Register;
|
||||||
|
end record with Volatile;
|
||||||
|
|
||||||
|
for GPIO_Registers use record
|
||||||
|
MODER at 16#00# range 0 .. 31;
|
||||||
|
OTYPER at 16#04# range 0 .. 31;
|
||||||
|
OSPEEDR at 16#08# range 0 .. 31;
|
||||||
|
PUPDR at 16#0C# range 0 .. 31;
|
||||||
|
IDR at 16#10# range 0 .. 31;
|
||||||
|
ODR at 16#14# range 0 .. 31;
|
||||||
|
BSRR at 16#18# range 0 .. 31;
|
||||||
|
LCKR at 16#1C# range 0 .. 31;
|
||||||
|
AFR at 16#20# range 0 .. 63;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
end STM32.Registers.GPIO;
|
|
@ -0,0 +1,599 @@
|
||||||
|
with Interfaces;
|
||||||
|
|
||||||
|
package STM32.Registers.RCC is
|
||||||
|
pragma Preelaborate;
|
||||||
|
|
||||||
|
-- CR
|
||||||
|
type Clock_Control_Register is record
|
||||||
|
HSION: Boolean;
|
||||||
|
HSIRDY: Boolean;
|
||||||
|
HSITRIM: Integer range 0 .. 2**5 - 1;
|
||||||
|
HSICAL: Integer range 0 .. 2**8 - 1;
|
||||||
|
HSEON: Boolean;
|
||||||
|
HSERDY: Boolean;
|
||||||
|
HSEBYP: Boolean;
|
||||||
|
CSSON: Boolean;
|
||||||
|
PLLON: Boolean;
|
||||||
|
PLLRDY: Boolean;
|
||||||
|
PLLI2SON: Boolean;
|
||||||
|
PLLI2SRDY: Boolean;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for Clock_Control_Register use record
|
||||||
|
HSION at 0 range 0 .. 0;
|
||||||
|
HSIRDY at 0 range 1 .. 1;
|
||||||
|
HSITRIM at 0 range 3 .. 7;
|
||||||
|
HSICAL at 0 range 8 .. 15;
|
||||||
|
HSEON at 0 range 16 .. 16;
|
||||||
|
HSERDY at 0 range 17 .. 17;
|
||||||
|
HSEBYP at 0 range 18 .. 18;
|
||||||
|
CSSON at 0 range 19 .. 19;
|
||||||
|
PLLON at 0 range 24 .. 24;
|
||||||
|
PLLRDY at 0 range 25 .. 25;
|
||||||
|
PLLI2SON at 0 range 26 .. 26;
|
||||||
|
PLLI2SRDY at 0 range 27 .. 27;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
--- PLLCFGR
|
||||||
|
type PLL_Division_Factor is (
|
||||||
|
PLL_DIV_2,
|
||||||
|
PLL_DIV_4,
|
||||||
|
PLL_DIV_6,
|
||||||
|
PLL_DIV_8
|
||||||
|
);
|
||||||
|
|
||||||
|
for PLL_Division_Factor use (
|
||||||
|
PLL_DIV_2 => 2#00#,
|
||||||
|
PLL_DIV_4 => 2#01#,
|
||||||
|
PLL_DIV_6 => 2#10#,
|
||||||
|
PLL_DIV_8 => 2#11#
|
||||||
|
);
|
||||||
|
|
||||||
|
type PLL_Clock_Source is (
|
||||||
|
PLLSRC_HSI,
|
||||||
|
PLLSRC_HSE
|
||||||
|
);
|
||||||
|
|
||||||
|
for PLL_Clock_Source use (
|
||||||
|
PLLSRC_HSI => 0,
|
||||||
|
PLLSRC_HSE => 1
|
||||||
|
);
|
||||||
|
|
||||||
|
type PLL_Configuration_Register is record
|
||||||
|
PLLM: Integer range 2 .. 63;
|
||||||
|
PLLN: Integer range 50 .. 432;
|
||||||
|
PLLP: PLL_Division_Factor;
|
||||||
|
PLLSRC: PLL_Clock_Source;
|
||||||
|
PLLQ: Integer range 2 .. 15;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for PLL_Configuration_Register use record
|
||||||
|
PLLM at 0 range 0 .. 5;
|
||||||
|
PLLN at 0 range 6 .. 14;
|
||||||
|
PLLP at 0 range 16 .. 17;
|
||||||
|
PLLSRC at 0 range 22 .. 22;
|
||||||
|
PLLQ at 0 range 24 .. 27;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
-- CFGR
|
||||||
|
type System_Clock_Switch is (
|
||||||
|
System_Clock_HSI,
|
||||||
|
System_Clock_HSE,
|
||||||
|
System_Clock_PLL
|
||||||
|
) with Size => 2;
|
||||||
|
|
||||||
|
for System_Clock_Switch use (
|
||||||
|
System_Clock_HSI => 2#00#,
|
||||||
|
System_Clock_HSE => 2#01#,
|
||||||
|
System_Clock_PLL => 2#10#
|
||||||
|
);
|
||||||
|
|
||||||
|
type AHB_Prescaler_Factor is (
|
||||||
|
AHB_Prescaler_1,
|
||||||
|
AHB_Prescaler_2,
|
||||||
|
AHB_Prescaler_4,
|
||||||
|
AHB_Prescaler_8,
|
||||||
|
AHB_Prescaler_16,
|
||||||
|
AHB_Prescaler_32,
|
||||||
|
AHB_Prescaler_64,
|
||||||
|
AHB_Prescaler_128,
|
||||||
|
AHB_Prescaler_256
|
||||||
|
) with Size => 4;
|
||||||
|
|
||||||
|
for AHB_Prescaler_Factor use (
|
||||||
|
AHB_Prescaler_1 => 2#0000#,
|
||||||
|
AHB_Prescaler_2 => 2#1000#,
|
||||||
|
AHB_Prescaler_4 => 2#1001#,
|
||||||
|
AHB_Prescaler_8 => 2#1010#,
|
||||||
|
AHB_Prescaler_16 => 2#1011#,
|
||||||
|
AHB_Prescaler_32 => 2#1100#,
|
||||||
|
AHB_Prescaler_64 => 2#1101#,
|
||||||
|
AHB_Prescaler_128 => 2#1110#,
|
||||||
|
AHB_Prescaler_256 => 2#1111#
|
||||||
|
);
|
||||||
|
|
||||||
|
type APB_Prescaler_Factor is (
|
||||||
|
APB_Prescaler_1,
|
||||||
|
APB_Prescaler_2,
|
||||||
|
APB_Prescaler_4,
|
||||||
|
APB_Prescaler_8,
|
||||||
|
APB_Prescaler_16
|
||||||
|
) with Size => 3;
|
||||||
|
|
||||||
|
for APB_Prescaler_Factor use (
|
||||||
|
APB_Prescaler_1 => 2#000#,
|
||||||
|
APB_Prescaler_2 => 2#100#,
|
||||||
|
APB_Prescaler_4 => 2#101#,
|
||||||
|
APB_Prescaler_8 => 2#110#,
|
||||||
|
APB_Prescaler_16 => 2#111#
|
||||||
|
);
|
||||||
|
|
||||||
|
type Clock_Output_1 is (
|
||||||
|
Clock_Output_1_HSI,
|
||||||
|
Clock_Output_1_LSE,
|
||||||
|
Clock_Output_1_HSE,
|
||||||
|
Clock_Output_1_PLL
|
||||||
|
) with Size => 2;
|
||||||
|
|
||||||
|
for Clock_Output_1 use (
|
||||||
|
Clock_Output_1_HSI => 2#00#,
|
||||||
|
Clock_Output_1_LSE => 2#01#,
|
||||||
|
Clock_Output_1_HSE => 2#10#,
|
||||||
|
Clock_Output_1_PLL => 2#11#
|
||||||
|
);
|
||||||
|
|
||||||
|
type I2S_Clock_Source is (
|
||||||
|
I2S_Clock_PLLI2S,
|
||||||
|
I2S_Clock_CLKIN
|
||||||
|
) with Size => 1;
|
||||||
|
|
||||||
|
for I2S_Clock_Source use (
|
||||||
|
I2S_Clock_PLLI2S => 0,
|
||||||
|
I2S_Clock_CLKIN => 1
|
||||||
|
);
|
||||||
|
|
||||||
|
type Clock_Output_Prescaler_Factor is (
|
||||||
|
MCO_Prescaler_1,
|
||||||
|
MCO_Prescaler_2,
|
||||||
|
MCO_Prescaler_3,
|
||||||
|
MCO_Prescaler_4,
|
||||||
|
MCO_Prescaler_5
|
||||||
|
) with Size => 3;
|
||||||
|
|
||||||
|
for Clock_Output_Prescaler_Factor use (
|
||||||
|
MCO_Prescaler_1 => 2#000#,
|
||||||
|
MCO_Prescaler_2 => 2#100#,
|
||||||
|
MCO_Prescaler_3 => 2#101#,
|
||||||
|
MCO_Prescaler_4 => 2#110#,
|
||||||
|
MCO_Prescaler_5 => 2#111#
|
||||||
|
);
|
||||||
|
|
||||||
|
type Clock_Output_2 is (
|
||||||
|
Clock_Output_2_SYSCLK,
|
||||||
|
Clock_Output_2_PLLI2S,
|
||||||
|
Clock_Output_2_HSE,
|
||||||
|
Clock_Output_2_PLL
|
||||||
|
) with Size => 2;
|
||||||
|
|
||||||
|
for Clock_Output_2 use (
|
||||||
|
Clock_Output_2_SYSCLK => 2#00#,
|
||||||
|
Clock_Output_2_PLLI2S => 2#01#,
|
||||||
|
Clock_Output_2_HSE => 2#10#,
|
||||||
|
Clock_Output_2_PLL => 2#11#
|
||||||
|
);
|
||||||
|
|
||||||
|
type Clock_Configuration_Register is record
|
||||||
|
SW: System_Clock_Switch;
|
||||||
|
SWS: System_Clock_Switch;
|
||||||
|
HPRE: AHB_Prescaler_Factor;
|
||||||
|
Reserved_8: Integer range 0 .. 3;
|
||||||
|
PPRE1: APB_Prescaler_Factor;
|
||||||
|
PPRE2: APB_Prescaler_Factor;
|
||||||
|
RTCPRE: Integer range 0 .. 31;
|
||||||
|
MCO1: Clock_Output_1;
|
||||||
|
I2SSCR: I2S_Clock_Source;
|
||||||
|
MCO1PRE: Clock_Output_Prescaler_Factor;
|
||||||
|
MCO2PRE: Clock_Output_Prescaler_Factor;
|
||||||
|
MCO2: Clock_Output_2;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for Clock_Configuration_Register use record
|
||||||
|
SW at 0 range 0 .. 1;
|
||||||
|
SWS at 0 range 2 .. 3;
|
||||||
|
HPRE at 0 range 4 .. 7;
|
||||||
|
Reserved_8 at 0 range 8 .. 9;
|
||||||
|
PPRE1 at 0 range 10 .. 12;
|
||||||
|
PPRE2 at 0 range 13 .. 15;
|
||||||
|
RTCPRE at 0 range 16 .. 20;
|
||||||
|
MCO1 at 0 range 21 .. 22;
|
||||||
|
I2SSCR at 0 range 23 .. 23;
|
||||||
|
MCO1PRE at 0 range 24 .. 26;
|
||||||
|
MCO2PRE at 0 range 27 .. 29;
|
||||||
|
MCO2 at 0 range 30 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
-- CIR
|
||||||
|
type Clock_Interrupt_Register is record
|
||||||
|
LSIRDYF: Boolean;
|
||||||
|
LSERDYF: Boolean;
|
||||||
|
HSIRDYF: Boolean;
|
||||||
|
HSERDYF: Boolean;
|
||||||
|
PLLRDYF: Boolean;
|
||||||
|
PLLI2SRDYF: Boolean;
|
||||||
|
Reserved_6: Integer range 0 .. 1;
|
||||||
|
CSSF: Boolean;
|
||||||
|
LSIRDYIE: Boolean;
|
||||||
|
LSERDYIE: Boolean;
|
||||||
|
HSIRDYIE: Boolean;
|
||||||
|
HSERDYIE: Boolean;
|
||||||
|
PLLRDYIE: Boolean;
|
||||||
|
PLLI2SRDYIE: Boolean;
|
||||||
|
Reserved_14: Integer range 0 .. 2**2 - 1;
|
||||||
|
LSIRDYC: Boolean;
|
||||||
|
LSERDYC: Boolean;
|
||||||
|
HSIRDYC: Boolean;
|
||||||
|
HSERDYC: Boolean;
|
||||||
|
PLLRDYC: Boolean;
|
||||||
|
PLLI2SRDYC: Boolean;
|
||||||
|
Reserved_22: Integer range 0 .. 1;
|
||||||
|
CSSC: Boolean;
|
||||||
|
Reserved_24: Integer range 0 .. 2**8 - 1;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for Clock_Interrupt_Register use record
|
||||||
|
LSIRDYF at 0 range 0 .. 0;
|
||||||
|
LSERDYF at 0 range 1 .. 1;
|
||||||
|
HSIRDYF at 0 range 2 .. 2;
|
||||||
|
HSERDYF at 0 range 3 .. 3;
|
||||||
|
PLLRDYF at 0 range 4 .. 4;
|
||||||
|
PLLI2SRDYF at 0 range 5 .. 5;
|
||||||
|
Reserved_6 at 0 range 6 .. 6;
|
||||||
|
CSSF at 0 range 7 .. 7;
|
||||||
|
LSIRDYIE at 0 range 8 .. 8;
|
||||||
|
LSERDYIE at 0 range 9 .. 9;
|
||||||
|
HSIRDYIE at 0 range 10 .. 10;
|
||||||
|
HSERDYIE at 0 range 11 .. 11;
|
||||||
|
PLLRDYIE at 0 range 12 .. 12;
|
||||||
|
PLLI2SRDYIE at 0 range 13 .. 13;
|
||||||
|
Reserved_14 at 0 range 14 .. 15;
|
||||||
|
LSIRDYC at 0 range 16 .. 16;
|
||||||
|
LSERDYC at 0 range 17 .. 17;
|
||||||
|
HSIRDYC at 0 range 18 .. 18;
|
||||||
|
HSERDYC at 0 range 19 .. 19;
|
||||||
|
PLLRDYC at 0 range 20 .. 20;
|
||||||
|
PLLI2SRDYC at 0 range 21 .. 21;
|
||||||
|
Reserved_22 at 0 range 22 .. 22;
|
||||||
|
CSSC at 0 range 23 .. 23;
|
||||||
|
Reserved_24 at 0 range 24 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
-- AHB1RSTR, AHB1ENR
|
||||||
|
type AHB1_Register is record
|
||||||
|
GPIOA: Boolean;
|
||||||
|
GPIOB: Boolean;
|
||||||
|
GPIOC: Boolean;
|
||||||
|
GPIOD: Boolean;
|
||||||
|
GPIOE: Boolean;
|
||||||
|
GPIOF: Boolean;
|
||||||
|
GPIOG: Boolean;
|
||||||
|
GPIOH: Boolean;
|
||||||
|
GPIOI: Boolean;
|
||||||
|
CRC: Boolean;
|
||||||
|
FLITF: Boolean;
|
||||||
|
SRAM1: Boolean;
|
||||||
|
SRAM2: Boolean;
|
||||||
|
BKPSRAM: Boolean;
|
||||||
|
CCMDATARAM: Boolean;
|
||||||
|
DMA1: Boolean;
|
||||||
|
DMA2: Boolean;
|
||||||
|
ETHMAC: Boolean;
|
||||||
|
ETHMACTX: Boolean;
|
||||||
|
ETHMACRX: Boolean;
|
||||||
|
ETHMACPTP: Boolean;
|
||||||
|
OTGHS: Boolean;
|
||||||
|
OTGHSULPI: Boolean;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for AHB1_Register use record
|
||||||
|
GPIOA at 0 range 0 .. 0;
|
||||||
|
GPIOB at 0 range 1 .. 1;
|
||||||
|
GPIOC at 0 range 2 .. 2;
|
||||||
|
GPIOD at 0 range 3 .. 3;
|
||||||
|
GPIOE at 0 range 4 .. 4;
|
||||||
|
GPIOF at 0 range 5 .. 5;
|
||||||
|
GPIOG at 0 range 6 .. 6;
|
||||||
|
GPIOH at 0 range 7 .. 7;
|
||||||
|
GPIOI at 0 range 8 .. 8;
|
||||||
|
CRC at 0 range 12 .. 12;
|
||||||
|
FLITF at 0 range 15 .. 15;
|
||||||
|
SRAM1 at 0 range 16 .. 16;
|
||||||
|
SRAM2 at 0 range 17 .. 17;
|
||||||
|
BKPSRAM at 0 range 18 .. 18;
|
||||||
|
CCMDATARAM at 0 range 20 .. 20;
|
||||||
|
DMA1 at 0 range 21 .. 21;
|
||||||
|
DMA2 at 0 range 22 .. 22;
|
||||||
|
ETHMAC at 0 range 25 .. 25;
|
||||||
|
ETHMACTX at 0 range 26 .. 26;
|
||||||
|
ETHMACRX at 0 range 27 .. 27;
|
||||||
|
ETHMACPTP at 0 range 28 .. 28;
|
||||||
|
OTGHS at 0 range 29 .. 29;
|
||||||
|
OTGHSULPI at 0 range 30 .. 30;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
-- AHB2RSTR, AHB2ENR
|
||||||
|
type AHB2_Register is record
|
||||||
|
DCMI: Boolean;
|
||||||
|
CRYP: Boolean;
|
||||||
|
HASH: Boolean;
|
||||||
|
RNG: Boolean;
|
||||||
|
OTGFS: Boolean;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for AHB2_Register use record
|
||||||
|
DCMI at 0 range 0 .. 0;
|
||||||
|
CRYP at 0 range 4 .. 4;
|
||||||
|
HASH at 0 range 5 .. 5;
|
||||||
|
RNG at 0 range 6 .. 6;
|
||||||
|
OTGFS at 0 range 7 .. 7;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
-- AHB3RSTR, AHB3ENR
|
||||||
|
type AHB3_Register is record
|
||||||
|
FSMC: Boolean;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for AHB3_Register use record
|
||||||
|
FSMC at 0 range 0 .. 0;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
-- APB1RSTR, APB1ENR
|
||||||
|
type APB1_Register is record
|
||||||
|
TIM2: Boolean;
|
||||||
|
TIM3: Boolean;
|
||||||
|
TIM4: Boolean;
|
||||||
|
TIM5: Boolean;
|
||||||
|
TIM6: Boolean;
|
||||||
|
TIM7: Boolean;
|
||||||
|
TIM12: Boolean;
|
||||||
|
TIM13: Boolean;
|
||||||
|
TIM14: Boolean;
|
||||||
|
WWDG: Boolean;
|
||||||
|
SPI2: Boolean;
|
||||||
|
SPI3: Boolean;
|
||||||
|
USART2: Boolean;
|
||||||
|
USART3: Boolean;
|
||||||
|
UART4: Boolean;
|
||||||
|
UART5: Boolean;
|
||||||
|
I2C1: Boolean;
|
||||||
|
I2C2: Boolean;
|
||||||
|
I2C3: Boolean;
|
||||||
|
CAN1: Boolean;
|
||||||
|
CAN2: Boolean;
|
||||||
|
PWR: Boolean;
|
||||||
|
DAC: Boolean;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for APB1_Register use record
|
||||||
|
TIM2 at 0 range 0 .. 0;
|
||||||
|
TIM3 at 0 range 1 .. 1;
|
||||||
|
TIM4 at 0 range 2 .. 2;
|
||||||
|
TIM5 at 0 range 3 .. 3;
|
||||||
|
TIM6 at 0 range 4 .. 4;
|
||||||
|
TIM7 at 0 range 5 .. 5;
|
||||||
|
TIM12 at 0 range 6 .. 6;
|
||||||
|
TIM13 at 0 range 7 .. 7;
|
||||||
|
TIM14 at 0 range 8 .. 8;
|
||||||
|
WWDG at 0 range 11 .. 11;
|
||||||
|
SPI2 at 0 range 14 .. 14;
|
||||||
|
SPI3 at 0 range 15 .. 15;
|
||||||
|
USART2 at 0 range 17 .. 17;
|
||||||
|
USART3 at 0 range 18 .. 18;
|
||||||
|
UART4 at 0 range 19 .. 19;
|
||||||
|
UART5 at 0 range 20 .. 20;
|
||||||
|
I2C1 at 0 range 21 .. 21;
|
||||||
|
I2C2 at 0 range 22 .. 22;
|
||||||
|
I2C3 at 0 range 23 .. 23;
|
||||||
|
CAN1 at 0 range 25 .. 25;
|
||||||
|
CAN2 at 0 range 26 .. 26;
|
||||||
|
PWR at 0 range 28 .. 28;
|
||||||
|
DAC at 0 range 29 .. 29;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
-- APB2RSTR, APB2ENR
|
||||||
|
type APB2_Register is record
|
||||||
|
TIM1: Boolean;
|
||||||
|
TIM8: Boolean;
|
||||||
|
USART1: Boolean;
|
||||||
|
USART6: Boolean;
|
||||||
|
ADC1: Boolean; -- RST resets all ADCs
|
||||||
|
ADC2: Boolean;
|
||||||
|
ADC3: Boolean;
|
||||||
|
SDIO: Boolean;
|
||||||
|
SPI1: Boolean;
|
||||||
|
SYSCFG: Boolean;
|
||||||
|
TIM9: Boolean;
|
||||||
|
TIM10: Boolean;
|
||||||
|
TIM11: Boolean;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for APB2_Register use record
|
||||||
|
TIM1 at 0 range 0 .. 0;
|
||||||
|
TIM8 at 0 range 1 .. 1;
|
||||||
|
USART1 at 0 range 4 .. 4;
|
||||||
|
USART6 at 0 range 5 .. 5;
|
||||||
|
ADC1 at 0 range 8 .. 8;
|
||||||
|
ADC2 at 0 range 9 .. 9;
|
||||||
|
ADC3 at 0 range 10 .. 10;
|
||||||
|
SDIO at 0 range 11 .. 11;
|
||||||
|
SPI1 at 0 range 12 .. 12;
|
||||||
|
SYSCFG at 0 range 14 .. 14;
|
||||||
|
TIM9 at 0 range 16 .. 16;
|
||||||
|
TIM10 at 0 range 17 .. 17;
|
||||||
|
TIM11 at 0 range 18 .. 18;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
-- BCDR
|
||||||
|
type RTC_Clock_Source is (
|
||||||
|
RTC_Not_Clocked,
|
||||||
|
RTC_Clock_LSE,
|
||||||
|
RTC_Clock_LSI,
|
||||||
|
RTC_Clock_HSE
|
||||||
|
) with Size => 2;
|
||||||
|
|
||||||
|
for RTC_Clock_Source use (
|
||||||
|
RTC_Not_Clocked => 2#00#,
|
||||||
|
RTC_Clock_LSE => 2#01#,
|
||||||
|
RTC_Clock_LSI => 2#10#,
|
||||||
|
RTC_Clock_HSE => 2#11#
|
||||||
|
);
|
||||||
|
|
||||||
|
type Backup_Domain_Control_Register is record
|
||||||
|
LSEON: Boolean;
|
||||||
|
LSERDY: Boolean;
|
||||||
|
LSEBYP: Boolean;
|
||||||
|
Reserved_3: Integer range 0 .. 2**5 - 1;
|
||||||
|
RTCSEL: RTC_Clock_Source;
|
||||||
|
Reserved_10: Integer range 0 .. 2**5 - 1;
|
||||||
|
RTCEN: Boolean;
|
||||||
|
BDRST: Boolean;
|
||||||
|
Reserved_17: Integer range 0 .. 2**15 - 1;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for Backup_Domain_Control_Register use record
|
||||||
|
LSEON at 0 range 0 .. 0;
|
||||||
|
LSERDY at 0 range 1 .. 1;
|
||||||
|
LSEBYP at 0 range 2 .. 2;
|
||||||
|
Reserved_3 at 0 range 3 .. 7;
|
||||||
|
RTCSEL at 0 range 8 .. 9;
|
||||||
|
Reserved_10 at 0 range 10 .. 14;
|
||||||
|
RTCEN at 0 range 15 .. 15;
|
||||||
|
BDRST at 0 range 16 .. 16;
|
||||||
|
Reserved_17 at 0 range 17 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
-- CSR
|
||||||
|
type Clock_Control_and_Status_Register is record
|
||||||
|
LSION: Boolean;
|
||||||
|
LSIRDY: Boolean;
|
||||||
|
Reserved_2: Integer range 0 .. 2**22 - 1;
|
||||||
|
RMVF: Boolean;
|
||||||
|
BORRSTF: Boolean;
|
||||||
|
PINRSTF: Boolean;
|
||||||
|
PORRSTF: Boolean;
|
||||||
|
SFTRSTF: Boolean;
|
||||||
|
IWDGRSTF: Boolean;
|
||||||
|
WWDGRSTF: Boolean;
|
||||||
|
LPWRRSTF: Boolean;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for Clock_Control_and_Status_Register use record
|
||||||
|
LSION at 0 range 0 .. 0;
|
||||||
|
LSIRDY at 0 range 1 .. 1;
|
||||||
|
Reserved_2 at 0 range 2 .. 23;
|
||||||
|
RMVF at 0 range 24 .. 24;
|
||||||
|
BORRSTF at 0 range 25 .. 25;
|
||||||
|
PINRSTF at 0 range 26 .. 26;
|
||||||
|
PORRSTF at 0 range 27 .. 27;
|
||||||
|
SFTRSTF at 0 range 28 .. 28;
|
||||||
|
IWDGRSTF at 0 range 29 .. 29;
|
||||||
|
WWDGRSTF at 0 range 30 .. 30;
|
||||||
|
LPWRRSTF at 0 range 31 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
-- SSCGR
|
||||||
|
type Spread_Select is (
|
||||||
|
Center_Spread,
|
||||||
|
Down_Spread
|
||||||
|
) with Size => 1;
|
||||||
|
|
||||||
|
for Spread_Select use (
|
||||||
|
Center_Spread => 0,
|
||||||
|
Down_Spread => 1
|
||||||
|
);
|
||||||
|
|
||||||
|
type Spread_Spectrum_Clock_Generation_Register is record
|
||||||
|
MODPER: Integer range 0 .. 2**13 - 1;
|
||||||
|
INCSTEP: Integer range 0 .. 2**15 - 1;
|
||||||
|
Reserved_28: Integer range 0 .. 3;
|
||||||
|
SPREADSEL: Spread_Select;
|
||||||
|
SSCGEN: Boolean;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for Spread_Spectrum_Clock_Generation_Register use record
|
||||||
|
MODPER at 0 range 0 .. 12;
|
||||||
|
INCSTEP at 0 range 13 .. 27;
|
||||||
|
Reserved_28 at 0 range 28 .. 29;
|
||||||
|
SPREADSEL at 0 range 30 .. 30;
|
||||||
|
SSCGEN at 0 range 31 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
-- PLLI2SCFGR
|
||||||
|
type PLLI2S_Configuration_Register is record
|
||||||
|
Reserved_0: Integer range 0 .. 2**6 - 1;
|
||||||
|
PLLI2SN: Integer range 2 .. 432;
|
||||||
|
Reserved_15: Integer range 0 .. 2**13 - 1;
|
||||||
|
PLLI2SR: Integer range 2 .. 7;
|
||||||
|
Reserved_31: Integer range 0 .. 1;
|
||||||
|
end record with Size => 32;
|
||||||
|
|
||||||
|
for PLLI2S_Configuration_Register use record
|
||||||
|
Reserved_0 at 0 range 0 .. 5;
|
||||||
|
PLLI2SN at 0 range 6 .. 14;
|
||||||
|
Reserved_15 at 0 range 15 .. 27;
|
||||||
|
PLLI2SR at 0 range 28 .. 30;
|
||||||
|
Reserved_31 at 0 range 31 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
type RCC_Registers is record
|
||||||
|
CR: Clock_Control_Register;
|
||||||
|
PLLCFGR: PLL_Configuration_Register;
|
||||||
|
CFGR: Clock_Configuration_Register;
|
||||||
|
CIR: Clock_Interrupt_Register;
|
||||||
|
AHB1RSTR: AHB1_Register;
|
||||||
|
AHB2RSTR: AHB2_Register;
|
||||||
|
AHB3RSTR: AHB3_Register;
|
||||||
|
APB1RSTR: APB1_Register;
|
||||||
|
APB2RSTR: APB2_Register;
|
||||||
|
AHB1ENR: AHB1_Register;
|
||||||
|
AHB2ENR: AHB2_Register;
|
||||||
|
AHB3ENR: AHB3_Register;
|
||||||
|
APB1ENR: APB1_Register;
|
||||||
|
APB2ENR: APB2_Register;
|
||||||
|
AHB1LPENR: AHB1_Register;
|
||||||
|
AHB2LPENR: AHB2_Register;
|
||||||
|
AHB3LPENR: AHB3_Register;
|
||||||
|
APB1LPENR: APB1_Register;
|
||||||
|
APB2LPENR: APB2_Register;
|
||||||
|
BDCR: Backup_Domain_Control_Register;
|
||||||
|
CSR: Clock_Control_and_Status_Register;
|
||||||
|
SSCGR: Spread_Spectrum_Clock_Generation_Register;
|
||||||
|
PLLI2SCFGR: PLLI2S_Configuration_Register;
|
||||||
|
end record with Volatile;
|
||||||
|
|
||||||
|
for RCC_Registers use record
|
||||||
|
CR at 16#00# range 0 .. 31;
|
||||||
|
PLLCFGR at 16#04# range 0 .. 31;
|
||||||
|
CFGR at 16#08# range 0 .. 31;
|
||||||
|
CIR at 16#0C# range 0 .. 31;
|
||||||
|
AHB1RSTR at 16#10# range 0 .. 31;
|
||||||
|
AHB2RSTR at 16#14# range 0 .. 31;
|
||||||
|
AHB3RSTR at 16#18# range 0 .. 31;
|
||||||
|
APB1RSTR at 16#20# range 0 .. 31;
|
||||||
|
APB2RSTR at 16#24# range 0 .. 31;
|
||||||
|
AHB1ENR at 16#30# range 0 .. 31;
|
||||||
|
AHB2ENR at 16#34# range 0 .. 31;
|
||||||
|
AHB3ENR at 16#38# range 0 .. 31;
|
||||||
|
APB1ENR at 16#40# range 0 .. 31;
|
||||||
|
APB2ENR at 16#44# range 0 .. 31;
|
||||||
|
AHB1LPENR at 16#50# range 0 .. 31;
|
||||||
|
AHB2LPENR at 16#54# range 0 .. 31;
|
||||||
|
AHB3LPENR at 16#58# range 0 .. 31;
|
||||||
|
APB1LPENR at 16#60# range 0 .. 31;
|
||||||
|
APB2LPENR at 16#64# range 0 .. 31;
|
||||||
|
BDCR at 16#70# range 0 .. 31;
|
||||||
|
CSR at 16#74# range 0 .. 31;
|
||||||
|
SSCGR at 16#80# range 0 .. 31;
|
||||||
|
PLLI2SCFGR at 16#84# range 0 .. 31;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
end STM32.Registers.RCC;
|
|
@ -0,0 +1,70 @@
|
||||||
|
package STM32.Registers.STM32F4_Map is
|
||||||
|
pragma Pure;
|
||||||
|
|
||||||
|
|
||||||
|
TIM2: constant := 16#4000_0000#;
|
||||||
|
TIM3: constant := 16#4000_0400#;
|
||||||
|
TIM4: constant := 16#4000_0800#;
|
||||||
|
TIM5: constant := 16#4000_0C00#;
|
||||||
|
TIM6: constant := 16#4000_1000#;
|
||||||
|
TIM7: constant := 16#4000_1400#;
|
||||||
|
TIM12: constant := 16#4000_1800#;
|
||||||
|
TIM13: constant := 16#4000_1C00#;
|
||||||
|
TIM14: constant := 16#4000_2000#;
|
||||||
|
RTC_and_BKP: constant := 16#4000_2800#;
|
||||||
|
WWDG: constant := 16#4000_2C00#;
|
||||||
|
IWDG: constant := 16#4000_3000#;
|
||||||
|
I2S2ext: constant := 16#4000_3400#;
|
||||||
|
SPI2_I2S2: constant := 16#4000_3800#;
|
||||||
|
SPI3_I2S3: constant := 16#4000_3C00#;
|
||||||
|
I2S3ext: constant := 16#4000_4000#;
|
||||||
|
USART2: constant := 16#4000_4400#;
|
||||||
|
USART3: constant := 16#4000_4800#;
|
||||||
|
UART4: constant := 16#4000_4C00#;
|
||||||
|
UART5: constant := 16#4000_5000#;
|
||||||
|
I2C1: constant := 16#4000_5400#;
|
||||||
|
I2C2: constant := 16#4000_5800#;
|
||||||
|
I2C3: constant := 16#4000_5C00#;
|
||||||
|
CAN1: constant := 16#4000_6400#;
|
||||||
|
CAN2: constant := 16#4000_6800#;
|
||||||
|
PWR: constant := 16#4000_7000#;
|
||||||
|
DAC: constant := 16#4000_7400#;
|
||||||
|
TIM1: constant := 16#4001_0000#;
|
||||||
|
TIM8: constant := 16#4001_0400#;
|
||||||
|
USART1: constant := 16#4001_1000#;
|
||||||
|
USART6: constant := 16#4001_1400#;
|
||||||
|
ADC1_2_3: constant := 16#4001_2000#;
|
||||||
|
SDIO: constant := 16#4001_2C00#;
|
||||||
|
SPI1: constant := 16#4001_3000#;
|
||||||
|
SYSCFG: constant := 16#4001_3800#;
|
||||||
|
EXTI: constant := 16#4001_3C00#;
|
||||||
|
TIM9: constant := 16#4001_4000#;
|
||||||
|
TIM10: constant := 16#4001_4400#;
|
||||||
|
TIM11: constant := 16#4001_4800#;
|
||||||
|
GPIOA: constant := 16#4002_0000#;
|
||||||
|
GPIOB: constant := 16#4002_0400#;
|
||||||
|
GPIOC: constant := 16#4002_0800#;
|
||||||
|
GPIOD: constant := 16#4002_0C00#;
|
||||||
|
GPIOE: constant := 16#4002_1000#;
|
||||||
|
GPIOF: constant := 16#4002_1400#;
|
||||||
|
GPIOG: constant := 16#4002_1800#;
|
||||||
|
GPIOH: constant := 16#4002_1C00#;
|
||||||
|
GPIOI: constant := 16#4002_2000#;
|
||||||
|
CRC: constant := 16#4002_3000#;
|
||||||
|
RCC: constant := 16#4002_3800#;
|
||||||
|
Flash_IR: constant := 16#4002_3C00#;
|
||||||
|
BKPSRAM: constant := 16#4002_4000#;
|
||||||
|
DMA1: constant := 16#4002_6000#;
|
||||||
|
DMA2: constant := 16#4002_6400#;
|
||||||
|
Ethernet_MAC:constant := 16#4002_8000#;
|
||||||
|
USB_OTG_HS: constant := 16#4004_0000#;
|
||||||
|
USB_OTG_FS: constant := 16#5000_0000#;
|
||||||
|
DCMI: constant := 16#5005_0000#;
|
||||||
|
RNG: constant := 16#5006_0800#;
|
||||||
|
FSMC_Bank1: constant := 16#6000_0000#;
|
||||||
|
FSMC_Bank2: constant := 16#7000_0000#;
|
||||||
|
FSMC_Bank3: constant := 16#8000_0000#;
|
||||||
|
FSMC_Bank4: constant := 16#9000_0000#;
|
||||||
|
FSMC: constant := 16#A000_0000#;
|
||||||
|
|
||||||
|
end STM32.Registers.STM32F4_Map;
|
|
@ -0,0 +1,136 @@
|
||||||
|
package STM32.Registers.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;
|
||||||
|
PMC: Peripherial_Mode_Register;
|
||||||
|
EXTICR1: External_Interrupt_Configuration_1.Register;
|
||||||
|
EXTICR2: External_Interrupt_Configuration_2.Register;
|
||||||
|
EXTICR3: External_Interrupt_Configuration_3.Register;
|
||||||
|
EXTICR4: External_Interrupt_Configuration_4.Register;
|
||||||
|
CMPCR: Compensation_Cell_Control_Register;
|
||||||
|
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.Registers.SysCfg;
|
|
@ -0,0 +1,3 @@
|
||||||
|
package STM32.Registers is
|
||||||
|
pragma Pure;
|
||||||
|
end STM32.Registers;
|
|
@ -0,0 +1,58 @@
|
||||||
|
with System;
|
||||||
|
with STM32.Registers.GPIO;
|
||||||
|
with STM32.Registers.RCC;
|
||||||
|
with STM32.Registers.EXTI;
|
||||||
|
with STM32.Registers.SYSCFG;
|
||||||
|
with STM32.Registers.FSMC;
|
||||||
|
with STM32.Registers.STM32F4_Map;
|
||||||
|
|
||||||
|
package STM32.STM32F407Z is
|
||||||
|
pragma Preelaborate;
|
||||||
|
|
||||||
|
--pragma Warnings (Off, "* may call Last_Chance_Handler");
|
||||||
|
--pragma Warnings (Off, "* may be incompatible with alignment of object");
|
||||||
|
|
||||||
|
EXTI: Registers.EXTI.EXTI_Registers
|
||||||
|
with Volatile, Import,
|
||||||
|
Address => System'To_Address(Registers.STM32F4_Map.EXTI);
|
||||||
|
|
||||||
|
FSMC: Registers.FSMC.FSMC_Registers
|
||||||
|
with Volatile, Import,
|
||||||
|
Address => System'To_Address(Registers.STM32F4_Map.FSMC);
|
||||||
|
|
||||||
|
GPIOA: Registers.GPIO.GPIO_Registers
|
||||||
|
with Volatile, Import,
|
||||||
|
Address => System'To_Address(Registers.STM32F4_Map.GPIOA);
|
||||||
|
|
||||||
|
GPIOC: Registers.GPIO.GPIO_Registers
|
||||||
|
with Volatile, Import,
|
||||||
|
Address => System'To_Address(Registers.STM32F4_Map.GPIOC);
|
||||||
|
|
||||||
|
GPIOD: Registers.GPIO.GPIO_Registers
|
||||||
|
with Volatile, Import,
|
||||||
|
Address => System'To_Address(Registers.STM32F4_Map.GPIOD);
|
||||||
|
|
||||||
|
GPIOE: Registers.GPIO.GPIO_Registers
|
||||||
|
with Volatile, Import,
|
||||||
|
Address => System'To_Address(Registers.STM32F4_Map.GPIOE);
|
||||||
|
|
||||||
|
GPIOF: Registers.GPIO.GPIO_Registers
|
||||||
|
with Volatile, Import,
|
||||||
|
Address => System'To_Address(Registers.STM32F4_Map.GPIOF);
|
||||||
|
|
||||||
|
GPIOG: Registers.GPIO.GPIO_Registers
|
||||||
|
with Volatile, Import,
|
||||||
|
Address => System'To_Address(Registers.STM32F4_Map.GPIOG);
|
||||||
|
|
||||||
|
RCC: Registers.RCC.RCC_Registers
|
||||||
|
with Volatile, Import,
|
||||||
|
Address => System'To_Address(Registers.STM32F4_Map.RCC);
|
||||||
|
|
||||||
|
SYSCFG: Registers.SYSCFG.SYSCFG_Registers
|
||||||
|
with Volatile, Import,
|
||||||
|
Address => System'To_Address(Registers.STM32F4_Map.SYSCFG);
|
||||||
|
|
||||||
|
--pragma Warnings (On, "* may call Last_Chance_Handler");
|
||||||
|
--pragma Warnings (On, "* may be incompatible with alignment of object");
|
||||||
|
|
||||||
|
end STM32.STM32F407Z;
|
|
@ -0,0 +1,3 @@
|
||||||
|
package STM32 is
|
||||||
|
pragma Pure;
|
||||||
|
end STM32;
|
|
@ -0,0 +1,17 @@
|
||||||
|
project STM32_Library is
|
||||||
|
for Source_Dirs use ("source");
|
||||||
|
for Object_Dir use "objects";
|
||||||
|
for Library_Dir use "library";
|
||||||
|
for Library_Name use "stm32";
|
||||||
|
for Library_Kind use "static";
|
||||||
|
--for Library_Interface use ("STM32", "STM32.STM32F407Z");
|
||||||
|
for Target use "arm-eabi";
|
||||||
|
--for Runtime("ada") use "ravenscar-sfp-stm32f4";
|
||||||
|
package Builder is
|
||||||
|
for Default_Switches("Ada") use (
|
||||||
|
"-gnato",
|
||||||
|
"-O2",
|
||||||
|
"-gnatW8"
|
||||||
|
);
|
||||||
|
end Builder;
|
||||||
|
end STM32_Library;
|
Loading…
Reference in New Issue