Clean register definitions

This commit is contained in:
Romain Goyet
2015-05-03 12:29:28 +02:00
parent 4e1da07e06
commit d39fe7f444
2 changed files with 81 additions and 119 deletions

View File

@@ -12,96 +12,40 @@
#define GPIOJ_BASE 0x40022400
#define GPIOK_BASE 0x40022800
#pragma mark - GPIO port mode registers
#define GPIO_MODER_OFFSET 0x00
#define GPIO_OTYPER_OFFSET 0x04
#define GPIO_OSPEEDR_OFFSET 0x08
#define GPIO_PUPDR_OFFSET 0x0C
#define GPIO_IDR_OFFSET 0x10
char * GPIO_REGISTER_ADDRESS(GPIO_t gpio, int registerOffset) {
char * gpioBaseAddress[11] = {
(char *)GPIOA_BASE, (char *)GPIOB_BASE, (char *)GPIOC_BASE,
(char *)GPIOD_BASE, (char *)GPIOE_BASE, (char *)GPIOF_BASE,
(char *)GPIOG_BASE, (char *)GPIOH_BASE, (char *)GPIOI_BASE,
(char *)GPIOJ_BASE, (char *)GPIOK_BASE
};
return gpioBaseAddress[gpio] + registerOffset;
}
GPIO_MODER_t * GPIOA_MODER = (GPIO_MODER_t *)(GPIOA_BASE);
GPIO_MODER_t * GPIOB_MODER = (GPIO_MODER_t *)(GPIOB_BASE);
GPIO_MODER_t * GPIOC_MODER = (GPIO_MODER_t *)(GPIOC_BASE);
GPIO_MODER_t * GPIOD_MODER = (GPIO_MODER_t *)(GPIOD_BASE);
GPIO_MODER_t * GPIOE_MODER = (GPIO_MODER_t *)(GPIOE_BASE);
GPIO_MODER_t * GPIOF_MODER = (GPIO_MODER_t *)(GPIOF_BASE);
GPIO_MODER_t * GPIOG_MODER = (GPIO_MODER_t *)(GPIOG_BASE);
GPIO_MODER_t * GPIOH_MODER = (GPIO_MODER_t *)(GPIOH_BASE);
GPIO_MODER_t * GPIOI_MODER = (GPIO_MODER_t *)(GPIOI_BASE);
GPIO_MODER_t * GPIOJ_MODER = (GPIO_MODER_t *)(GPIOJ_BASE);
GPIO_MODER_t * GPIOK_MODER = (GPIO_MODER_t *)(GPIOK_BASE);
GPIO_MODER_t * GPIO_MODER(GPIO_t gpio) {
GPIO_MODER_t * gpioModeRegisters[11] = {
GPIOA_MODER,
GPIOB_MODER,
GPIOC_MODER,
GPIOD_MODER,
GPIOE_MODER,
GPIOF_MODER,
GPIOG_MODER,
GPIOH_MODER,
GPIOI_MODER,
GPIOJ_MODER,
GPIOK_MODER
};
return gpioModeRegisters[gpio];
return (GPIO_MODER_t *)GPIO_REGISTER_ADDRESS(gpio, GPIO_MODER_OFFSET);
}
#pragma mark - GPIO port output type registers
GPIO_OTYPER_t * GPIOA_OTYPER = (GPIO_OTYPER_t *)(GPIOA_BASE + 0x4);
GPIO_OTYPER_t * GPIOB_OTYPER = (GPIO_OTYPER_t *)(GPIOB_BASE + 0x4);
GPIO_OTYPER_t * GPIOC_OTYPER = (GPIO_OTYPER_t *)(GPIOC_BASE + 0x4);
GPIO_OTYPER_t * GPIOD_OTYPER = (GPIO_OTYPER_t *)(GPIOD_BASE + 0x4);
GPIO_OTYPER_t * GPIOE_OTYPER = (GPIO_OTYPER_t *)(GPIOE_BASE + 0x4);
GPIO_OTYPER_t * GPIOF_OTYPER = (GPIO_OTYPER_t *)(GPIOF_BASE + 0x4);
GPIO_OTYPER_t * GPIOG_OTYPER = (GPIO_OTYPER_t *)(GPIOG_BASE + 0x4);
GPIO_OTYPER_t * GPIOH_OTYPER = (GPIO_OTYPER_t *)(GPIOH_BASE + 0x4);
GPIO_OTYPER_t * GPIOI_OTYPER = (GPIO_OTYPER_t *)(GPIOI_BASE + 0x4);
GPIO_OTYPER_t * GPIOJ_OTYPER = (GPIO_OTYPER_t *)(GPIOJ_BASE + 0x4);
GPIO_OTYPER_t * GPIOK_OTYPER = (GPIO_OTYPER_t *)(GPIOK_BASE + 0x4);
GPIO_OTYPER_t * GPIO_OTYPER(GPIO_t gpio) {
GPIO_OTYPER_t * gpioOutputTypeRegisters[11] = {
GPIOA_OTYPER,
GPIOB_OTYPER,
GPIOC_OTYPER,
GPIOD_OTYPER,
GPIOE_OTYPER,
GPIOF_OTYPER,
GPIOG_OTYPER,
GPIOH_OTYPER,
GPIOI_OTYPER,
GPIOJ_OTYPER,
GPIOK_OTYPER
};
return gpioOutputTypeRegisters[gpio];
return (GPIO_OTYPER_t *)GPIO_REGISTER_ADDRESS(gpio, GPIO_OTYPER_OFFSET);
}
#pragma mark - GPIO port output speed registers
GPIO_OSPEEDR_t * GPIOA_OSPEEDR = (GPIO_OSPEEDR_t *)(GPIOA_BASE + 0x8);
GPIO_OSPEEDR_t * GPIOB_OSPEEDR = (GPIO_OSPEEDR_t *)(GPIOB_BASE + 0x8);
GPIO_OSPEEDR_t * GPIOC_OSPEEDR = (GPIO_OSPEEDR_t *)(GPIOC_BASE + 0x8);
GPIO_OSPEEDR_t * GPIOD_OSPEEDR = (GPIO_OSPEEDR_t *)(GPIOD_BASE + 0x8);
GPIO_OSPEEDR_t * GPIOE_OSPEEDR = (GPIO_OSPEEDR_t *)(GPIOE_BASE + 0x8);
GPIO_OSPEEDR_t * GPIOF_OSPEEDR = (GPIO_OSPEEDR_t *)(GPIOF_BASE + 0x8);
GPIO_OSPEEDR_t * GPIOG_OSPEEDR = (GPIO_OSPEEDR_t *)(GPIOG_BASE + 0x8);
GPIO_OSPEEDR_t * GPIOH_OSPEEDR = (GPIO_OSPEEDR_t *)(GPIOH_BASE + 0x8);
GPIO_OSPEEDR_t * GPIOI_OSPEEDR = (GPIO_OSPEEDR_t *)(GPIOI_BASE + 0x8);
GPIO_OSPEEDR_t * GPIOJ_OSPEEDR = (GPIO_OSPEEDR_t *)(GPIOJ_BASE + 0x8);
GPIO_OSPEEDR_t * GPIOK_OSPEEDR = (GPIO_OSPEEDR_t *)(GPIOK_BASE + 0x8);
GPIO_OSPEEDR_t * GPIO_OSPEEDR(GPIO_t gpio) {
GPIO_OSPEEDR_t * gpioOutputSpeedRegisters[11] = {
GPIOA_OSPEEDR,
GPIOB_OSPEEDR,
GPIOC_OSPEEDR,
GPIOD_OSPEEDR,
GPIOE_OSPEEDR,
GPIOF_OSPEEDR,
GPIOG_OSPEEDR,
GPIOH_OSPEEDR,
GPIOI_OSPEEDR,
GPIOJ_OSPEEDR,
GPIOK_OSPEEDR
};
return gpioOutputSpeedRegisters[gpio];
return (GPIO_OSPEEDR_t *)GPIO_REGISTER_ADDRESS(gpio, GPIO_OSPEEDR_OFFSET);
}
GPIO_PUPDR_t * GPIO_PUPDR(GPIO_t gpio) {
return (GPIO_PUPDR_t *)GPIO_REGISTER_ADDRESS(gpio, GPIO_PUPDR_OFFSET);
}
GPIO_IDR_t * GPIO_IDR(GPIO_t gpio) {
return (GPIO_IDR_t *)GPIO_REGISTER_ADDRESS(gpio, GPIO_IDR_OFFSET);
}

View File

@@ -40,18 +40,6 @@ typedef struct {
GPIO_MODE_t MODER15:2;
} GPIO_MODER_t;
extern GPIO_MODER_t * GPIOA_MODER;
extern GPIO_MODER_t * GPIOB_MODER;
extern GPIO_MODER_t * GPIOC_MODER;
extern GPIO_MODER_t * GPIOD_MODER;
extern GPIO_MODER_t * GPIOE_MODER;
extern GPIO_MODER_t * GPIOF_MODER;
extern GPIO_MODER_t * GPIOG_MODER;
extern GPIO_MODER_t * GPIOH_MODER;
extern GPIO_MODER_t * GPIOI_MODER;
extern GPIO_MODER_t * GPIOJ_MODER;
extern GPIO_MODER_t * GPIOK_MODER;
GPIO_MODER_t * GPIO_MODER(GPIO_t gpio);
#pragma mark - GPIO port output type registers
@@ -81,19 +69,7 @@ typedef struct {
unsigned int :16;
} GPIO_OTYPER_t;
extern GPIO_OTYPER_t * GPIOA_OTYPER;
extern GPIO_OTYPER_t * GPIOB_OTYPER;
extern GPIO_OTYPER_t * GPIOC_OTYPER;
extern GPIO_OTYPER_t * GPIOD_OTYPER;
extern GPIO_OTYPER_t * GPIOE_OTYPER;
extern GPIO_OTYPER_t * GPIOF_OTYPER;
extern GPIO_OTYPER_t * GPIOG_OTYPER;
extern GPIO_OTYPER_t * GPIOH_OTYPER;
extern GPIO_OTYPER_t * GPIOI_OTYPER;
extern GPIO_OTYPER_t * GPIOJ_OTYPER;
extern GPIO_OTYPER_t * GPIOK_OTYPER;
GPIO_OTYPER_t * GPIO_OTYPE(GPIO_t gpio);
GPIO_OTYPER_t * GPIO_OTYPER(GPIO_t gpio);
#pragma mark - GPIO port output speed registers
@@ -123,16 +99,58 @@ typedef struct {
GPIO_OSPEED_t OSPEEDR15:2;
} GPIO_OSPEEDR_t;
extern GPIO_OSPEEDR_t * GPIOA_OSPEEDR;
extern GPIO_OSPEEDR_t * GPIOB_OSPEEDR;
extern GPIO_OSPEEDR_t * GPIOC_OSPEEDR;
extern GPIO_OSPEEDR_t * GPIOD_OSPEEDR;
extern GPIO_OSPEEDR_t * GPIOE_OSPEEDR;
extern GPIO_OSPEEDR_t * GPIOF_OSPEEDR;
extern GPIO_OSPEEDR_t * GPIOG_OSPEEDR;
extern GPIO_OSPEEDR_t * GPIOH_OSPEEDR;
extern GPIO_OSPEEDR_t * GPIOI_OSPEEDR;
extern GPIO_OSPEEDR_t * GPIOJ_OSPEEDR;
extern GPIO_OSPEEDR_t * GPIOK_OSPEEDR;
GPIO_OSPEEDR_t * GPIO_OSPEEDR(GPIO_t gpio);
#pragma mark - GPIO port pull-up/pull-down registers
typedef enum {
GPIO_PUPD_NONE = 0,
GPIO_PUPD_PULL_UP = 1,
GPIO_PUPD_PULL_DOWN = 2
} GPIO_PUPD_t;
typedef struct {
GPIO_PUPD_t PUPDR0:2;
GPIO_PUPD_t PUPDR1:2;
GPIO_PUPD_t PUPDR2:2;
GPIO_PUPD_t PUPDR3:2;
GPIO_PUPD_t PUPDR4:2;
GPIO_PUPD_t PUPDR5:2;
GPIO_PUPD_t PUPDR6:2;
GPIO_PUPD_t PUPDR7:2;
GPIO_PUPD_t PUPDR8:2;
GPIO_PUPD_t PUPDR9:2;
GPIO_PUPD_t PUPDR10:2;
GPIO_PUPD_t PUPDR11:2;
GPIO_PUPD_t PUPDR12:2;
GPIO_PUPD_t PUPDR13:2;
GPIO_PUPD_t PUPDR14:2;
GPIO_PUPD_t PUPDR15:2;
} GPIO_PUPDR_t;
GPIO_PUPDR_t * GPIO_PUPDR(GPIO_t gpio);
#pragma mark - GPIO input data registers
typedef struct {
unsigned int IDR0:1;
unsigned int IDR1:1;
unsigned int IDR2:1;
unsigned int IDR3:1;
unsigned int IDR4:1;
unsigned int IDR5:1;
unsigned int IDR6:1;
unsigned int IDR7:1;
unsigned int IDR8:1;
unsigned int IDR9:1;
unsigned int IDR10:1;
unsigned int IDR11:1;
unsigned int IDR12:1;
unsigned int IDR13:1;
unsigned int IDR14:1;
unsigned int IDR15:1;
unsigned int :16;
} GPIO_IDR_t;
GPIO_IDR_t * GPIO_IDR(GPIO_t gpio);
GPIO_OSPEEDR_t * GPIO_OSPEED(GPIO_t gpio);