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"
typedef enum
{
pinA0 = GPIOA_BASE | 0,
pinA1 = GPIOA_BASE | 1,
pinA2 = GPIOA_BASE | 2,
pinA3 = GPIOA_BASE | 3,
pinA4 = GPIOA_BASE | 4,
pinA5 = GPIOA_BASE | 5,
pinA6 = GPIOA_BASE | 6,
pinA7 = GPIOA_BASE | 7,
pinA8 = GPIOA_BASE | 8,
pinA9 = GPIOA_BASE | 9,
pinA10 = GPIOA_BASE | 10,
pinA11 = GPIOA_BASE | 11,
pinA12 = GPIOA_BASE | 12,
pinA13 = GPIOA_BASE | 13,
pinA14 = GPIOA_BASE | 14,
pinA15 = GPIOA_BASE | 15,
pinB0 = GPIOB_BASE | 0,
pinB1 = GPIOB_BASE | 1,
pinB3 = GPIOB_BASE | 3,
pinB4 = GPIOB_BASE | 4,
pinB5 = GPIOB_BASE | 5,
pinB6 = GPIOB_BASE | 6,
pinB7 = GPIOB_BASE | 7,
pinB8 = GPIOB_BASE | 8,
pinF0 = GPIOF_BASE | 0,
pinF1 = GPIOF_BASE | 1
// NAME = BASE ADDR | PORT | PIN NO
pinA0 = GPIOA_BASE | 0x00 | 0,
pinA1 = GPIOA_BASE | 0x00 | 1,
pinA2 = GPIOA_BASE | 0x00 | 2,
pinA3 = GPIOA_BASE | 0x00 | 3,
pinA4 = GPIOA_BASE | 0x00 | 4,
pinA5 = GPIOA_BASE | 0x00 | 5,
pinA6 = GPIOA_BASE | 0x00 | 6,
pinA7 = GPIOA_BASE | 0x00 | 7,
pinA8 = GPIOA_BASE | 0x00 | 8,
pinA9 = GPIOA_BASE | 0x00 | 9,
pinA10 = GPIOA_BASE | 0x00 | 10,
pinA11 = GPIOA_BASE | 0x00 | 11,
pinA12 = GPIOA_BASE | 0x00 | 12,
pinA13 = GPIOA_BASE | 0x00 | 13,
pinA14 = GPIOA_BASE | 0x00 | 14,
pinA15 = GPIOA_BASE | 0x00 | 15,
pinB0 = GPIOB_BASE | 0x10 | 0,
pinB1 = GPIOB_BASE | 0x10 | 1,
pinB3 = GPIOB_BASE | 0x10 | 3,
pinB4 = GPIOB_BASE | 0x10 | 4,
pinB5 = GPIOB_BASE | 0x10 | 5,
pinB6 = GPIOB_BASE | 0x10 | 6,
pinB7 = GPIOB_BASE | 0x10 | 7,
pinB8 = GPIOB_BASE | 0x10 | 8,
pinF0 = GPIOF_BASE | 0x20 | 0,
pinF1 = GPIOF_BASE | 0x20 | 1
}pinNo_t;
#endif

@ -13,7 +13,9 @@
#define PUPDR_PULL_UP 0x1UL
#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_IN,
MODER_OUT,
@ -21,23 +23,36 @@ const uint32_t moderMode[4] = {
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)
{
init(pinNo);
//Clear entry.
((GPIO_TypeDef *)(pinNo&~0xFF))->MODER &=~ (MODER_ANALOG << ((pinNo & 0xFF) * 2));
PIN_BASE->MODER &=~ (0x3 << ((pinNo & 0x0F) * 2));
//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 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)
@ -63,18 +78,17 @@ void toggle(pinNo_t pinNo)
void set(pinNo_t pinNo, uint8_t state)
{
if(state == 1)
{
GPIOB->BSRR |= GPIO_BSRR_BS_3;
if(state) {
PIN_BASE->BSRR |= (GPIO_BSRR_BS_0 << ((pinNo & 0xF)));
return;
}
GPIOB->BSRR |= GPIO_BSRR_BR_3;
PIN_BASE->BSRR |= (GPIO_BSRR_BR_0 << ((pinNo & 0xF)));
}
//Enable the pin port's clock
void init(pinNo_t pinNo)
{
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
RCC->AHBENR |= pinPort[((pinNo & 0xF0)>>4)];
}
void deInit(pinNo_t pinNo)

Loading…
Cancel
Save