unit stm32f411xe;
interface
{$PACKRECORDS 2}
{$GOTO ON}
{$MODESWITCH ADVANCEDRECORDS}
// *
// ******************************************************************************
// * @file stm32f411xe.h
// * @author MCD Application Team
// * @version V2.4.0
// * @date 14-August-2015
// CMSIS STM32F411xExx Device Peripheral Access Layer Header File.
// *
// * This file contains:
// * - Data structures and the address mapping for all peripherals
// * - Peripheral's registers declarations and bits definition
// * - Macros to access peripheral’s registers hardware
// *
// ******************************************************************************
// * @attention
// *
// *
© COPYRIGHT(c) 2015 STMicroelectronics
// *
// * Redistribution and use in source and binary forms, with or without modification,
// * are permitted provided that the following conditions are met:
// * 1. Redistributions of source code must retain the above copyright notice,
// * this list of conditions and the following disclaimer.
// * 2. Redistributions in binary form must reproduce the above copyright notice,
// * this list of conditions and the following disclaimer in the documentation
// * and/or other materials provided with the distribution.
// * 3. Neither the name of STMicroelectronics nor the names of its contributors
// * may be used to endorse or promote products derived from this software
// * without specific prior written permission.
// *
// * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
// * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// *
// ******************************************************************************
// Configuration of the Cortex-M4 Processor and Core Peripherals
// STM32F4XX Interrupt Number Definition, according to the selected device
// * in @ref Library_configuration_section
type
TIRQn_Enum = (
NonMaskableInt_IRQn = -14, // 2 Non Maskable Interrupt
MemoryManagement_IRQn = -12, // 4 Cortex-M4 Memory Management Interrupt
BusFault_IRQn = -11, // 5 Cortex-M4 Bus Fault Interrupt
UsageFault_IRQn = -10, // 6 Cortex-M4 Usage Fault Interrupt
SVCall_IRQn = -5, // 11 Cortex-M4 SV Call Interrupt
DebugMonitor_IRQn = -4, // 12 Cortex-M4 Debug Monitor Interrupt
PendSV_IRQn = -2, // 14 Cortex-M4 Pend SV Interrupt
SysTick_IRQn = -1, // 15 Cortex-M4 System Tick Interrupt
WWDG_IRQn = 0, // Window WatchDog Interrupt
PVD_IRQn = 1, // PVD through EXTI Line detection Interrupt
TAMP_STAMP_IRQn = 2, // Tamper and TimeStamp interrupts through the EXTI line
RTC_WKUP_IRQn = 3, // RTC Wakeup interrupt through the EXTI line
FLASH_IRQn = 4, // FLASH global Interrupt
RCC_IRQn = 5, // RCC global Interrupt
EXTI0_IRQn = 6, // EXTI Line0 Interrupt
EXTI1_IRQn = 7, // EXTI Line1 Interrupt
EXTI2_IRQn = 8, // EXTI Line2 Interrupt
EXTI3_IRQn = 9, // EXTI Line3 Interrupt
EXTI4_IRQn = 10, // EXTI Line4 Interrupt
DMA1_Stream0_IRQn = 11, // DMA1 Stream 0 global Interrupt
DMA1_Stream1_IRQn = 12, // DMA1 Stream 1 global Interrupt
DMA1_Stream2_IRQn = 13, // DMA1 Stream 2 global Interrupt
DMA1_Stream3_IRQn = 14, // DMA1 Stream 3 global Interrupt
DMA1_Stream4_IRQn = 15, // DMA1 Stream 4 global Interrupt
DMA1_Stream5_IRQn = 16, // DMA1 Stream 5 global Interrupt
DMA1_Stream6_IRQn = 17, // DMA1 Stream 6 global Interrupt
ADC_IRQn = 18, // ADC1, ADC2 and ADC3 global Interrupts
EXTI9_5_IRQn = 23, // External Line[9:5] Interrupts
TIM1_BRK_TIM9_IRQn = 24, // TIM1 Break interrupt and TIM9 global interrupt
TIM1_UP_TIM10_IRQn = 25, // TIM1 Update Interrupt and TIM10 global interrupt
TIM1_TRG_COM_TIM11_IRQn = 26, // TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt
TIM1_CC_IRQn = 27, // TIM1 Capture Compare Interrupt
TIM2_IRQn = 28, // TIM2 global Interrupt
TIM3_IRQn = 29, // TIM3 global Interrupt
TIM4_IRQn = 30, // TIM4 global Interrupt
I2C1_EV_IRQn = 31, // I2C1 Event Interrupt
I2C1_ER_IRQn = 32, // I2C1 Error Interrupt
I2C2_EV_IRQn = 33, // I2C2 Event Interrupt
I2C2_ER_IRQn = 34, // I2C2 Error Interrupt
SPI1_IRQn = 35, // SPI1 global Interrupt
SPI2_IRQn = 36, // SPI2 global Interrupt
USART1_IRQn = 37, // USART1 global Interrupt
USART2_IRQn = 38, // USART2 global Interrupt
EXTI15_10_IRQn = 40, // External Line[15:10] Interrupts
RTC_Alarm_IRQn = 41, // RTC Alarm (A and B) through EXTI Line Interrupt
OTG_FS_WKUP_IRQn = 42, // USB OTG FS Wakeup through EXTI line interrupt
DMA1_Stream7_IRQn = 47, // DMA1 Stream7 Interrupt
SDIO_IRQn = 49, // SDIO global Interrupt
TIM5_IRQn = 50, // TIM5 global Interrupt
SPI3_IRQn = 51, // SPI3 global Interrupt
DMA2_Stream0_IRQn = 56, // DMA2 Stream 0 global Interrupt
DMA2_Stream1_IRQn = 57, // DMA2 Stream 1 global Interrupt
DMA2_Stream2_IRQn = 58, // DMA2 Stream 2 global Interrupt
DMA2_Stream3_IRQn = 59, // DMA2 Stream 3 global Interrupt
DMA2_Stream4_IRQn = 60, // DMA2 Stream 4 global Interrupt
OTG_FS_IRQn = 67, // USB OTG FS global Interrupt
DMA2_Stream5_IRQn = 68, // DMA2 Stream 5 global interrupt
DMA2_Stream6_IRQn = 69, // DMA2 Stream 6 global interrupt
DMA2_Stream7_IRQn = 70, // DMA2 Stream 7 global interrupt
USART6_IRQn = 71, // USART6 global interrupt
I2C3_EV_IRQn = 72, // I2C3 event interrupt
I2C3_ER_IRQn = 73, // I2C3 error interrupt
FPU_IRQn = 81, // FPU global interrupt
SPI4_IRQn = 84, // SPI4 global Interrupt
SPI5_IRQn = 85 // SPI5 global Interrupt
);
TADC_Registers = record
SR : longword; // ADC status register
CR1 : longword; // ADC control register 1
CR2 : longword; // ADC control register 2
SMPR1 : longword; // ADC sample time register 1
SMPR2 : longword; // ADC sample time register 2
JOFR1 : longword; // ADC injected channel data offset register 1
JOFR2 : longword; // ADC injected channel data offset register 2
JOFR3 : longword; // ADC injected channel data offset register 3
JOFR4 : longword; // ADC injected channel data offset register 4
HTR : longword; // ADC watchdog higher threshold register
LTR : longword; // ADC watchdog lower threshold register
SQR1 : longword; // ADC regular sequence register 1
SQR2 : longword; // ADC regular sequence register 2
SQR3 : longword; // ADC regular sequence register 3
JSQR : longword; // ADC injected sequence register
JDR1 : longword; // ADC injected data register 1
JDR2 : longword; // ADC injected data register 2
JDR3 : longword; // ADC injected data register 3
JDR4 : longword; // ADC injected data register 4
DR : longword; // ADC regular data register
end;
TADC_COMMON_Registers = record
CSR : longword; // ADC Common status register
CCR : longword; // ADC common control register
CDR : longword; // ADC common regular data register for dual
end;
TCRC_Registers = record
DR : longword; // CRC Data register
IDR : byte; // CRC Independent data register
RESERVED0 : byte; // Reserved, 0x05
RESERVED1 : word; // Reserved, 0x06
CR : longword; // CRC Control register
end;
TDBGMCU_Registers = record
IDCODE : longword; // MCU device ID code
CR : longword; // Debug MCU configuration register
APB1FZ : longword; // Debug MCU APB1 freeze register
APB2FZ : longword; // Debug MCU APB2 freeze register
end;
TDMA_STREAM_Registers = record
CR : longword; // DMA stream x configuration register
NDTR : longword; // DMA stream x number of data register
PAR : longword; // DMA stream x peripheral address register
M0AR : longword; // DMA stream x memory 0 address register
M1AR : longword; // DMA stream x memory 1 address register
FCR : longword; // DMA stream x FIFO control register
end;
TDMA_Registers = record
LISR : longword; // DMA low interrupt status register
HISR : longword; // DMA high interrupt status register
LIFCR : longword; // DMA low interrupt flag clear register
HIFCR : longword; // DMA high interrupt flag clear register
end;
TEXTI_Registers = record
IMR : longword; // EXTI Interrupt mask register
EMR : longword; // EXTI Event mask register
RTSR : longword; // EXTI Rising trigger selection register
FTSR : longword; // EXTI Falling trigger selection register
SWIER : longword; // EXTI Software interrupt event register
PR : longword; // EXTI Pending register
end;
TFLASH_Registers = record
ACR : longword; // FLASH access control register
KEYR : longword; // FLASH key register
OPTKEYR : longword; // FLASH option key register
SR : longword; // FLASH status register
CR : longword; // FLASH control register
OPTCR : longword; // FLASH option control register
OPTCR1 : longword; // FLASH option control register 1
end;
TGPIO_Registers = record
MODER : longword; // GPIO port mode register
OTYPER : longword; // GPIO port output type register
OSPEEDR : longword; // GPIO port output speed register
PUPDR : longword; // GPIO port pull-up/pull-down register
IDR : longword; // GPIO port input data register
ODR : longword; // GPIO port output data register
BSRR : longword; // GPIO port bit set/reset register
LCKR : longword; // GPIO port configuration lock register
AFR : array[0..1] of longword; // GPIO alternate function registers
end;
TSYSCFG_Registers = record
MEMRMP : longword; // SYSCFG memory remap register
PMC : longword; // SYSCFG peripheral mode configuration register
EXTICR : array[0..3] of longword; // SYSCFG external interrupt configuration registers
RESERVED : array[0..1] of longword; // Reserved, 0x18-0x1C
CMPCR : longword; // SYSCFG Compensation cell control register
end;
TI2C_Registers = record
CR1 : longword; // I2C Control register 1
CR2 : longword; // I2C Control register 2
OAR1 : longword; // I2C Own address register 1
OAR2 : longword; // I2C Own address register 2
DR : longword; // I2C Data register
SR1 : longword; // I2C Status register 1
SR2 : longword; // I2C Status register 2
CCR : longword; // I2C Clock control register
TRISE : longword; // I2C TRISE register
FLTR : longword; // I2C FLTR register
end;
TIWDG_Registers = record
KR : longword; // IWDG Key register
PR : longword; // IWDG Prescaler register
RLR : longword; // IWDG Reload register
SR : longword; // IWDG Status register
end;
TPWR_Registers = record
CR : longword; // PWR power control register
CSR : longword; // PWR power control/status register
end;
TRCC_Registers = record
CR : longword; // RCC clock control register
PLLCFGR : longword; // RCC PLL configuration register
CFGR : longword; // RCC clock configuration register
CIR : longword; // RCC clock interrupt register
AHB1RSTR : longword; // RCC AHB1 peripheral reset register
AHB2RSTR : longword; // RCC AHB2 peripheral reset register
AHB3RSTR : longword; // RCC AHB3 peripheral reset register
RESERVED0 : longword; // Reserved, 0x1C
APB1RSTR : longword; // RCC APB1 peripheral reset register
APB2RSTR : longword; // RCC APB2 peripheral reset register
RESERVED1 : array[0..1] of longword; // Reserved, 0x28-0x2C
AHB1ENR : longword; // RCC AHB1 peripheral clock register
AHB2ENR : longword; // RCC AHB2 peripheral clock register
AHB3ENR : longword; // RCC AHB3 peripheral clock register
RESERVED2 : longword; // Reserved, 0x3C
APB1ENR : longword; // RCC APB1 peripheral clock enable register
APB2ENR : longword; // RCC APB2 peripheral clock enable register
RESERVED3 : array[0..1] of longword; // Reserved, 0x48-0x4C
AHB1LPENR : longword; // RCC AHB1 peripheral clock enable in low power mode register
AHB2LPENR : longword; // RCC AHB2 peripheral clock enable in low power mode register
AHB3LPENR : longword; // RCC AHB3 peripheral clock enable in low power mode register
RESERVED4 : longword; // Reserved, 0x5C
APB1LPENR : longword; // RCC APB1 peripheral clock enable in low power mode register
APB2LPENR : longword; // RCC APB2 peripheral clock enable in low power mode register
RESERVED5 : array[0..1] of longword; // Reserved, 0x68-0x6C
BDCR : longword; // RCC Backup domain control register
CSR : longword; // RCC clock control & status register
RESERVED6 : array[0..1] of longword; // Reserved, 0x78-0x7C
SSCGR : longword; // RCC spread spectrum clock generation register
PLLI2SCFGR : longword; // RCC PLLI2S configuration register
RESERVED7 : longword; // Reserved 0x88
DCKCFGR : longword; // RCC Dedicated Clocks Configuration Register
end;
TRTC_Registers = record
TR : longword; // RTC time register
DR : longword; // RTC date register
CR : longword; // RTC control register
ISR : longword; // RTC initialization and status register
PRER : longword; // RTC prescaler register
WUTR : longword; // RTC wakeup timer register
CALIBR : longword; // RTC calibration register
ALRMAR : longword; // RTC alarm A register
ALRMBR : longword; // RTC alarm B register
WPR : longword; // RTC write protection register
SSR : longword; // RTC sub second register
SHIFTR : longword; // RTC shift control register
TSTR : longword; // RTC time stamp time register
TSDR : longword; // RTC time stamp date register
TSSSR : longword; // RTC time-stamp sub second register
CALR : longword; // RTC calibration register
TAFCR : longword; // RTC tamper and alternate function configuration register
ALRMASSR : longword; // RTC alarm A sub second register
ALRMBSSR : longword; // RTC alarm B sub second register
RESERVED7 : longword; // Reserved, 0x4C
BKP0R : longword; // RTC backup register 1
BKP1R : longword; // RTC backup register 1
BKP2R : longword; // RTC backup register 2
BKP3R : longword; // RTC backup register 3
BKP4R : longword; // RTC backup register 4
BKP5R : longword; // RTC backup register 5
BKP6R : longword; // RTC backup register 6
BKP7R : longword; // RTC backup register 7
BKP8R : longword; // RTC backup register 8
BKP9R : longword; // RTC backup register 9
BKP10R : longword; // RTC backup register 10
BKP11R : longword; // RTC backup register 11
BKP12R : longword; // RTC backup register 12
BKP13R : longword; // RTC backup register 13
BKP14R : longword; // RTC backup register 14
BKP15R : longword; // RTC backup register 15
BKP16R : longword; // RTC backup register 16
BKP17R : longword; // RTC backup register 17
BKP18R : longword; // RTC backup register 18
BKP19R : longword; // RTC backup register 19
end;
TSDIO_Registers = record
POWER : longword; // SDIO power control register
CLKCR : longword; // SDI clock control register
ARG : longword; // SDIO argument register
CMD : longword; // SDIO command register
RESPCMD : longword; // SDIO command response register
RESP1 : longword; // SDIO response 1 register
RESP2 : longword; // SDIO response 2 register
RESP3 : longword; // SDIO response 3 register
RESP4 : longword; // SDIO response 4 register
DTIMER : longword; // SDIO data timer register
DLEN : longword; // SDIO data length register
DCTRL : longword; // SDIO data control register
DCOUNT : longword; // SDIO data counter register
STA : longword; // SDIO status register
ICR : longword; // SDIO interrupt clear register
MASK : longword; // SDIO mask register
RESERVED0 : array[0..1] of longword; // Reserved, 0x40-0x44
FIFOCNT : longword; // SDIO FIFO counter register
RESERVED1 : array[0..12] of longword; // Reserved, 0x4C-0x7C
FIFO : longword; // SDIO data FIFO register
end;
TSPI_Registers = record
CR1 : longword; // SPI control register 1 (not used in I2S mode)
CR2 : longword; // SPI control register 2
SR : longword; // SPI status register
DR : longword; // SPI data register
CRCPR : longword; // SPI CRC polynomial register (not used in I2S mode)
RXCRCR : longword; // SPI RX CRC register (not used in I2S mode)
TXCRCR : longword; // SPI TX CRC register (not used in I2S mode)
I2SCFGR : longword; // SPI_I2S configuration register
I2SPR : longword; // SPI_I2S prescaler register
end;
TTIM_Registers = record
CR1 : longword; // TIM control register 1
CR2 : longword; // TIM control register 2
SMCR : longword; // TIM slave mode control register
DIER : longword; // TIM DMA/interrupt enable register
SR : longword; // TIM status register
EGR : longword; // TIM event generation register
CCMR1 : longword; // TIM capture/compare mode register 1
CCMR2 : longword; // TIM capture/compare mode register 2
CCER : longword; // TIM capture/compare enable register
CNT : longword; // TIM counter register
PSC : longword; // TIM prescaler
ARR : longword; // TIM auto-reload register
RCR : longword; // TIM repetition counter register
CCR1 : longword; // TIM capture/compare register 1
CCR2 : longword; // TIM capture/compare register 2
CCR3 : longword; // TIM capture/compare register 3
CCR4 : longword; // TIM capture/compare register 4
BDTR : longword; // TIM break and dead-time register
DCR : longword; // TIM DMA control register
DMAR : longword; // TIM DMA address for full transfer
&OR : longword; // TIM option register
end;
TUSART_Registers = record
SR : longword; // USART Status register
DR : longword; // USART Data register
BRR : longword; // USART Baud rate register
CR1 : longword; // USART Control register 1
CR2 : longword; // USART Control register 2
CR3 : longword; // USART Control register 3
GTPR : longword; // USART Guard time and prescaler register
end;
TWWDG_Registers = record
CR : longword; // WWDG Control register
CFR : longword; // WWDG Configuration register
SR : longword; // WWDG Status register
end;
TUSB_OTG_GLOBAL_Registers = record
GOTGCTL : longword; // USB_OTG Control and Status Register
GOTGINT : longword; // USB_OTG Interrupt Register
GAHBCFG : longword; // Core AHB Configuration Register
GUSBCFG : longword; // Core USB Configuration Register
GRSTCTL : longword; // Core Reset Register
GINTSTS : longword; // Core Interrupt Register
GINTMSK : longword; // Core Interrupt Mask Register
GRXSTSR : longword; // Receive Sts Q Read Register
GRXSTSP : longword; // Receive Sts Q Read & POP Register
GRXFSIZ : longword; // Receive FIFO Size Register
DIEPTXF0_HNPTXFSIZ : longword; // EP0 / Non Periodic Tx FIFO Size Register
HNPTXSTS : longword; // Non Periodic Tx FIFO/Queue Sts reg
RESERVED30 : array[0..1] of longword; // Reserved
GCCFG : longword; // General Purpose IO Register
CID : longword; // User ID Register
RESERVED40 : array[0..47] of longword; // Reserved
HPTXFSIZ : longword; // Host Periodic Tx FIFO Size Reg
DIEPTXF : array[0..14] of longword; // dev Periodic Transmit FIFO
end;
TUSB_OTG_DEVICE_Registers = record
DCFG : longword; // dev Configuration Register
DCTL : longword; // dev Control Register
DSTS : longword; // dev Status Register (RO)
RESERVED0C : longword; // Reserved
DIEPMSK : longword; // dev IN Endpoint Mask
DOEPMSK : longword; // dev OUT Endpoint Mask
DAINT : longword; // dev All Endpoints Itr Reg
DAINTMSK : longword; // dev All Endpoints Itr Mask
RESERVED20 : longword; // Reserved
RESERVED9 : longword; // Reserved
DVBUSDIS : longword; // dev VBUS discharge Register
DVBUSPULSE : longword; // dev VBUS Pulse Register
DTHRCTL : longword; // dev thr
DIEPEMPMSK : longword; // dev empty msk
DEACHINT : longword; // dedicated EP interrupt
DEACHMSK : longword; // dedicated EP msk
RESERVED40 : longword; // dedicated EP mask
DINEP1MSK : longword; // dedicated EP mask
RESERVED44 : array[0..14] of longword; // Reserved
DOUTEP1MSK : longword; // dedicated EP msk
end;
TUSB_OTG_INENDPOINT_Registers = record
DIEPCTL : longword; // dev IN Endpoint Control Reg 900h + (ep_num * 20h) + 00h
RESERVED04 : longword; // Reserved 900h + (ep_num * 20h) + 04h
DIEPINT : longword; // dev IN Endpoint Itr Reg 900h + (ep_num * 20h) + 08h
RESERVED0C : longword; // Reserved 900h + (ep_num * 20h) + 0Ch
DIEPTSIZ : longword; // IN Endpoint Txfer Size 900h + (ep_num * 20h) + 10h
DIEPDMA : longword; // IN Endpoint DMA Address Reg 900h + (ep_num * 20h) + 14h
DTXFSTS : longword; // IN Endpoint Tx FIFO Status Reg 900h + (ep_num * 20h) + 18h
RESERVED18 : longword; // Reserved 900h+(ep_num*20h)+1Ch-900h+ (ep_num * 20h) + 1Ch
end;
TUSB_OTG_OUTENDPOINT_Registers = record
DOEPCTL : longword; // dev OUT Endpoint Control Reg B00h + (ep_num * 20h) + 00h
RESERVED04 : longword; // Reserved B00h + (ep_num * 20h) + 04h
DOEPINT : longword; // dev OUT Endpoint Itr Reg B00h + (ep_num * 20h) + 08h
RESERVED0C : longword; // Reserved B00h + (ep_num * 20h) + 0Ch
DOEPTSIZ : longword; // dev OUT Endpoint Txfer Size B00h + (ep_num * 20h) + 10h
DOEPDMA : longword; // dev OUT Endpoint DMA Address B00h + (ep_num * 20h) + 14h
RESERVED18 : array[0..1] of longword; // Reserved B00h + (ep_num * 20h) + 18h - B00h + (ep_num * 20h) + 1Ch
end;
TUSB_OTG_HOST_Registers = record
HCFG : longword; // Host Configuration Register 400h
HFIR : longword; // Host Frame Interval Register 404h
HFNUM : longword; // Host Frame Nbr/Frame Remaining 408h
RESERVED40C : longword; // Reserved 40Ch
HPTXSTS : longword; // Host Periodic Tx FIFO/ Queue Status 410h
HAINT : longword; // Host All Channels Interrupt Register 414h
HAINTMSK : longword; // Host All Channels Interrupt Mask 418h
end;
TUSB_OTG_HOSTCHANNEL_Registers = record
HCCHAR : longword;
HCSPLT : longword;
HCINT : longword;
HCINTMSK : longword;
HCTSIZ : longword;
HCDMA : longword;
RESERVED : array[0..1] of longword;
end;
const
FLASH_BASE = $08000000; // FLASH(up to 1 MB) base address in the alias region
CCMDATARAM_BASE = $10000000; // CCM(core coupled memory) data RAM(64 KB) base address in the alias region
SRAM1_BASE = $20000000; // SRAM1(112 KB) base address in the alias region
SRAM2_BASE = $2001C000; // SRAM2(16 KB) base address in the alias region
PERIPH_BASE = $40000000; // Peripheral base address in the alias region
BKPSRAM_BASE = $40024000; // Backup SRAM(4 KB) base address in the alias region
SRAM1_BB_BASE = $22000000; // SRAM1(112 KB) base address in the bit-band region
SRAM2_BB_BASE = $22380000; // SRAM2(16 KB) base address in the bit-band region
PERIPH_BB_BASE = $42000000; // Peripheral base address in the bit-band region
BKPSRAM_BB_BASE = $42480000; // Backup SRAM(4 KB) base address in the bit-band region
SRAM_BASE = $20000000;
SRAM_BB_BASE = $22000000;
APB1PERIPH_BASE = $40000000;
APB2PERIPH_BASE = PERIPH_BASE + $00010000;
AHB1PERIPH_BASE = PERIPH_BASE + $00020000;
AHB2PERIPH_BASE = PERIPH_BASE + $10000000;
TIM2_BASE = APB1PERIPH_BASE + $0000;
TIM3_BASE = APB1PERIPH_BASE + $0400;
TIM4_BASE = APB1PERIPH_BASE + $0800;
TIM5_BASE = APB1PERIPH_BASE + $0C00;
RTC_BASE = APB1PERIPH_BASE + $2800;
WWDG_BASE = APB1PERIPH_BASE + $2C00;
IWDG_BASE = APB1PERIPH_BASE + $3000;
I2S2ext_BASE = APB1PERIPH_BASE + $3400;
SPI2_BASE = APB1PERIPH_BASE + $3800;
SPI3_BASE = APB1PERIPH_BASE + $3C00;
I2S3ext_BASE = APB1PERIPH_BASE + $4000;
USART2_BASE = APB1PERIPH_BASE + $4400;
I2C1_BASE = APB1PERIPH_BASE + $5400;
I2C2_BASE = APB1PERIPH_BASE + $5800;
I2C3_BASE = APB1PERIPH_BASE + $5C00;
PWR_BASE = APB1PERIPH_BASE + $7000;
TIM1_BASE = APB2PERIPH_BASE + $0000;
USART1_BASE = APB2PERIPH_BASE + $1000;
USART6_BASE = APB2PERIPH_BASE + $1400;
ADC1_BASE = APB2PERIPH_BASE + $2000;
ADC_BASE = APB2PERIPH_BASE + $2300;
SDIO_BASE = APB2PERIPH_BASE + $2C00;
SPI1_BASE = APB2PERIPH_BASE + $3000;
SPI4_BASE = APB2PERIPH_BASE + $3400;
SYSCFG_BASE = APB2PERIPH_BASE + $3800;
EXTI_BASE = APB2PERIPH_BASE + $3C00;
TIM9_BASE = APB2PERIPH_BASE + $4000;
TIM10_BASE = APB2PERIPH_BASE + $4400;
TIM11_BASE = APB2PERIPH_BASE + $4800;
SPI5_BASE = APB2PERIPH_BASE + $5000;
GPIOA_BASE = AHB1PERIPH_BASE + $0000;
GPIOB_BASE = AHB1PERIPH_BASE + $0400;
GPIOC_BASE = AHB1PERIPH_BASE + $0800;
GPIOD_BASE = AHB1PERIPH_BASE + $0C00;
GPIOE_BASE = AHB1PERIPH_BASE + $1000;
GPIOH_BASE = AHB1PERIPH_BASE + $1C00;
CRC_BASE = AHB1PERIPH_BASE + $3000;
RCC_BASE = AHB1PERIPH_BASE + $3800;
FLASH_R_BASE = AHB1PERIPH_BASE + $3C00;
DMA1_BASE = AHB1PERIPH_BASE + $6000;
DMA1_Stream0_BASE = DMA1_BASE + $010;
DMA1_Stream1_BASE = DMA1_BASE + $028;
DMA1_Stream2_BASE = DMA1_BASE + $040;
DMA1_Stream3_BASE = DMA1_BASE + $058;
DMA1_Stream4_BASE = DMA1_BASE + $070;
DMA1_Stream5_BASE = DMA1_BASE + $088;
DMA1_Stream6_BASE = DMA1_BASE + $0A0;
DMA1_Stream7_BASE = DMA1_BASE + $0B8;
DMA2_BASE = AHB1PERIPH_BASE + $6400;
DMA2_Stream0_BASE = DMA2_BASE + $010;
DMA2_Stream1_BASE = DMA2_BASE + $028;
DMA2_Stream2_BASE = DMA2_BASE + $040;
DMA2_Stream3_BASE = DMA2_BASE + $058;
DMA2_Stream4_BASE = DMA2_BASE + $070;
DMA2_Stream5_BASE = DMA2_BASE + $088;
DMA2_Stream6_BASE = DMA2_BASE + $0A0;
DMA2_Stream7_BASE = DMA2_BASE + $0B8;
DBGMCU_BASE = $E0042000;
USB_OTG_FS_PERIPH_BASE = $50000000;
USB_OTG_GLOBAL_BASE = $000;
USB_OTG_DEVICE_BASE = $800;
USB_OTG_IN_ENDPOINT_BASE = $900;
USB_OTG_OUT_ENDPOINT_BASE = $B00;
USB_OTG_HOST_BASE = $400;
USB_OTG_HOST_PORT_BASE = $440;
USB_OTG_HOST_CHANNEL_BASE = $500;
USB_OTG_PCGCCTL_BASE = $E00;
USB_OTG_FIFO_BASE = $1000;
var
TIM2 : TTIM_Registers absolute TIM2_BASE;
TIM3 : TTIM_Registers absolute TIM3_BASE;
TIM4 : TTIM_Registers absolute TIM4_BASE;
TIM5 : TTIM_Registers absolute TIM5_BASE;
RTC : TRTC_Registers absolute RTC_BASE;
WWDG : TWWDG_Registers absolute WWDG_BASE;
IWDG : TIWDG_Registers absolute IWDG_BASE;
I2S2ext : TSPI_Registers absolute I2S2ext_BASE;
SPI2 : TSPI_Registers absolute SPI2_BASE;
SPI3 : TSPI_Registers absolute SPI3_BASE;
I2S3ext : TSPI_Registers absolute I2S3ext_BASE;
USART2 : TUSART_Registers absolute USART2_BASE;
I2C1 : TI2C_Registers absolute I2C1_BASE;
I2C2 : TI2C_Registers absolute I2C2_BASE;
I2C3 : TI2C_Registers absolute I2C3_BASE;
PWR : TPWR_Registers absolute PWR_BASE;
TIM1 : TTIM_Registers absolute TIM1_BASE;
USART1 : TUSART_Registers absolute USART1_BASE;
USART6 : TUSART_Registers absolute USART6_BASE;
ADC : TADC_Common_Registers absolute ADC_BASE;
ADC1 : TADC_Registers absolute ADC1_BASE;
SDIO : TSDIO_Registers absolute SDIO_BASE;
SPI1 : TSPI_Registers absolute SPI1_BASE;
SPI4 : TSPI_Registers absolute SPI4_BASE;
SYSCFG : TSYSCFG_Registers absolute SYSCFG_BASE;
EXTI : TEXTI_Registers absolute EXTI_BASE;
TIM9 : TTIM_Registers absolute TIM9_BASE;
TIM10 : TTIM_Registers absolute TIM10_BASE;
TIM11 : TTIM_Registers absolute TIM11_BASE;
SPI5 : TSPI_Registers absolute SPI5_BASE;
GPIOA : TGPIO_Registers absolute GPIOA_BASE;
GPIOB : TGPIO_Registers absolute GPIOB_BASE;
GPIOC : TGPIO_Registers absolute GPIOC_BASE;
GPIOD : TGPIO_Registers absolute GPIOD_BASE;
GPIOE : TGPIO_Registers absolute GPIOE_BASE;
GPIOH : TGPIO_Registers absolute GPIOH_BASE;
CRC : TCRC_Registers absolute CRC_BASE;
RCC : TRCC_Registers absolute RCC_BASE;
FLASH : TFLASH_Registers absolute FLASH_R_BASE;
DMA1 : TDMA_Registers absolute DMA1_BASE;
DMA1_Stream0 : TDMA_Stream_Registers absolute DMA1_Stream0_BASE;
DMA1_Stream1 : TDMA_Stream_Registers absolute DMA1_Stream1_BASE;
DMA1_Stream2 : TDMA_Stream_Registers absolute DMA1_Stream2_BASE;
DMA1_Stream3 : TDMA_Stream_Registers absolute DMA1_Stream3_BASE;
DMA1_Stream4 : TDMA_Stream_Registers absolute DMA1_Stream4_BASE;
DMA1_Stream5 : TDMA_Stream_Registers absolute DMA1_Stream5_BASE;
DMA1_Stream6 : TDMA_Stream_Registers absolute DMA1_Stream6_BASE;
DMA1_Stream7 : TDMA_Stream_Registers absolute DMA1_Stream7_BASE;
DMA2 : TDMA_Registers absolute DMA2_BASE;
DMA2_Stream0 : TDMA_Stream_Registers absolute DMA2_Stream0_BASE;
DMA2_Stream1 : TDMA_Stream_Registers absolute DMA2_Stream1_BASE;
DMA2_Stream2 : TDMA_Stream_Registers absolute DMA2_Stream2_BASE;
DMA2_Stream3 : TDMA_Stream_Registers absolute DMA2_Stream3_BASE;
DMA2_Stream4 : TDMA_Stream_Registers absolute DMA2_Stream4_BASE;
DMA2_Stream5 : TDMA_Stream_Registers absolute DMA2_Stream5_BASE;
DMA2_Stream6 : TDMA_Stream_Registers absolute DMA2_Stream6_BASE;
DMA2_Stream7 : TDMA_Stream_Registers absolute DMA2_Stream7_BASE;
DBGMCU : TDBGMCU_Registers absolute DBGMCU_BASE;
implementation
procedure NonMaskableInt_interrupt; external name 'NonMaskableInt_interrupt';
procedure MemoryManagement_interrupt; external name 'MemoryManagement_interrupt';
procedure BusFault_interrupt; external name 'BusFault_interrupt';
procedure UsageFault_interrupt; external name 'UsageFault_interrupt';
procedure SVCall_interrupt; external name 'SVCall_interrupt';
procedure DebugMonitor_interrupt; external name 'DebugMonitor_interrupt';
procedure PendSV_interrupt; external name 'PendSV_interrupt';
procedure SysTick_interrupt; external name 'SysTick_interrupt';
procedure WWDG_interrupt; external name 'WWDG_interrupt';
procedure PVD_interrupt; external name 'PVD_interrupt';
procedure TAMP_STAMP_interrupt; external name 'TAMP_STAMP_interrupt';
procedure RTC_WKUP_interrupt; external name 'RTC_WKUP_interrupt';
procedure FLASH_interrupt; external name 'FLASH_interrupt';
procedure RCC_interrupt; external name 'RCC_interrupt';
procedure EXTI0_interrupt; external name 'EXTI0_interrupt';
procedure EXTI1_interrupt; external name 'EXTI1_interrupt';
procedure EXTI2_interrupt; external name 'EXTI2_interrupt';
procedure EXTI3_interrupt; external name 'EXTI3_interrupt';
procedure EXTI4_interrupt; external name 'EXTI4_interrupt';
procedure DMA1_Stream0_interrupt; external name 'DMA1_Stream0_interrupt';
procedure DMA1_Stream1_interrupt; external name 'DMA1_Stream1_interrupt';
procedure DMA1_Stream2_interrupt; external name 'DMA1_Stream2_interrupt';
procedure DMA1_Stream3_interrupt; external name 'DMA1_Stream3_interrupt';
procedure DMA1_Stream4_interrupt; external name 'DMA1_Stream4_interrupt';
procedure DMA1_Stream5_interrupt; external name 'DMA1_Stream5_interrupt';
procedure DMA1_Stream6_interrupt; external name 'DMA1_Stream6_interrupt';
procedure ADC_interrupt; external name 'ADC_interrupt';
procedure EXTI9_5_interrupt; external name 'EXTI9_5_interrupt';
procedure TIM1_BRK_TIM9_interrupt; external name 'TIM1_BRK_TIM9_interrupt';
procedure TIM1_UP_TIM10_interrupt; external name 'TIM1_UP_TIM10_interrupt';
procedure TIM1_TRG_COM_TIM11_interrupt; external name 'TIM1_TRG_COM_TIM11_interrupt';
procedure TIM1_CC_interrupt; external name 'TIM1_CC_interrupt';
procedure TIM2_interrupt; external name 'TIM2_interrupt';
procedure TIM3_interrupt; external name 'TIM3_interrupt';
procedure TIM4_interrupt; external name 'TIM4_interrupt';
procedure I2C1_EV_interrupt; external name 'I2C1_EV_interrupt';
procedure I2C1_ER_interrupt; external name 'I2C1_ER_interrupt';
procedure I2C2_EV_interrupt; external name 'I2C2_EV_interrupt';
procedure I2C2_ER_interrupt; external name 'I2C2_ER_interrupt';
procedure SPI1_interrupt; external name 'SPI1_interrupt';
procedure SPI2_interrupt; external name 'SPI2_interrupt';
procedure USART1_interrupt; external name 'USART1_interrupt';
procedure USART2_interrupt; external name 'USART2_interrupt';
procedure EXTI15_10_interrupt; external name 'EXTI15_10_interrupt';
procedure RTC_Alarm_interrupt; external name 'RTC_Alarm_interrupt';
procedure OTG_FS_WKUP_interrupt; external name 'OTG_FS_WKUP_interrupt';
procedure DMA1_Stream7_interrupt; external name 'DMA1_Stream7_interrupt';
procedure SDIO_interrupt; external name 'SDIO_interrupt';
procedure TIM5_interrupt; external name 'TIM5_interrupt';
procedure SPI3_interrupt; external name 'SPI3_interrupt';
procedure DMA2_Stream0_interrupt; external name 'DMA2_Stream0_interrupt';
procedure DMA2_Stream1_interrupt; external name 'DMA2_Stream1_interrupt';
procedure DMA2_Stream2_interrupt; external name 'DMA2_Stream2_interrupt';
procedure DMA2_Stream3_interrupt; external name 'DMA2_Stream3_interrupt';
procedure DMA2_Stream4_interrupt; external name 'DMA2_Stream4_interrupt';
procedure OTG_FS_interrupt; external name 'OTG_FS_interrupt';
procedure DMA2_Stream5_interrupt; external name 'DMA2_Stream5_interrupt';
procedure DMA2_Stream6_interrupt; external name 'DMA2_Stream6_interrupt';
procedure DMA2_Stream7_interrupt; external name 'DMA2_Stream7_interrupt';
procedure USART6_interrupt; external name 'USART6_interrupt';
procedure I2C3_EV_interrupt; external name 'I2C3_EV_interrupt';
procedure I2C3_ER_interrupt; external name 'I2C3_ER_interrupt';
procedure FPU_interrupt; external name 'FPU_interrupt';
procedure SPI4_interrupt; external name 'SPI4_interrupt';
procedure SPI5_interrupt; external name 'SPI5_interrupt';
{$i cortexm4f_start.inc}
procedure Vectors; assembler; nostackframe;
label interrupt_vectors;
asm
.section ".init.interrupt_vectors"
interrupt_vectors:
.long _stack_top
.long Startup
.long NonMaskableInt_interrupt
.long 0
.long MemoryManagement_interrupt
.long BusFault_interrupt
.long UsageFault_interrupt
.long 0
.long 0
.long 0
.long 0
.long SVCall_interrupt
.long DebugMonitor_interrupt
.long 0
.long PendSV_interrupt
.long SysTick_interrupt
.long WWDG_interrupt
.long PVD_interrupt
.long TAMP_STAMP_interrupt
.long RTC_WKUP_interrupt
.long FLASH_interrupt
.long RCC_interrupt
.long EXTI0_interrupt
.long EXTI1_interrupt
.long EXTI2_interrupt
.long EXTI3_interrupt
.long EXTI4_interrupt
.long DMA1_Stream0_interrupt
.long DMA1_Stream1_interrupt
.long DMA1_Stream2_interrupt
.long DMA1_Stream3_interrupt
.long DMA1_Stream4_interrupt
.long DMA1_Stream5_interrupt
.long DMA1_Stream6_interrupt
.long ADC_interrupt
.long 0
.long 0
.long 0
.long 0
.long EXTI9_5_interrupt
.long TIM1_BRK_TIM9_interrupt
.long TIM1_UP_TIM10_interrupt
.long TIM1_TRG_COM_TIM11_interrupt
.long TIM1_CC_interrupt
.long TIM2_interrupt
.long TIM3_interrupt
.long TIM4_interrupt
.long I2C1_EV_interrupt
.long I2C1_ER_interrupt
.long I2C2_EV_interrupt
.long I2C2_ER_interrupt
.long SPI1_interrupt
.long SPI2_interrupt
.long USART1_interrupt
.long USART2_interrupt
.long 0
.long EXTI15_10_interrupt
.long RTC_Alarm_interrupt
.long OTG_FS_WKUP_interrupt
.long 0
.long 0
.long 0
.long 0
.long DMA1_Stream7_interrupt
.long 0
.long SDIO_interrupt
.long TIM5_interrupt
.long SPI3_interrupt
.long 0
.long 0
.long 0
.long 0
.long DMA2_Stream0_interrupt
.long DMA2_Stream1_interrupt
.long DMA2_Stream2_interrupt
.long DMA2_Stream3_interrupt
.long DMA2_Stream4_interrupt
.long 0
.long 0
.long 0
.long 0
.long 0
.long 0
.long OTG_FS_interrupt
.long DMA2_Stream5_interrupt
.long DMA2_Stream6_interrupt
.long DMA2_Stream7_interrupt
.long USART6_interrupt
.long I2C3_EV_interrupt
.long I2C3_ER_interrupt
.long 0
.long 0
.long 0
.long 0
.long 0
.long 0
.long 0
.long FPU_interrupt
.long 0
.long 0
.long SPI4_interrupt
.long SPI5_interrupt
.set NonMaskableInt_interrupt, HaltProc
.set MemoryManagement_interrupt, HaltProc
.set BusFault_interrupt, HaltProc
.set UsageFault_interrupt, HaltProc
.set SVCall_interrupt, HaltProc
.set DebugMonitor_interrupt, HaltProc
.set PendSV_interrupt, HaltProc
.set SysTick_interrupt, HaltProc
.set WWDG_interrupt, HaltProc
.set PVD_interrupt, HaltProc
.set TAMP_STAMP_interrupt, HaltProc
.set RTC_WKUP_interrupt, HaltProc
.set FLASH_interrupt, HaltProc
.set RCC_interrupt, HaltProc
.set EXTI0_interrupt, HaltProc
.set EXTI1_interrupt, HaltProc
.set EXTI2_interrupt, HaltProc
.set EXTI3_interrupt, HaltProc
.set EXTI4_interrupt, HaltProc
.set DMA1_Stream0_interrupt, HaltProc
.set DMA1_Stream1_interrupt, HaltProc
.set DMA1_Stream2_interrupt, HaltProc
.set DMA1_Stream3_interrupt, HaltProc
.set DMA1_Stream4_interrupt, HaltProc
.set DMA1_Stream5_interrupt, HaltProc
.set DMA1_Stream6_interrupt, HaltProc
.set ADC_interrupt, HaltProc
.set EXTI9_5_interrupt, HaltProc
.set TIM1_BRK_TIM9_interrupt, HaltProc
.set TIM1_UP_TIM10_interrupt, HaltProc
.set TIM1_TRG_COM_TIM11_interrupt, HaltProc
.set TIM1_CC_interrupt, HaltProc
.set TIM2_interrupt, HaltProc
.set TIM3_interrupt, HaltProc
.set TIM4_interrupt, HaltProc
.set I2C1_EV_interrupt, HaltProc
.set I2C1_ER_interrupt, HaltProc
.set I2C2_EV_interrupt, HaltProc
.set I2C2_ER_interrupt, HaltProc
.set SPI1_interrupt, HaltProc
.set SPI2_interrupt, HaltProc
.set USART1_interrupt, HaltProc
.set USART2_interrupt, HaltProc
.set EXTI15_10_interrupt, HaltProc
.set RTC_Alarm_interrupt, HaltProc
.set OTG_FS_WKUP_interrupt, HaltProc
.set DMA1_Stream7_interrupt, HaltProc
.set SDIO_interrupt, HaltProc
.set TIM5_interrupt, HaltProc
.set SPI3_interrupt, HaltProc
.set DMA2_Stream0_interrupt, HaltProc
.set DMA2_Stream1_interrupt, HaltProc
.set DMA2_Stream2_interrupt, HaltProc
.set DMA2_Stream3_interrupt, HaltProc
.set DMA2_Stream4_interrupt, HaltProc
.set OTG_FS_interrupt, HaltProc
.set DMA2_Stream5_interrupt, HaltProc
.set DMA2_Stream6_interrupt, HaltProc
.set DMA2_Stream7_interrupt, HaltProc
.set USART6_interrupt, HaltProc
.set I2C3_EV_interrupt, HaltProc
.set I2C3_ER_interrupt, HaltProc
.set FPU_interrupt, HaltProc
.set SPI4_interrupt, HaltProc
.set SPI5_interrupt, HaltProc
.text
end;
end.