From de75ffc1361a4654f86e4cfc0d6d81c53dfe003d Mon Sep 17 00:00:00 2001 From: Romain Goyet Date: Sun, 3 May 2015 13:06:38 +0200 Subject: [PATCH] GPIO registers done! --- arch/stm32f429/registers/gpio.c | 14 ++++++ arch/stm32f429/registers/gpio.h | 80 +++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) diff --git a/arch/stm32f429/registers/gpio.c b/arch/stm32f429/registers/gpio.c index 9540f91d8..c559fc5ff 100644 --- a/arch/stm32f429/registers/gpio.c +++ b/arch/stm32f429/registers/gpio.c @@ -19,6 +19,9 @@ #define GPIO_IDR_OFFSET 0x10 #define GPIO_ODR_OFFSET 0x14 #define GPIO_BSRR_OFFSET 0x18 +#define GPIO_LCKR_OFFSET 0x1C +#define GPIO_AFRL_OFFSET 0x20 +#define GPIO_AFRH_OFFSET 0x24 char * GPIO_REGISTER_ADDRESS(GPIO_t gpio, int registerOffset) { char * gpioBaseAddress[11] = { @@ -58,3 +61,14 @@ GPIO_BSRR_t * GPIO_BSRR(GPIO_t gpio) { return (GPIO_BSRR_t *)GPIO_REGISTER_ADDRESS(gpio, GPIO_BSRR_OFFSET); } +GPIO_LCKR_t * GPIO_LCKR(GPIO_t gpio) { + return (GPIO_LCKR_t *)GPIO_REGISTER_ADDRESS(gpio, GPIO_LCKR_OFFSET); +} + +GPIO_AFRL_t * GPIO_AFRL(GPIO_t gpio) { + return (GPIO_AFRL_t *)GPIO_REGISTER_ADDRESS(gpio, GPIO_AFRL_OFFSET); +} + +GPIO_AFRH_t * GPIO_AFRH(GPIO_t gpio) { + return (GPIO_AFRH_t *)GPIO_REGISTER_ADDRESS(gpio, GPIO_AFRH_OFFSET); +} diff --git a/arch/stm32f429/registers/gpio.h b/arch/stm32f429/registers/gpio.h index 41227aa62..8bdf9ce80 100644 --- a/arch/stm32f429/registers/gpio.h +++ b/arch/stm32f429/registers/gpio.h @@ -216,3 +216,83 @@ typedef struct { } GPIO_BSRR_t; GPIO_BSRR_t * GPIO_BSRR(GPIO_t gpio); + +#pragma mark - GPIO port configuration lock registers + +typedef enum { + GPIO_LCK_UNLOCKED = 0, + GPIO_LCK_LOCKED = 1 +} GPIO_LCK_t; + +typedef enum { + GPIO_LCK_KEY_INACTIVE = 0, + GPIO_LCK_KEY_ACTIVE = 1 +} GPIO_LCK_KEY_t; + +typedef struct { + GPIO_LCK_t LCK0:1; + GPIO_LCK_t LCK1:1; + GPIO_LCK_t LCK2:1; + GPIO_LCK_t LCK3:1; + GPIO_LCK_t LCK4:1; + GPIO_LCK_t LCK5:1; + GPIO_LCK_t LCK6:1; + GPIO_LCK_t LCK7:1; + GPIO_LCK_t LCK8:1; + GPIO_LCK_t LCK9:1; + GPIO_LCK_t LCK10:1; + GPIO_LCK_t LCK11:1; + GPIO_LCK_t LCK12:1; + GPIO_LCK_t LCK13:1; + GPIO_LCK_t LCK14:1; + GPIO_LCK_t LCK15:1; + GPIO_LCK_KEY_t LCKK:1; +} GPIO_LCKR_t; + +GPIO_LCKR_t * GPIO_LCKR(GPIO_t gpio); + +#pragma mark - GPIO port alternate function registers + +typedef enum { + GPIO_AF_AF0 = 0, + GPIO_AF_AF1 = 1, + GPIO_AF_AF2 = 2, + GPIO_AF_AF3 = 3, + GPIO_AF_AF4 = 4, + GPIO_AF_AF5 = 5, + GPIO_AF_AF6 = 6, + GPIO_AF_AF7 = 7, + GPIO_AF_AF8 = 8, + GPIO_AF_AF9 = 9, + GPIO_AF_AF10 = 10, + GPIO_AF_AF11 = 11, + GPIO_AF_AF12 = 12, + GPIO_AF_AF13 = 13, + GPIO_AF_AF14 = 14, + GPIO_AF_AF15 = 15 +} GPIO_AF_t; + +typedef struct { + GPIO_AF_t AFRL0:4; + GPIO_AF_t AFRL1:4; + GPIO_AF_t AFRL2:4; + GPIO_AF_t AFRL3:4; + GPIO_AF_t AFRL4:4; + GPIO_AF_t AFRL5:4; + GPIO_AF_t AFRL6:4; + GPIO_AF_t AFRL7:4; +} GPIO_AFRL_t; + +typedef struct { + GPIO_AF_t AFRH0:4; + GPIO_AF_t AFRH1:4; + GPIO_AF_t AFRH2:4; + GPIO_AF_t AFRH3:4; + GPIO_AF_t AFRH4:4; + GPIO_AF_t AFRH5:4; + GPIO_AF_t AFRH6:4; + GPIO_AF_t AFRH7:4; +} GPIO_AFRH_t; + +GPIO_AFRL_t * GPIO_AFRL(GPIO_t gpio); +GPIO_AFRH_t * GPIO_AFRH(GPIO_t gpio);