From 76c339af27fcdce37bea5a04b591cb859b2575ce Mon Sep 17 00:00:00 2001 From: key Date: Sun, 31 Oct 2021 16:24:41 +0100 Subject: [PATCH] Pin implementation is semi finished TODO : test speed() and ouputputstate() and lasty define printinfo() and error() functions implementations --- bsl/csl/interfaces/pin.h | 24 ++++++------- bsl/csl/stm32f042/Src/pin.c | 70 +++++++++++++++++++++++-------------- main.cpp | 30 ++++++++++++---- 3 files changed, 79 insertions(+), 45 deletions(-) diff --git a/bsl/csl/interfaces/pin.h b/bsl/csl/interfaces/pin.h index d1761d3..1c121b3 100644 --- a/bsl/csl/interfaces/pin.h +++ b/bsl/csl/interfaces/pin.h @@ -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 } diff --git a/bsl/csl/stm32f042/Src/pin.c b/bsl/csl/stm32f042/Src/pin.c index 61460a1..022b970 100644 --- a/bsl/csl/stm32f042/Src/pin.c +++ b/bsl/csl/stm32f042/Src/pin.c @@ -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 } diff --git a/main.cpp b/main.cpp index 9255d20..615220f 100644 --- a/main.cpp +++ b/main.cpp @@ -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; }