Continuing the pin.c implmentation than asap UART

interrupts
key 4 years ago
parent 7e49cf6a33
commit 47a05d0b5a

@ -13,34 +13,35 @@ extern "C" {
#include "../stm32f042/Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f042x6.h" #include "../stm32f042/Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f042x6.h"
typedef enum typedef enum
{ {
pinA0 = GPIOA_BASE | 0, // NAME = BASE ADDR | PORT | PIN NO
pinA1 = GPIOA_BASE | 1, pinA0 = GPIOA_BASE | 0x00 | 0,
pinA2 = GPIOA_BASE | 2, pinA1 = GPIOA_BASE | 0x00 | 1,
pinA3 = GPIOA_BASE | 3, pinA2 = GPIOA_BASE | 0x00 | 2,
pinA4 = GPIOA_BASE | 4, pinA3 = GPIOA_BASE | 0x00 | 3,
pinA5 = GPIOA_BASE | 5, pinA4 = GPIOA_BASE | 0x00 | 4,
pinA6 = GPIOA_BASE | 6, pinA5 = GPIOA_BASE | 0x00 | 5,
pinA7 = GPIOA_BASE | 7, pinA6 = GPIOA_BASE | 0x00 | 6,
pinA8 = GPIOA_BASE | 8, pinA7 = GPIOA_BASE | 0x00 | 7,
pinA9 = GPIOA_BASE | 9, pinA8 = GPIOA_BASE | 0x00 | 8,
pinA10 = GPIOA_BASE | 10, pinA9 = GPIOA_BASE | 0x00 | 9,
pinA11 = GPIOA_BASE | 11, pinA10 = GPIOA_BASE | 0x00 | 10,
pinA12 = GPIOA_BASE | 12, pinA11 = GPIOA_BASE | 0x00 | 11,
pinA13 = GPIOA_BASE | 13, pinA12 = GPIOA_BASE | 0x00 | 12,
pinA14 = GPIOA_BASE | 14, pinA13 = GPIOA_BASE | 0x00 | 13,
pinA15 = GPIOA_BASE | 15, pinA14 = GPIOA_BASE | 0x00 | 14,
pinA15 = GPIOA_BASE | 0x00 | 15,
pinB0 = GPIOB_BASE | 0,
pinB1 = GPIOB_BASE | 1, pinB0 = GPIOB_BASE | 0x10 | 0,
pinB3 = GPIOB_BASE | 3, pinB1 = GPIOB_BASE | 0x10 | 1,
pinB4 = GPIOB_BASE | 4, pinB3 = GPIOB_BASE | 0x10 | 3,
pinB5 = GPIOB_BASE | 5, pinB4 = GPIOB_BASE | 0x10 | 4,
pinB6 = GPIOB_BASE | 6, pinB5 = GPIOB_BASE | 0x10 | 5,
pinB7 = GPIOB_BASE | 7, pinB6 = GPIOB_BASE | 0x10 | 6,
pinB8 = GPIOB_BASE | 8, pinB7 = GPIOB_BASE | 0x10 | 7,
pinB8 = GPIOB_BASE | 0x10 | 8,
pinF0 = GPIOF_BASE | 0,
pinF1 = GPIOF_BASE | 1 pinF0 = GPIOF_BASE | 0x20 | 0,
pinF1 = GPIOF_BASE | 0x20 | 1
}pinNo_t; }pinNo_t;
#endif #endif

@ -13,7 +13,9 @@
#define PUPDR_PULL_UP 0x1UL #define PUPDR_PULL_UP 0x1UL
#define PUPDR_PULL_DOWN 0x2UL #define PUPDR_PULL_DOWN 0x2UL
const uint32_t moderMode[4] = { #define PIN_BASE ((GPIO_TypeDef *)(pinNo&~0xFF))
const uint32_t moderMode[5] = {
MODER_ANALOG, MODER_ANALOG,
MODER_IN, MODER_IN,
MODER_OUT, MODER_OUT,
@ -21,23 +23,36 @@ const uint32_t moderMode[4] = {
MODER_ALTERNATE MODER_ALTERNATE
}; };
const uint32_t pinPort[3] = {
RCC_AHBENR_GPIOAEN,
RCC_AHBENR_GPIOBEN,
RCC_AHBENR_GPIOFEN
};
const uint32_t pinPullUpDown[3] = {
PUPDR_NO_PULL,
PUPDR_PULL_UP,
PUPDR_PULL_DOWN
};
void setMode(pinNo_t pinNo, mode mode) void setMode(pinNo_t pinNo, mode mode)
{ {
init(pinNo); init(pinNo);
//Clear entry. //Clear entry.
((GPIO_TypeDef *)(pinNo&~0xFF))->MODER &=~ (MODER_ANALOG << ((pinNo & 0xFF) * 2)); PIN_BASE->MODER &=~ (0x3 << ((pinNo & 0x0F) * 2));
//Set to corresponding mode. //Set to corresponding mode.
((GPIO_TypeDef *)(pinNo&~0xFF))->MODER |= (moderMode[mode] << ((pinNo & 0xFF) * 2)); PIN_BASE->MODER |= (moderMode[mode] << ((pinNo & 0x0F) * 2));
} }
void setOutputState(pinNo_t pinNo, state state) void setOutputState(pinNo_t pinNo, state state)
{ {
} }
void setPullUpDonw(pinNo_t pinNo, pullUpDown resistance) void setPullUpDonw(pinNo_t pinNo, pullUpDown resistance)
{ {
PIN_BASE->PUPDR &= ~(0x3 << ((pinNo & 0x0F) * 2));
PIN_BASE->PUPDR |= (pinPullUpDown[resistance] << ((pinNo & 0x0F) * 2));
} }
void setSpeed(pinNo_t pinNo, speed speed) void setSpeed(pinNo_t pinNo, speed speed)
@ -63,18 +78,17 @@ void toggle(pinNo_t pinNo)
void set(pinNo_t pinNo, uint8_t state) void set(pinNo_t pinNo, uint8_t state)
{ {
if(state == 1) if(state) {
{ PIN_BASE->BSRR |= (GPIO_BSRR_BS_0 << ((pinNo & 0xF)));
GPIOB->BSRR |= GPIO_BSRR_BS_3;
return; return;
} }
GPIOB->BSRR |= GPIO_BSRR_BR_3; PIN_BASE->BSRR |= (GPIO_BSRR_BR_0 << ((pinNo & 0xF)));
} }
//Enable the pin port's clock //Enable the pin port's clock
void init(pinNo_t pinNo) void init(pinNo_t pinNo)
{ {
RCC->AHBENR |= RCC_AHBENR_GPIOBEN; RCC->AHBENR |= pinPort[((pinNo & 0xF0)>>4)];
} }
void deInit(pinNo_t pinNo) void deInit(pinNo_t pinNo)

Loading…
Cancel
Save