Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; STM32F4xx.inc
- ; http://teplofizik.diary.ru/p181188784.htm
- ; Файл описания периферии STM32F4xx.
- AREA |.text|, CODE, READONLY
- ; ======================================================================
- ; CONTROL
- ; Режим доступа: Priveleged
- ; Доступ через MSR, MRS команды.
- CONTROL_nPRIV EQU 0x00000001 ; Снятие привелегий с Thread Mode
- CONTROL_SPSEL EQU 0x00000002 ; Выбор стекового регистра для Handler Mode (0: MSP, 1: PSP)
- CONTROL_FPCA EQU 0x00000004 ; Сохранение контекста FPU
- ; ======================================================================
- ; SHCSR - System handler control and state register
- SHCSR EQU 0xE000ED24
- SHCSR_MEMFAULTACT EQU 0x00000001 ; 0 бит
- SHCSR_BUSFAULTACT EQU 0x00000002 ; 1 бит
- SHCSR_USGFAULTACT EQU 0x00000008 ; 3 бит
- SHCSR_SVCALLACT EQU 0x00000080 ; 7 бит
- SHCSR_MONITORACT EQU 0x00000100 ; 8 бит
- SHCSR_PENDSVACT EQU 0x00000400 ; 10 бит
- SHCSR_SYSTICKACT EQU 0x00000800 ; 11 бит
- SHCSR_USGFAULTPENDED EQU 0x00001000 ; 12 бит
- SHCSR_MEMFAULTPENDED EQU 0x00002000 ; 13 бит
- SHCSR_BUSFAULTPENDED EQU 0x00004000 ; 14 бит
- SHCSR_SVCALLPENDED EQU 0x00008000 ; 15 бит
- SHCSR_MEMFAULTENA EQU 0x00010000 ; 16 бит
- SHCSR_BUSFAULTENA EQU 0x00020000 ; 17 бит
- SHCSR_USGFAULTENA EQU 0x00040000 ; 18 бит
- ; ======================================================================
- ; ICSR - Interrupt control and state register
- ICSR EQU 0xE000ED04
- ICSR_PENDSVSET EQU 0x10000000 ; 28 бит
- ; ======================================================================
- ; RCC
- RCC_AHB1ENR EQU 0x40023830
- RCC_AHB1ENR_GPIOAEN EQU 0x00000001 ; GPIOA
- RCC_AHB1ENR_GPIOBEN EQU 0x00000002 ; GPIOB
- RCC_AHB1ENR_GPIOCEN EQU 0x00000004 ; GPIOC
- RCC_AHB1ENR_GPIODEN EQU 0x00000008 ; GPIOD
- RCC_AHB1ENR_GPIOEEN EQU 0x00000010 ; GPIOE
- RCC_APB1ENR EQU 0x40023840
- RCC_APB1ENR_TIM2EN EQU 0x00000001 ; TIM2
- RCC_APB1ENR_TIM3EN EQU 0x00000002 ; TIM3
- RCC_APB1ENR_TIM4EN EQU 0x00000004 ; TIM4
- RCC_APB1ENR_TIM5EN EQU 0x00000008 ; TIM5
- RCC_APB1ENR_TIM6EN EQU 0x00000010 ; TIM6
- RCC_APB1ENR_TIM7EN EQU 0x00000020 ; TIM7
- RCC_APB1ENR_TIM12EN EQU 0x00000040 ; TIM12
- RCC_APB1ENR_TIM13EN EQU 0x00000080 ; TIM13
- RCC_APB1ENR_TIM14EN EQU 0x00000100 ; TIM14
- RCC_APB2ENR EQU 0x40023844
- RCC_APB2ENR_SPI1EN EQU 0x00001000 ; SPI1
- ; ======================================================================
- ; SysTick Timer
- ; Режим доступа: Priveleged
- STK_BASE EQU 0xE000E010
- STK_CTRL_OFFSET EQU 0x00000000 ; Регистр управления и статус
- STK_LOAD_OFFSET EQU 0x00000004 ; Значение для перезагрузки таймера
- STK_VAL_OFFSET EQU 0x00000008 ; Текущее значение
- STK_CALIB_OFFSET EQU 0x0000000C ; Калибрация
- STK_CTRL_ENABLE EQU 0x00000001 ; Разрешение работы таймера
- STK_CTRL_TICKINT EQU 0x00000002 ; Разрешение прерывания
- STK_CTRL_CLKSOURCE EQU 0x00000004 ; Источник тактирования
- ; 0 - AHB / 8
- ; 1 - AHB
- STK_CTRL_COUNTFLAG EQU 0x00010000 ; Досчитал ли до нуля?
- ; ======================================================================
- ; GPIO
- GPIOA_BASE EQU 0x40020000
- GPIOB_BASE EQU 0x40020400
- GPIOC_BASE EQU 0x40020800
- GPIOD_BASE EQU 0x40020C00
- GPIOE_BASE EQU 0x40021000
- ; Регистры
- GPIO_MODER_OFFSET EQU 0x00000000 ; GPIOx->MODER
- GPIO_OTYPER_OFFSET EQU 0x00000004 ; GPIOx->OTYPER
- GPIO_OSPEEDR_OFFSET EQU 0x00000008 ; GPIOx->OSPEEDR
- GPIO_PUPDR_OFFSET EQU 0x0000000C ; GPIOx->PUPDR
- GPIO_IDR_OFFSET EQU 0x00000010 ; GPIOx->IDR
- GPIO_ODR_OFFSET EQU 0x00000014 ; GPIOx->ODR
- GPIO_BSRRL_OFFSET EQU 0x00000018 ; GPIOx->BSRRL Сброс
- GPIO_BSRRH_OFFSET EQU 0x0000001A ; GPIOx->BSRRH Установка
- GPIO_LCKR_OFFSET EQU 0x0000001C ; GPIOx->LCKR
- GPIO_AFRL_OFFSET EQU 0x00000020 ; GPIOx->AFRL
- GPIO_AFRH_OFFSET EQU 0x00000024 ; GPIOx->AFRH
- ; GPIOx->OSPEEDR
- ; Режим: 25 МГц
- GPIO_OSPEEDR_OSPEEDR0_0 EQU 0x00000001
- GPIO_OSPEEDR_OSPEEDR1_0 EQU 0x00000004
- GPIO_OSPEEDR_OSPEEDR2_0 EQU 0x00000010
- GPIO_OSPEEDR_OSPEEDR3_0 EQU 0x00000040
- GPIO_OSPEEDR_OSPEEDR4_0 EQU 0x00000100
- GPIO_OSPEEDR_OSPEEDR5_0 EQU 0x00000400
- GPIO_OSPEEDR_OSPEEDR6_0 EQU 0x00001000
- GPIO_OSPEEDR_OSPEEDR7_0 EQU 0x00004000
- GPIO_OSPEEDR_OSPEEDR8_0 EQU 0x00010000
- GPIO_OSPEEDR_OSPEEDR9_0 EQU 0x00040000
- GPIO_OSPEEDR_OSPEEDR10_0 EQU 0x00100000
- GPIO_OSPEEDR_OSPEEDR11_0 EQU 0x00400000
- GPIO_OSPEEDR_OSPEEDR12_0 EQU 0x01000000
- GPIO_OSPEEDR_OSPEEDR13_0 EQU 0x04000000
- GPIO_OSPEEDR_OSPEEDR14_0 EQU 0x10000000
- GPIO_OSPEEDR_OSPEEDR15_0 EQU 0x40000000
- ; GPIOx->OSPEEDR
- ; Режим: 50 МГц
- GPIO_OSPEEDR_OSPEEDR0_1 EQU 0x00000002
- GPIO_OSPEEDR_OSPEEDR1_1 EQU 0x00000008
- GPIO_OSPEEDR_OSPEEDR2_1 EQU 0x00000020
- GPIO_OSPEEDR_OSPEEDR3_1 EQU 0x00000080
- GPIO_OSPEEDR_OSPEEDR4_1 EQU 0x00000200
- GPIO_OSPEEDR_OSPEEDR5_1 EQU 0x00000800
- GPIO_OSPEEDR_OSPEEDR6_1 EQU 0x00002000
- GPIO_OSPEEDR_OSPEEDR7_1 EQU 0x00008000
- GPIO_OSPEEDR_OSPEEDR8_1 EQU 0x00020000
- GPIO_OSPEEDR_OSPEEDR9_1 EQU 0x00080000
- GPIO_OSPEEDR_OSPEEDR10_1 EQU 0x00200000
- GPIO_OSPEEDR_OSPEEDR11_1 EQU 0x00800000
- GPIO_OSPEEDR_OSPEEDR12_1 EQU 0x02000000
- GPIO_OSPEEDR_OSPEEDR13_1 EQU 0x08000000
- GPIO_OSPEEDR_OSPEEDR14_1 EQU 0x20000000
- GPIO_OSPEEDR_OSPEEDR15_1 EQU 0x80000000
- ; GPIOx->MODER
- ; Режим: цифровой выход
- GPIO_MODER_MODER0_0 EQU 0x00000001
- GPIO_MODER_MODER1_0 EQU 0x00000004
- GPIO_MODER_MODER2_0 EQU 0x00000010
- GPIO_MODER_MODER3_0 EQU 0x00000040
- GPIO_MODER_MODER4_0 EQU 0x00000100
- GPIO_MODER_MODER5_0 EQU 0x00000400
- GPIO_MODER_MODER6_0 EQU 0x00001000
- GPIO_MODER_MODER7_0 EQU 0x00004000
- GPIO_MODER_MODER8_0 EQU 0x00010000
- GPIO_MODER_MODER9_0 EQU 0x00040000
- GPIO_MODER_MODER10_0 EQU 0x00100000
- GPIO_MODER_MODER11_0 EQU 0x00400000
- GPIO_MODER_MODER12_0 EQU 0x01000000
- GPIO_MODER_MODER13_0 EQU 0x04000000
- GPIO_MODER_MODER14_0 EQU 0x10000000
- GPIO_MODER_MODER15_0 EQU 0x40000000
- ; GPIOx->MODER
- ; Режим: альтернативная функция
- GPIO_MODER_MODER0_1 EQU 0x00000002
- GPIO_MODER_MODER1_1 EQU 0x00000008
- GPIO_MODER_MODER2_1 EQU 0x00000020
- GPIO_MODER_MODER3_1 EQU 0x00000080
- GPIO_MODER_MODER4_1 EQU 0x00000200
- GPIO_MODER_MODER5_1 EQU 0x00000800
- GPIO_MODER_MODER6_1 EQU 0x00002000
- GPIO_MODER_MODER7_1 EQU 0x00008000
- GPIO_MODER_MODER8_1 EQU 0x00020000
- GPIO_MODER_MODER9_1 EQU 0x00080000
- GPIO_MODER_MODER10_1 EQU 0x00200000
- GPIO_MODER_MODER11_1 EQU 0x00800000
- GPIO_MODER_MODER12_1 EQU 0x02000000
- GPIO_MODER_MODER13_1 EQU 0x08000000
- GPIO_MODER_MODER14_1 EQU 0x20000000
- GPIO_MODER_MODER15_1 EQU 0x80000000
- ; GPIOx->PUPDR
- ; Режим: подтяжка к питанию (pull-up)
- GPIO_PUPDR_PUPDR0_0 EQU 0x00000001
- GPIO_PUPDR_PUPDR1_0 EQU 0x00000004
- GPIO_PUPDR_PUPDR2_0 EQU 0x00000010
- GPIO_PUPDR_PUPDR3_0 EQU 0x00000040
- GPIO_PUPDR_PUPDR4_0 EQU 0x00000100
- GPIO_PUPDR_PUPDR5_0 EQU 0x00000400
- GPIO_PUPDR_PUPDR6_0 EQU 0x00001000
- GPIO_PUPDR_PUPDR7_0 EQU 0x00004000
- GPIO_PUPDR_PUPDR8_0 EQU 0x00010000
- GPIO_PUPDR_PUPDR9_0 EQU 0x00040000
- GPIO_PUPDR_PUPDR10_0 EQU 0x00100000
- GPIO_PUPDR_PUPDR11_0 EQU 0x00400000
- GPIO_PUPDR_PUPDR12_0 EQU 0x01000000
- GPIO_PUPDR_PUPDR13_0 EQU 0x04000000
- GPIO_PUPDR_PUPDR14_0 EQU 0x10000000
- GPIO_PUPDR_PUPDR15_0 EQU 0x40000000
- ; GPIOx->PUPDR
- ; Режим: подтяжка к земле (pull-down)
- GPIO_PUPDR_PUPDR0_1 EQU 0x00000002
- GPIO_PUPDR_PUPDR1_1 EQU 0x00000008
- GPIO_PUPDR_PUPDR2_1 EQU 0x00000020
- GPIO_PUPDR_PUPDR3_1 EQU 0x00000080
- GPIO_PUPDR_PUPDR4_1 EQU 0x00000200
- GPIO_PUPDR_PUPDR5_1 EQU 0x00000800
- GPIO_PUPDR_PUPDR6_1 EQU 0x00002000
- GPIO_PUPDR_PUPDR7_1 EQU 0x00008000
- GPIO_PUPDR_PUPDR8_1 EQU 0x00020000
- GPIO_PUPDR_PUPDR9_1 EQU 0x00080000
- GPIO_PUPDR_PUPDR10_1 EQU 0x00200000
- GPIO_PUPDR_PUPDR11_1 EQU 0x00800000
- GPIO_PUPDR_PUPDR12_1 EQU 0x02000000
- GPIO_PUPDR_PUPDR13_1 EQU 0x08000000
- GPIO_PUPDR_PUPDR14_1 EQU 0x20000000
- GPIO_PUPDR_PUPDR15_1 EQU 0x80000000
- ; GPIOx->BSSR
- ; Маска выводов
- GPIO_BSSR_PIN0 EQU 0x00000001 ; 0 бит
- GPIO_BSSR_PIN1 EQU 0x00000002 ; 1 бит
- GPIO_BSSR_PIN2 EQU 0x00000004 ; 2 бит
- GPIO_BSSR_PIN3 EQU 0x00000008 ; 3 бит
- GPIO_BSSR_PIN4 EQU 0x00000010 ; 4 бит
- GPIO_BSSR_PIN5 EQU 0x00000020 ; 5 бит
- GPIO_BSSR_PIN6 EQU 0x00000040 ; 6 бит
- GPIO_BSSR_PIN7 EQU 0x00000080 ; 7 бит
- GPIO_BSSR_PIN8 EQU 0x00000100 ; 8 бит
- GPIO_BSSR_PIN9 EQU 0x00000200 ; 9 бит
- GPIO_BSSR_PIN10 EQU 0x00000400 ; 10 бит
- GPIO_BSSR_PIN11 EQU 0x00000800 ; 11 бит
- GPIO_BSSR_PIN12 EQU 0x00001000 ; 12 бит
- GPIO_BSSR_PIN13 EQU 0x00002000 ; 13 бит
- GPIO_BSSR_PIN14 EQU 0x00004000 ; 14 бит
- GPIO_BSSR_PIN15 EQU 0x00008000 ; 15 бит
- ; ======================================================================
- ; SPI
- SPI1_BASE EQU 0x40013000
- ; Регистры
- SPI_CR1_OFFSET EQU 0x00000000 ; SPI->CR1
- SPI_CR2_OFFSET EQU 0x00000004 ; SPI->CR2
- SPI_SR_OFFSET EQU 0x00000008 ; SPI->SR
- SPI_DR_OFFSET EQU 0x0000000C ; SPI->DR
- SPI_CRCPR_OFFSET EQU 0x00000010 ; SPI->CRCPR
- SPI_RXCRCR_OFFSET EQU 0x00000014 ; SPI->RXCRCR
- SPI_TXCRCR_OFFSET EQU 0x00000018 ; SPI->TXCRCR
- SPI_I2SCFGR_OFFSET EQU 0x0000001C ; SPI->I2SCFGR
- SPI_I2SPR_OFFSET EQU 0x00000020 ; SPI->I2SPR
- ; SPI->CR1
- ; Биты настройки
- SPI_CR1_CPHA EQU 0x0001 ; Clock phase
- SPI_CR1_CPOL EQU 0x0002 ; Clock Polarity
- SPI_CR1_MSTR EQU 0x0004 ; Master Selection
- SPI_CR1_BR EQU 0x0038 ; BR[2:0] bits (Baud Rate Control)
- SPI_CR1_BR_0 EQU 0x0008 ; Bit 0
- SPI_CR1_BR_1 EQU 0x0010 ; Bit 1
- SPI_CR1_BR_2 EQU 0x0020 ; Bit 2
- SPI_CR1_SPE EQU 0x0040 ; SPI Enable
- SPI_CR1_LSBFIRST EQU 0x0080 ; Frame Format
- SPI_CR1_SSI EQU 0x0100 ; Internal slave select
- SPI_CR1_SSM EQU 0x0200 ; Software slave management
- SPI_CR1_RXONLY EQU 0x0400 ; Receive only
- SPI_CR1_DFF EQU 0x0800 ; Data Frame Format
- SPI_CR1_CRCNEXT EQU 0x1000 ; Transmit CRC next
- SPI_CR1_CRCEN EQU 0x2000 ; Hardware CRC calculation enable
- SPI_CR1_BIDIOE EQU 0x4000 ; Output enable in bidirectional mode
- SPI_CR1_BIDIMODE EQU 0x8000 ; Bidirectional data mode enable
- ; SPI->SR
- ; Флаги состояния модуля
- SPI_SR_RXNE EQU 0x01 ; Receive buffer Not Empty
- SPI_SR_TXE EQU 0x02 ; Transmit buffer Empty
- SPI_SR_CHSIDE EQU 0x04 ; Channel side
- SPI_SR_UDR EQU 0x08 ; Underrun flag
- SPI_SR_CRCERR EQU 0x10 ; CRC Error flag
- SPI_SR_MODF EQU 0x20 ; Mode fault
- SPI_SR_OVR EQU 0x40 ; Overrun flag
- SPI_SR_BSY EQU 0x80 ; Busy flag
- ; ======================================================================
- ; TIMER1, TIMER2-5, TIMER6-7, TIMER9, TIMER12-14, TIMER8
- ; Базовые адреса таймеров
- TIMER1_BASE EQU 0x40010000 ; Advanced timer
- TIMER2_BASE EQU 0x40000000 ; General purpose timers
- TIMER3_BASE EQU 0x40000400 ; General purpose timers
- TIMER4_BASE EQU 0x40000800 ; General purpose timers
- TIMER5_BASE EQU 0x40000C00 ; General purpose timers
- TIMER6_BASE EQU 0x40001000 ; Basic timers
- TIMER7_BASE EQU 0x40001400 ; Basic timers
- TIMER8_BASE EQU 0x40010400 ; Advanced timer
- TIMER9_BASE EQU 0x40014000
- TIMER10_BASE EQU 0x40014400
- TIMER11_BASE EQU 0x40014800
- TIMER12_BASE EQU 0x40001800
- TIMER13_BASE EQU 0x40001C00
- TIMER14_BASE EQU 0x40002000
- ; Регистры
- TIM_CR1_OFFSET EQU 0x00000000 ; TIM->CR1
- TIM_CR2_OFFSET EQU 0x00000004 ; TIM->CR2
- TIM_DIER_OFFSET EQU 0x0000000C ; TIM->DIER
- TIM_SR_OFFSET EQU 0x00000010 ; TIM->SR
- TIM_EGR_OFFSET EQU 0x00000014 ; TIM->EGR
- TIM_CNT_OFFSET EQU 0x00000024 ; TIM->CNT
- TIM_PSC_OFFSET EQU 0x00000028 ; TIM->PSC
- TIM_ARR_OFFSET EQU 0x0000002C ; TIM->ARR
- ; TIM->CR1
- ; Флаги управления таймером
- TIM_CR1_CEN EQU 0x01 ; Counter enable
- TIM_CR1_UDIS EQU 0x02 ; Update disable
- TIM_CR1_URS EQU 0x04 ; Update request source
- TIM_CR1_OPM EQU 0x08 ; One-pulse mode
- TIM_CR1_ARPE EQU 0x80 ; Auto-reload preload enable
- ; TIM->SR
- ; Флаги состояния таймера
- TIM_SR_UIF EQU 0x01 ; Update interrupt flag
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement