mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
Type and Speed GPIOs
This commit is contained in:
@@ -1,36 +1,29 @@
|
||||
#include <registers/gpio.h>
|
||||
|
||||
#define GPIOA_BASE 0x40020000
|
||||
GPIO_MODER_t * GPIOA_MODER = (void *)(GPIOA_BASE);
|
||||
|
||||
#define GPIOB_BASE 0x40020400
|
||||
GPIO_MODER_t * GPIOB_MODER = (GPIO_MODER_t *)(GPIOB_BASE);
|
||||
|
||||
#define GPIOC_BASE 0x40020800
|
||||
GPIO_MODER_t * GPIOC_MODER = (GPIO_MODER_t *)(GPIOC_BASE);
|
||||
|
||||
#define GPIOD_BASE 0x40020C00
|
||||
GPIO_MODER_t * GPIOD_MODER = (GPIO_MODER_t *)(GPIOD_BASE);
|
||||
|
||||
#define GPIOE_BASE 0x40021000
|
||||
GPIO_MODER_t * GPIOE_MODER = (GPIO_MODER_t *)(GPIOE_BASE);
|
||||
|
||||
#define GPIOF_BASE 0x40021400
|
||||
GPIO_MODER_t * GPIOF_MODER = (GPIO_MODER_t *)(GPIOF_BASE);
|
||||
|
||||
#define GPIOG_BASE 0x40021800
|
||||
GPIO_MODER_t * GPIOG_MODER = (GPIO_MODER_t *)(GPIOG_BASE);
|
||||
|
||||
#define GPIOH_BASE 0x40021C00
|
||||
GPIO_MODER_t * GPIOH_MODER = (GPIO_MODER_t *)(GPIOH_BASE);
|
||||
|
||||
#define GPIOI_BASE 0x40022000
|
||||
GPIO_MODER_t * GPIOI_MODER = (GPIO_MODER_t *)(GPIOI_BASE);
|
||||
|
||||
#define GPIOJ_BASE 0x40022400
|
||||
GPIO_MODER_t * GPIOJ_MODER = (GPIO_MODER_t *)(GPIOJ_BASE);
|
||||
|
||||
#define GPIOK_BASE 0x40022800
|
||||
|
||||
#pragma mark - GPIO port mode registers
|
||||
|
||||
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) {
|
||||
@@ -49,3 +42,66 @@ GPIO_MODER_t * GPIO_MODER(GPIO_t gpio) {
|
||||
};
|
||||
return gpioModeRegisters[gpio];
|
||||
}
|
||||
|
||||
#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];
|
||||
}
|
||||
|
||||
#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];
|
||||
}
|
||||
|
||||
|
||||
@@ -1,29 +1,3 @@
|
||||
typedef enum {
|
||||
GPIO_MODE_INPUT = 0,
|
||||
GPIO_MODE_OUTPUT = 1,
|
||||
GPIO_MODE_ALTERNATE_FUNCTION = 2,
|
||||
GPIO_MODE_ANALOG = 3
|
||||
} GPIO_MODE_t;
|
||||
|
||||
typedef struct {
|
||||
GPIO_MODE_t MODER0:2;
|
||||
unsigned int MODER1:2;
|
||||
unsigned int MODER2:2;
|
||||
unsigned int MODER3:2;
|
||||
unsigned int MODER4:2;
|
||||
unsigned int MODER5:2;
|
||||
unsigned int MODER6:2;
|
||||
unsigned int MODER7:2;
|
||||
unsigned int MODER8:2;
|
||||
unsigned int MODER9:2;
|
||||
unsigned int MODER10:2;
|
||||
unsigned int MODER11:2;
|
||||
unsigned int MODER12:2;
|
||||
unsigned int MODER13:2;
|
||||
unsigned int MODER14:2;
|
||||
unsigned int MODER15:2;
|
||||
} GPIO_MODER_t;
|
||||
|
||||
typedef enum {
|
||||
GPIOA = 0,
|
||||
GPIOB = 1,
|
||||
@@ -38,7 +12,33 @@ typedef enum {
|
||||
GPIOK = 10
|
||||
} GPIO_t;
|
||||
|
||||
GPIO_MODER_t * GPIO_MODER(GPIO_t gpio);
|
||||
#pragma mark - GPIO port mode registers
|
||||
|
||||
typedef enum {
|
||||
GPIO_MODE_INPUT = 0,
|
||||
GPIO_MODE_OUTPUT = 1,
|
||||
GPIO_MODE_ALTERNATE_FUNCTION = 2,
|
||||
GPIO_MODE_ANALOG = 3
|
||||
} GPIO_MODE_t;
|
||||
|
||||
typedef struct {
|
||||
GPIO_MODE_t MODER0:2;
|
||||
GPIO_MODE_t MODER1:2;
|
||||
GPIO_MODE_t MODER2:2;
|
||||
GPIO_MODE_t MODER3:2;
|
||||
GPIO_MODE_t MODER4:2;
|
||||
GPIO_MODE_t MODER5:2;
|
||||
GPIO_MODE_t MODER6:2;
|
||||
GPIO_MODE_t MODER7:2;
|
||||
GPIO_MODE_t MODER8:2;
|
||||
GPIO_MODE_t MODER9:2;
|
||||
GPIO_MODE_t MODER10:2;
|
||||
GPIO_MODE_t MODER11:2;
|
||||
GPIO_MODE_t MODER12:2;
|
||||
GPIO_MODE_t MODER13:2;
|
||||
GPIO_MODE_t MODER14:2;
|
||||
GPIO_MODE_t MODER15:2;
|
||||
} GPIO_MODER_t;
|
||||
|
||||
extern GPIO_MODER_t * GPIOA_MODER;
|
||||
extern GPIO_MODER_t * GPIOB_MODER;
|
||||
@@ -51,3 +51,88 @@ 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
|
||||
|
||||
typedef enum {
|
||||
GPIO_OTYPE_PUSH_PULL = 0,
|
||||
GPIO_OTYPE_OPEN_DRAIN = 1
|
||||
} GPIO_OTYPE_t;
|
||||
|
||||
typedef struct {
|
||||
GPIO_OTYPE_t OT0:1;
|
||||
GPIO_OTYPE_t OT1:1;
|
||||
GPIO_OTYPE_t OT2:1;
|
||||
GPIO_OTYPE_t OT3:1;
|
||||
GPIO_OTYPE_t OT4:1;
|
||||
GPIO_OTYPE_t OT5:1;
|
||||
GPIO_OTYPE_t OT6:1;
|
||||
GPIO_OTYPE_t OT7:1;
|
||||
GPIO_OTYPE_t OT8:1;
|
||||
GPIO_OTYPE_t OT9:1;
|
||||
GPIO_OTYPE_t OT10:1;
|
||||
GPIO_OTYPE_t OT11:1;
|
||||
GPIO_OTYPE_t OT12:1;
|
||||
GPIO_OTYPE_t OT13:1;
|
||||
GPIO_OTYPE_t OT14:1;
|
||||
GPIO_OTYPE_t OT15:1;
|
||||
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);
|
||||
|
||||
#pragma mark - GPIO port output speed registers
|
||||
|
||||
typedef enum {
|
||||
GPIO_OSPEED_LOW_SPEED = 0,
|
||||
GPIO_OSPEED_MEDIUM_SPEED = 1,
|
||||
GPIO_OSPEED_FAST_SPEED = 2,
|
||||
GPIO_OSPEED_HIGH_SPEED = 3
|
||||
} GPIO_OSPEED_t;
|
||||
|
||||
typedef struct {
|
||||
GPIO_OSPEED_t OSPEEDR0:2;
|
||||
GPIO_OSPEED_t OSPEEDR1:2;
|
||||
GPIO_OSPEED_t OSPEEDR2:2;
|
||||
GPIO_OSPEED_t OSPEEDR3:2;
|
||||
GPIO_OSPEED_t OSPEEDR4:2;
|
||||
GPIO_OSPEED_t OSPEEDR5:2;
|
||||
GPIO_OSPEED_t OSPEEDR6:2;
|
||||
GPIO_OSPEED_t OSPEEDR7:2;
|
||||
GPIO_OSPEED_t OSPEEDR8:2;
|
||||
GPIO_OSPEED_t OSPEEDR9:2;
|
||||
GPIO_OSPEED_t OSPEEDR10:2;
|
||||
GPIO_OSPEED_t OSPEEDR11:2;
|
||||
GPIO_OSPEED_t OSPEEDR12:2;
|
||||
GPIO_OSPEED_t OSPEEDR13:2;
|
||||
GPIO_OSPEED_t OSPEEDR14:2;
|
||||
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_OSPEED(GPIO_t gpio);
|
||||
|
||||
Reference in New Issue
Block a user