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.
KED/bsl/csl/stm32f042/Src/pin.c

128 lines
2.0 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,
3
};
const uint32_t outputStateList[3] =
{
1,
0,
1
};
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)
{
PIN_BASE->OSPEEDR &= 1 << (pinNo & 0x0F);
PIN_BASE->OSPEEDR |= (outputStateList[state] << (pinNo & 0x0F));
}
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()
{
}