@GNU AS
@.CharSet=CP1251 (Cyrillic)
@.desc type=module
@ +------------------------------------------------------------------+
@ |                         Константы GPIO                           |
@ |               для STM32F401xB/C и STM32F401xD/E                  |
@ +------------------------------------------------------------------+
@.enddesc

.include "/src/inc/base.inc"

@ константы GPIO
@.item AHB1PERIPH_BASE
.equ GPIO                  , AHB1PERIPH_BASE + 0x0000 @ GPIO Controls Registers
@.END

@ регистры gpio для использования в том числе в bit band
@.item GPIO
.equ GPIOA_BASE                    , AHB1PERIPH_BASE + 0x0000
.equ GPIOB_BASE                    , AHB1PERIPH_BASE + 0x0400
.equ GPIOC_BASE                    , AHB1PERIPH_BASE + 0x0800
.equ GPIOD_BASE                    , AHB1PERIPH_BASE + 0x0C00
.equ GPIOE_BASE                    , AHB1PERIPH_BASE + 0x1000
.equ GPIOH_BASE                    , AHB1PERIPH_BASE + 0x1C00
.equ GPIOA                         , PERIPH_BASE + GPIOA_BASE
.equ GPIOB                         , PERIPH_BASE + GPIOB_BASE
.equ GPIOC                         , PERIPH_BASE + GPIOC_BASE
.equ GPIOD                         , PERIPH_BASE + GPIOD_BASE
.equ GPIOE                         , PERIPH_BASE + GPIOE_BASE
.equ GPIOH                         , PERIPH_BASE + GPIOH_BASE
@.END

@.item GPIOA GPIOB GPIOC GPIOD GPIOE GPIOH GPIOA_BASE GPIOB_BASE GPIOC_BASE GPIOD_BASE GPIOE_BASE GPIOH_BASE
.equ GPIO_MODER                    , 0x00 @ GPIO port mode register
.equ GPIO_OTYPER                   , 0x04 @ GPIO port output type register
.equ GPIO_OSPEEDR                  , 0x08 @ GPIO port output speed register
.equ GPIO_PUPDR                    , 0x0C @ GPIO port pull-up/pull-down register
.equ GPIO_IDR                      , 0x10 @ GPIO port input data register
.equ GPIO_ODR                      , 0x14 @ GPIO port output data register
.equ GPIO_BSRR                     , 0x18 @ GPIO port bit set/reset register
.equ GPIO_LCKR                     , 0x1C @ GPIO port configuration lock register
.equ GPIO_AFRL                     , 0x20 @ GPIO alternate function low register
.equ GPIO_AFRH                     , 0x24 @ GPIO alternate function high register
@.END

@ Описание битов настройки
@.item GPIO_MODER
.EQU  GPIOA_MODER_RST_VAL, 0xA8000000    @ Port A reset value
.EQU  GPIOB_MODER_RST_VAL, 0x00000280    @ Port B reset value
.EQU  GPIO_MODER0_N      , 0
.EQU  GPIO_MODER1_N      , 2
.EQU  GPIO_MODER2_N      , 4
.EQU  GPIO_MODER3_N      , 6
.EQU  GPIO_MODER4_N      , 8
.EQU  GPIO_MODER5_N      , 10
.EQU  GPIO_MODER6_N      , 12
.EQU  GPIO_MODER7_N      , 14
.EQU  GPIO_MODER8_N      , 16
.EQU  GPIO_MODER9_N      , 18
.EQU  GPIO_MODER10_N     , 20
.EQU  GPIO_MODER11_N     , 22
.EQU  GPIO_MODER12_N     , 24
.EQU  GPIO_MODER13_N     , 26
.EQU  GPIO_MODER14_N     , 28
.EQU  GPIO_MODER15_N     , 30
.equ GPIO_MODER_INPUT              , 0x00 @ Вход
.equ GPIO_MODER_GENERAL_OUT        , 0x01 @ Выход
.equ GPIO_MODER_ALT_MODE           , 0x02 @ Альтернативные функции
.equ GPIO_MODER_ANALOG             , 0x03 @ Аналоговый ввод/вывод
@.END

@ Описание битов настройки
@.item GPIO_OTYPER
.equ GPIO_OTYPER_PP                , 0x00 @ Push-Pull
.equ GPIO_OTYPER_OD                , 0x01 @ Open Drain
@.END

@ Описание битов настройки
@.item GPIO_OSPEEDR
.EQU  GPIO_OSPEEDR0_N    , 0
.EQU  GPIO_OSPEEDR1_N    , 2
.EQU  GPIO_OSPEEDR2_N    , 4
.EQU  GPIO_OSPEEDR3_N    , 6
.EQU  GPIO_OSPEEDR4_N    , 8
.EQU  GPIO_OSPEEDR5_N    , 10
.EQU  GPIO_OSPEEDR6_N    , 12
.EQU  GPIO_OSPEEDR7_N    , 14
.EQU  GPIO_OSPEEDR8_N    , 16
.EQU  GPIO_OSPEEDR9_N    , 18
.EQU  GPIO_OSPEEDR10_N   , 20
.EQU  GPIO_OSPEEDR11_N   , 22
.EQU  GPIO_OSPEEDR12_N   , 24
.EQU  GPIO_OSPEEDR13_N   , 26
.EQU  GPIO_OSPEEDR14_N   , 28
.EQU  GPIO_OSPEEDR15_N   , 30
.equ GPIO_OSPEEDR_LOW_SPEED        , 0x00 @ LOW SPEED
.equ GPIO_OSPEEDR_MEDIUM_SPEED     , 0x01 @ MEDIUM SPEED
.equ GPIO_OSPEEDR_HIGH_SPEED       , 0x02 @ HIGH SPEED
.equ GPIO_OSPEEDR_VERY_HIGH_SPEED  , 0x03 @ VERY HIGH SPEED
@.END

@ Описание битов настройки
@.item GPIO_PUPDR
.EQU  GPIOA_PUPDR0_RST_VAL  , 0x64000000
.EQU  GPIOB_PUPDR0_RST_VAL  , 0x00000100
.EQU  GPIO_PUPDR0_N    , 0
.EQU  GPIO_PUPDR1_N    , 2
.EQU  GPIO_PUPDR2_N    , 4
.EQU  GPIO_PUPDR3_N    , 6
.EQU  GPIO_PUPDR4_N    , 8
.EQU  GPIO_PUPDR5_N    , 10
.EQU  GPIO_PUPDR6_N    , 12
.EQU  GPIO_PUPDR7_N    , 14
.EQU  GPIO_PUPDR8_N    , 16
.EQU  GPIO_PUPDR9_N    , 18
.EQU  GPIO_PUPDR10_N   , 20
.EQU  GPIO_PUPDR11_N   , 22
.EQU  GPIO_PUPDR12_N   , 24
.EQU  GPIO_PUPDR13_N   , 26
.EQU  GPIO_PUPDR14_N   , 28
.EQU  GPIO_PUPDR15_N   , 30
.equ GPIO_PUPDR_NPU_NPD            , 0x00 @ Нет подтяжки
.equ GPIO_PUPDR_PU                 , 0x01 @ Подтяжка к питанию
.equ GPIO_PUPDR_PD                 , 0x02 @ Подтяжка к земле
.equ GPIO_PUPDR_RESERVED           , 0x03
@.END

@ Описание битов настройки
@.item GPIO_AFRH GPIO_AFRL
.equ GPIO_AFR_0                    , 0x00  @ SYS
.equ GPIO_AFR_1                    , 0x01  @ TIM1T2
.equ GPIO_AFR_2                    , 0x02  @ TIM3T5
.equ GPIO_AFR_3                    , 0x03  @ TIM9T11
.equ GPIO_AFR_4                    , 0x04  @ I2C1T3
.equ GPIO_AFR_5                    , 0x05  @ SPI1T4_I2S2A3
.equ GPIO_AFR_6                    , 0x06  @ SPI2A3_I2S2A3
.equ GPIO_AFR_7                    , 0x07  @ SPI3_USART1A2_I2S3
.equ GPIO_AFR_8                    , 0x08  @ USART6
.equ GPIO_AFR_9                    , 0x09  @ I2C2_I2C3
.equ GPIO_AFR_A                    , 0x0A  @ OTG_FS
.equ GPIO_AFR_B                    , 0x0B
.equ GPIO_AFR_C                    , 0x0C  @ SDIO
.equ GPIO_AFR_D                    , 0x0D
.equ GPIO_AFR_E                    , 0x0E
.equ GPIO_AFR_F                    , 0x0F  @ EVENTOUT
@.END
