You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
1.9 KiB
120 lines
1.9 KiB
#include "pin.h"
|
|
|
|
#define MODER_IN 0x0UL
|
|
#define MODER_OUT 0x1UL
|
|
#define MODER_ALTERNATE 0x2UL
|
|
#define MODER_ANALOG 0x3UL
|
|
|
|
#define OSPEEDR_LOW 0x0UL
|
|
#define OSPEEDR_MEDIUM 0x1UL
|
|
#define OSPEEDR_HIGH 0x3UL
|
|
|
|
#define PUPDR_NO_PULL 0x0UL
|
|
#define PUPDR_PULL_UP 0x1UL
|
|
#define PUPDR_PULL_DOWN 0x2UL
|
|
|
|
#define PIN_BASE ((GPIO_TypeDef *)(pinNo&~0xFF))
|
|
|
|
const uint32_t moderMode[5] = {
|
|
MODER_ANALOG,
|
|
MODER_IN,
|
|
MODER_OUT,
|
|
MODER_ANALOG,
|
|
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
|
|
};
|
|
|
|
const uint32_t speedList[4] = {
|
|
0,
|
|
0,
|
|
1,
|
|
2
|
|
};
|
|
|
|
void setMode(pinNo_t pinNo, mode mode)
|
|
{
|
|
init(pinNo);
|
|
//Clear entry.
|
|
PIN_BASE->MODER &=~ (0x3 << ((pinNo & 0x0F) * 2));
|
|
//Set to corresponding mode.
|
|
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)
|
|
{
|
|
PIN_BASE->OSPEEDR &= (0x3 << ((pinNo & 0x0F) * 2));
|
|
PIN_BASE->OSPEEDR |= (speedList[speed] << ((pinNo & 0x0F) * 2));
|
|
}
|
|
|
|
void config(pinNo_t pinNo, mode mode, state state, pullUpDown resistance, speed speed)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
uint8_t get(pinNo_t pinNo)
|
|
{
|
|
|
|
}
|
|
|
|
void toggle(pinNo_t pinNo)
|
|
{
|
|
|
|
}
|
|
|
|
void set(pinNo_t pinNo, uint8_t state)
|
|
{
|
|
if(state) {
|
|
PIN_BASE->BSRR |= (GPIO_BSRR_BS_0 << ((pinNo & 0xF)));
|
|
return;
|
|
}
|
|
PIN_BASE->BSRR |= (GPIO_BSRR_BR_0 << ((pinNo & 0xF)));
|
|
}
|
|
|
|
//Enable the pin port's clock
|
|
void init(pinNo_t pinNo)
|
|
{
|
|
RCC->AHBENR |= pinPort[((pinNo & 0xF0)>>4)];
|
|
}
|
|
|
|
void deInit(pinNo_t pinNo)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
void hardwareInfo(pinNo_t pinNo)
|
|
{
|
|
|
|
}
|
|
|
|
void throwError()
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|