|
|
|
@ -13,6 +13,9 @@
|
|
|
|
|
#define PUPDR_PULL_UP 0x1UL
|
|
|
|
|
#define PUPDR_PULL_DOWN 0x2UL
|
|
|
|
|
|
|
|
|
|
#define OTYPER_PUSH_PULL 0x0UL
|
|
|
|
|
#define OTYPER_OPEN_DRAIN 0x1UL
|
|
|
|
|
|
|
|
|
|
#define PIN_BASE ((GPIO_TypeDef *)(pinNo&~0xFF))
|
|
|
|
|
|
|
|
|
|
const uint32_t moderMode[5] = {
|
|
|
|
@ -36,63 +39,70 @@ const uint32_t pinPullUpDown[3] = {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const uint32_t speedList[4] = {
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
1,
|
|
|
|
|
3
|
|
|
|
|
OSPEEDR_LOW,
|
|
|
|
|
OSPEEDR_LOW,
|
|
|
|
|
OSPEEDR_MEDIUM,
|
|
|
|
|
OSPEEDR_HIGH
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const uint32_t outputStateList[3] =
|
|
|
|
|
{
|
|
|
|
|
1,
|
|
|
|
|
0,
|
|
|
|
|
1
|
|
|
|
|
OTYPER_OPEN_DRAIN,
|
|
|
|
|
OTYPER_PUSH_PULL,
|
|
|
|
|
OTYPER_OPEN_DRAIN
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void setMode(pinNo_t pinNo, mode mode)
|
|
|
|
|
void pinSetMode(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 pinSetOutputState(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)
|
|
|
|
|
void pinSetPullUpDonw(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 pinSetSpeed(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)
|
|
|
|
|
void pinConfig(pinNo_t pinNo, mode mode, state state, pullUpDown resistance, speed speed)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
pinSetMode(pinNo, mode);
|
|
|
|
|
pinSetOutputState(pinNo, state);
|
|
|
|
|
pinSetPullUpDonw(pinNo, resistance);
|
|
|
|
|
pinSetSpeed(pinNo,speed);
|
|
|
|
|
pinInit(pinNo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t get(pinNo_t pinNo)
|
|
|
|
|
uint8_t pinRead(pinNo_t pinNo)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
return ((PIN_BASE->IDR & (1<<(pinNo & 0x0F))) >> (pinNo & 0x0F));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void toggle(pinNo_t pinNo)
|
|
|
|
|
void pinToggle(pinNo_t pinNo)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if(pinRead(pinNo))
|
|
|
|
|
{
|
|
|
|
|
PIN_BASE->BSRR |= (GPIO_BSRR_BR_0 << ((pinNo & 0xF)));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
PIN_BASE->BSRR |= (GPIO_BSRR_BS_0 << ((pinNo & 0xF)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void set(pinNo_t pinNo, uint8_t state)
|
|
|
|
|
void pinWrite(pinNo_t pinNo, uint8_t state)
|
|
|
|
|
{
|
|
|
|
|
if(state) {
|
|
|
|
|
PIN_BASE->BSRR |= (GPIO_BSRR_BS_0 << ((pinNo & 0xF)));
|
|
|
|
@ -102,25 +112,31 @@ void set(pinNo_t pinNo, uint8_t state)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Enable the pin port's clock
|
|
|
|
|
void init(pinNo_t pinNo)
|
|
|
|
|
//in this family of MCU ell the cloks are on the same bus that is why we dion't need to
|
|
|
|
|
//modfify the AHBENR.
|
|
|
|
|
//DS Page : 121
|
|
|
|
|
void pinInit(pinNo_t pinNo)
|
|
|
|
|
{
|
|
|
|
|
RCC->AHBENR |= pinPort[((pinNo & 0xF0)>>4)];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void deInit(pinNo_t pinNo)
|
|
|
|
|
//in this family of MCU ell the cloks are on the same bus that is why we dion't need to
|
|
|
|
|
//modfify the AHBENR.
|
|
|
|
|
//DS Page : 121
|
|
|
|
|
void pinDeInit(pinNo_t pinNo)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
RCC->AHBENR &=~(pinPort[((pinNo & 0xF0)>>4)]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void hardwareInfo(pinNo_t pinNo)
|
|
|
|
|
void pinHardwareInfo(pinNo_t pinNo)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
//TODO : define where to print anh woh to print
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void throwError()
|
|
|
|
|
void pinThrowError()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
//TODO : Define what for an error di we whant to implement
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|