Pin implementation is semi finished TODO : test speed() and ouputputstate() and lasty define printinfo() and error() functions implementations

interrupts
key 4 years ago
parent e9dea25879
commit 76c339af27

@ -110,21 +110,21 @@ typedef enum
NotGpio
}errors;
void setMode(pinNo_t pinNo, mode mode);
void setOutputState(pinNo_t pinNo, state state);
void setPullUpDonw(pinNo_t pinNo, pullUpDown resistance);
void setSpeed(pinNo_t pinNo, speed speed);
void config(pinNo_t pinNo, mode mode, state state, pullUpDown resistance, speed speed);
void pinSetMode(pinNo_t pinNo, mode mode);
void pinSetOutputState(pinNo_t pinNo, state state);
void pinSetPullUpDonw(pinNo_t pinNo, pullUpDown resistance);
void pinSetSpeed(pinNo_t pinNo, speed speed);
void pinConfig(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);
uint8_t pinRead(pinNo_t pinNo);
void pinToggle(pinNo_t pinNo);
void pinWrite(pinNo_t pinNo, uint8_t state);
void init(pinNo_t pinNo);
void deInit(pinNo_t pinNo);
void pinInit(pinNo_t pinNo);
void pinDeInit(pinNo_t pinNo);
void hardwareInfo(pinNo_t pinNo);
void throwError();
void pinHardwareInfo(pinNo_t pinNo);
void pinThrowError();
#ifdef __cplusplus
}

@ -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
}

@ -4,20 +4,38 @@
int main(int argc, char *argv[])
{
Delay delay;
stmStart();
setMode(pinB3,output);
uint8_t i = 0;
stmStart();
while(1)
{
set(pinB3,1);
pinConfig(pinB3, output, pushPull, none, normal);
pinConfig(pinA0, input, pushPull, pullDown, normal);
for(i = 0 ; i < 10 ; i++)
{
delay.ms(100);
set(pinB3,0);
pinToggle(pinB3);
delay.ms(100);
}
pinWrite(pinB3,0);
while(1)
{
if(pinRead(pinA0))
{
pinWrite(pinB3,1);
}
else
{
pinWrite(pinB3,0);
}
}
return 1;
}

Loading…
Cancel
Save