parent
dc0aa76818
commit
8643e915f8
@ -1,117 +0,0 @@
|
||||
#ifndef _GPIO_H_
|
||||
#define _GPIO_H_
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdint.h>
|
||||
#include <memory>
|
||||
|
||||
class Gpio
|
||||
{
|
||||
public:
|
||||
enum pinMode
|
||||
{
|
||||
undefined,
|
||||
input,
|
||||
output,
|
||||
analog,
|
||||
alternate
|
||||
};
|
||||
|
||||
enum pinState
|
||||
{
|
||||
floating,
|
||||
pushPull,
|
||||
openDrain
|
||||
};
|
||||
|
||||
enum pinPullUpDown
|
||||
{
|
||||
none,
|
||||
pullUp,
|
||||
pullDown
|
||||
};
|
||||
|
||||
enum pinSpeed
|
||||
{
|
||||
slow,
|
||||
normal,
|
||||
fast,
|
||||
veryFast
|
||||
};
|
||||
|
||||
enum pinInterrupt
|
||||
{
|
||||
disabled,
|
||||
enabled
|
||||
};
|
||||
|
||||
enum pinFunction
|
||||
{
|
||||
passive,
|
||||
gpio,
|
||||
i2c,
|
||||
spi,
|
||||
pwm,
|
||||
pcm,
|
||||
uart,
|
||||
eeprom,
|
||||
clk
|
||||
};
|
||||
|
||||
struct pinDefinition
|
||||
{
|
||||
uint8_t no;
|
||||
pinMode mode;
|
||||
pinState state;
|
||||
pinPullUpDown pud;
|
||||
pinSpeed speed;
|
||||
pinInterrupt interrupt;
|
||||
pinFunction function;
|
||||
};
|
||||
|
||||
enum errors
|
||||
{
|
||||
notValidMode,
|
||||
notValidOut,
|
||||
pinOutOfRange,
|
||||
pinNotDeclared,
|
||||
pinNotReachable,
|
||||
pinNoPullUpDown,
|
||||
pinNotAnalog,
|
||||
pinNotDigital,
|
||||
pinTooFast,
|
||||
pinBocked,
|
||||
pinAlreadyUsed,
|
||||
pinNotGpio
|
||||
};
|
||||
|
||||
Gpio();
|
||||
~Gpio();
|
||||
|
||||
void setFunction(uint8_t gpioNo, Gpio::pinFunction function);
|
||||
void setMode(uint8_t gpioNo, pinMode mode);
|
||||
void setOutputState(uint8_t gpioNo, pinState state);
|
||||
void setPullUpDonw(uint8_t gpioNo, pinPullUpDown resistance);
|
||||
void setSpeed(uint8_t gpioNo, pinSpeed speed);
|
||||
void config(uint8_t gpioNo, pinFunction function, pinMode mode, pinState state, pinPullUpDown resistance, pinSpeed speed);
|
||||
|
||||
uint8_t readPin(uint8_t gpioNo);
|
||||
void writePin(uint8_t gpioNo, uint8_t value);
|
||||
|
||||
uint16_t readRange(uint8_t start, uint8_t stop);
|
||||
void writeRange(uint8_t start, uint8_t stop, uint16_t value);
|
||||
|
||||
void pinInitiate(uint8_t gpioNo);
|
||||
void pinUninitiate(uint8_t gpioNo);
|
||||
|
||||
void checkCurrentPins();
|
||||
void pinList();
|
||||
void pinPrintInfo(uint8_t gpioNo);
|
||||
|
||||
private:
|
||||
void throwError(uint16_t line, errors errNo);
|
||||
class gpioImpl;
|
||||
std::unique_ptr<gpioImpl> gpioPimpl;
|
||||
};
|
||||
|
||||
#endif // _GPIO_H_
|
@ -1,23 +1,94 @@
|
||||
#ifndef __PIN_HPP__
|
||||
#define __PIN_HPP__
|
||||
#ifndef _GPIO_H_
|
||||
#define _GPIO_H_
|
||||
|
||||
template <typename Derived>
|
||||
struct Pin
|
||||
#include <unistd.h>
|
||||
#include <stdint.h>
|
||||
#include <memory>
|
||||
|
||||
class Pin
|
||||
{
|
||||
bool read()
|
||||
{
|
||||
return static_cast<Derived*>(this)->readImpl();
|
||||
}
|
||||
|
||||
void write(bool logic)
|
||||
{
|
||||
static_cast<Derived*>(this)->writeImpl(logic);
|
||||
}
|
||||
|
||||
void toggle()
|
||||
{
|
||||
static_cast<Derived*>(this)-toggleImpl();
|
||||
}
|
||||
public:
|
||||
enum mode
|
||||
{
|
||||
undefined,
|
||||
input,
|
||||
output,
|
||||
analog,
|
||||
alternate
|
||||
};
|
||||
|
||||
enum state
|
||||
{
|
||||
floating,
|
||||
pushPull,
|
||||
openDrain
|
||||
};
|
||||
|
||||
enum pullUpDown
|
||||
{
|
||||
none,
|
||||
pullUp,
|
||||
pullDown
|
||||
};
|
||||
|
||||
enum speed
|
||||
{
|
||||
slow,
|
||||
normal,
|
||||
fast,
|
||||
veryFast
|
||||
};
|
||||
|
||||
enum interrupt
|
||||
{
|
||||
disabled,
|
||||
enabled
|
||||
};
|
||||
|
||||
struct configuration
|
||||
{
|
||||
mode md;
|
||||
state st;
|
||||
pullUpDown pud;
|
||||
speed sp;
|
||||
interrupt intr;
|
||||
};
|
||||
|
||||
enum errors
|
||||
{
|
||||
notValidMode,
|
||||
notValidOut,
|
||||
OutOfRange,
|
||||
NotDeclared,
|
||||
NotReachable,
|
||||
NoPullUpDown,
|
||||
NotAnalog,
|
||||
NotDigital,
|
||||
TooFast,
|
||||
Bocked,
|
||||
AlreadyUsed,
|
||||
NotGpio
|
||||
};
|
||||
|
||||
Pin();
|
||||
~Pin();
|
||||
void setMode(mode mode);
|
||||
void setOutputState(state state);
|
||||
void setPullUpDonw(pullUpDown resistance);
|
||||
void setSpeed(speed speed);
|
||||
void config(mode mode, state state, pullUpDown resistance, speed speed);
|
||||
|
||||
bool read();
|
||||
bool toggle();
|
||||
void write(bool state);
|
||||
|
||||
void init();
|
||||
void deInit();
|
||||
|
||||
void hardwareInfo();
|
||||
|
||||
private:
|
||||
void throwError(uint16_t line, errors errNo);
|
||||
};
|
||||
|
||||
#endif // __PIN_HPP__
|
||||
#endif // _GPIO_H_
|
||||
|
@ -1,198 +1,82 @@
|
||||
#include "gpio.hpp"
|
||||
#include "pin.hpp"
|
||||
#include "../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f042x6.h"
|
||||
//#include "stm32f042x6.h"
|
||||
|
||||
#define PIN_COUNT 20
|
||||
|
||||
Pin::Pin(){
|
||||
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
|
||||
// Set PIN 3 of port B as Output
|
||||
GPIOB->MODER |= GPIO_MODER_MODER3_0;
|
||||
GPIOB->MODER &=~ GPIO_MODER_MODER3_1;
|
||||
}
|
||||
Pin::~Pin(){}
|
||||
|
||||
class Gpio::gpioImpl
|
||||
{
|
||||
public:
|
||||
uint8_t pinCount = PIN_COUNT;
|
||||
char buffer[50];
|
||||
uint8_t currentPin = 0;
|
||||
int ck = 0;
|
||||
|
||||
|
||||
pinDefinition pins[PIN_COUNT + 1];
|
||||
|
||||
gpioImpl()
|
||||
{
|
||||
// Enable CLock to GPIO port B
|
||||
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
|
||||
// Set PIN 3 of port B as Output
|
||||
GPIOB->MODER |= GPIO_MODER_MODER3_0;
|
||||
GPIOB->MODER &=~ GPIO_MODER_MODER3_1;
|
||||
}
|
||||
|
||||
void setFunction(uint8_t gpioNo, Gpio::pinFunction function)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void setMode(uint8_t gpioNo, Gpio::pinMode mode)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void setOutputState(uint8_t gpioNo, Gpio::pinState state)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void setPullUpDonw(uint8_t gpioNo, Gpio::pinPullUpDown resistance)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void setSpeed(uint8_t gpioNo, Gpio::pinSpeed speed)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void config(uint8_t gpioNo,Gpio::pinFunction function, Gpio::pinMode mode, Gpio::pinState state, Gpio::pinPullUpDown resistance, Gpio::pinSpeed speed)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
int8_t readPin(uint8_t gpioNo)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
void writePin(uint8_t gpioNo, uint8_t value)
|
||||
{
|
||||
if(value == 1)
|
||||
{
|
||||
//LL_GPIO_SetOutputPin(LED_G_GPIO_Port,LED_G_Pin);
|
||||
GPIOB->BSRR |= GPIO_BSRR_BS_3;
|
||||
}
|
||||
else if(value == 0)
|
||||
{
|
||||
//LL_GPIO_ResetOutputPin(LED_G_GPIO_Port,LED_G_Pin);
|
||||
GPIOB->BSRR |= GPIO_BSRR_BR_3;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
uint16_t readRange(uint8_t start, uint8_t stop)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void writeRange(uint8_t start, uint8_t stop, uint16_t value)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
void pinInitiate(uint8_t gpioNo)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void pinUninitiate(uint8_t gpioNo)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void checkCurrentPins()
|
||||
{
|
||||
}
|
||||
|
||||
void pinList() // Lists allthe pins whom their mode in not set to undefined.
|
||||
{
|
||||
}
|
||||
|
||||
void pinPrintInfo(uint8_t gpioNo) // a graphical arrangement to see the cunnrently acive pins
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void throwError(uint16_t line, Gpio::errors errNo)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
Gpio::Gpio():gpioPimpl(new gpioImpl()){}
|
||||
Gpio::~Gpio(){}
|
||||
|
||||
void Gpio::setFunction(uint8_t gpioNo, Gpio::pinFunction function)
|
||||
{
|
||||
return gpioPimpl->setFunction(gpioNo, function);
|
||||
}
|
||||
|
||||
void Gpio::setMode(uint8_t gpioNo, Gpio::pinMode mode)
|
||||
void Pin::setMode(mode mode)
|
||||
{
|
||||
return gpioPimpl->setMode(gpioNo, mode);
|
||||
|
||||
}
|
||||
|
||||
void Gpio::setOutputState(uint8_t gpioNo, Gpio::pinState state)
|
||||
void Pin::setOutputState(state state)
|
||||
{
|
||||
return gpioPimpl->setOutputState(gpioNo,state);
|
||||
|
||||
}
|
||||
|
||||
void Gpio::setPullUpDonw(uint8_t gpioNo, Gpio::pinPullUpDown resistance)
|
||||
void Pin::setPullUpDonw(pullUpDown resistance)
|
||||
{
|
||||
return gpioPimpl->setPullUpDonw(gpioNo,resistance);
|
||||
|
||||
}
|
||||
|
||||
void Gpio::setSpeed(uint8_t gpioNo, Gpio::pinSpeed speed)
|
||||
void Pin::setSpeed(speed speed)
|
||||
{
|
||||
return gpioPimpl->setSpeed(gpioNo, speed);
|
||||
|
||||
}
|
||||
|
||||
void Gpio::config(uint8_t gpioNo,Gpio::pinFunction function, Gpio::pinMode mode, Gpio::pinState state, Gpio::pinPullUpDown resistance, Gpio::pinSpeed speed)
|
||||
void Pin::config(mode mode, state state, pullUpDown resistance, speed speed)
|
||||
{
|
||||
return gpioPimpl->config(gpioNo,function ,mode,state,resistance,speed);
|
||||
|
||||
}
|
||||
|
||||
uint8_t Gpio::readPin(uint8_t gpioNo)
|
||||
{
|
||||
return gpioPimpl->readPin(gpioNo);
|
||||
}
|
||||
|
||||
void Gpio::writePin(uint8_t gpioNo, uint8_t value)
|
||||
bool Pin::read()
|
||||
{
|
||||
return gpioPimpl->writePin(gpioNo, value);
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint16_t Gpio::readRange(uint8_t start, uint8_t stop)
|
||||
{
|
||||
return gpioPimpl->readRange(start,stop);
|
||||
}
|
||||
|
||||
void Gpio::writeRange(uint8_t start, uint8_t stop, uint16_t value)
|
||||
{
|
||||
return gpioPimpl->writeRange(start,stop,value);
|
||||
}
|
||||
|
||||
void Gpio::pinInitiate(uint8_t gpioNo)
|
||||
bool Pin::toggle()
|
||||
{
|
||||
return gpioPimpl->pinInitiate(gpioNo);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void Gpio::pinUninitiate(uint8_t gpioNo)
|
||||
void Pin::write(bool state)
|
||||
{
|
||||
return gpioPimpl->pinUninitiate(gpioNo);
|
||||
if(state == 1)
|
||||
{
|
||||
GPIOB->BSRR |= GPIO_BSRR_BS_3;
|
||||
return;
|
||||
}
|
||||
GPIOB->BSRR |= GPIO_BSRR_BR_3;
|
||||
}
|
||||
|
||||
void Gpio::checkCurrentPins()
|
||||
|
||||
void Pin::init()
|
||||
{
|
||||
return gpioPimpl->checkCurrentPins();
|
||||
|
||||
}
|
||||
|
||||
void Gpio::pinList()
|
||||
void Pin::deInit()
|
||||
{
|
||||
return gpioPimpl->pinList();
|
||||
|
||||
}
|
||||
|
||||
void Gpio::pinPrintInfo(uint8_t gpioNo)
|
||||
|
||||
void Pin::hardwareInfo()
|
||||
{
|
||||
return gpioPimpl->pinPrintInfo(gpioNo);
|
||||
|
||||
}
|
||||
|
||||
void Gpio::throwError(uint16_t line, Gpio::errors error)
|
||||
|
||||
void Pin::throwError(uint16_t line, errors errNo)
|
||||
{
|
||||
return gpioPimpl->throwError(line, error);
|
||||
|
||||
}
|
||||
|
@ -1,45 +0,0 @@
|
||||
/*
|
||||
* My gola is to write my own gio lib
|
||||
*
|
||||
*/
|
||||
|
||||
//USER LED GREEN
|
||||
//PORT B
|
||||
//PIN 3
|
||||
|
||||
//#define PERIPH_BASE (0x40000000UL)
|
||||
|
||||
#define AHB1_PERIPH_OFFSET (0x00020000UL)
|
||||
#define AHB1_PERIPH_BASE (PERIPH_BASE + AHB1_PERIPH_OFFSET)
|
||||
|
||||
#define AHB2_PERIPH_OFFSET (0x08000000UL)
|
||||
#define AHB2_PERIPH_BASE (PERIPH_BASE + AHB2_PERIPH_OFFSET)
|
||||
|
||||
#define GPIOA_OFFSET (0x0000U)
|
||||
//#define GPIOA_BASE (AHB2_PERIPH_BASE + GPIOA_OFFSET)
|
||||
|
||||
#define GPIOB_OFFSET (0x00000400UL)
|
||||
//#define GPIOB_BASE (AHB2_PERIPH_BASE + GPIOB_OFFSET)
|
||||
|
||||
#define RCC_OFFSET (0x00021000UL)
|
||||
//#define RCC_BASE (AHB1_PERIPH_BASE + RCC_OFFSET)
|
||||
//https://stackoverflow.com/questions/18785991/define-regx-volatile-unsigned-int-x
|
||||
|
||||
#define AHBENR_OFFSET (0x14UL)
|
||||
#define RCC_AHBENR (*(volatile unsigned int *)(RCC_BASE + AHBENR_OFFSET))
|
||||
|
||||
#define IOPAEN (1U << 17)
|
||||
#define IOPBEN (1U << 18)
|
||||
|
||||
|
||||
#define MODER_OFFSET (0x00UL)
|
||||
#define GPIOX_MODER (*(volatile unsigned int *)(GPIOB_BASE + MODER_OFFSET))
|
||||
|
||||
#define GPIOX_ODR_OFFSET (0x14UL)
|
||||
#define GPIOB_ODR (*(volatile unsigned int *)(GPIOB_BASE + GPIOX_ODR_OFFSET))
|
||||
|
||||
#define PINB3 (1U<<3)
|
||||
|
||||
|
||||
|
||||
#define LED_PIN PINB3
|
@ -1,17 +1,18 @@
|
||||
#include"main.hpp"
|
||||
#include "bsl/csl/interfaces/gpio.hpp"
|
||||
#include "bsl/csl/interfaces/pin.hpp"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
Gpio gpio;
|
||||
Pin pin;
|
||||
|
||||
cppHook();
|
||||
|
||||
while(1)
|
||||
{
|
||||
LL_mDelay(50);
|
||||
gpio.writePin(1,1);
|
||||
LL_mDelay(50);
|
||||
gpio.writePin(1,0);
|
||||
LL_mDelay(500);
|
||||
pin.write(true);
|
||||
LL_mDelay(500);
|
||||
pin.write(false);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -1,3 +0,0 @@
|
||||
project(p_periferals)
|
||||
|
||||
add_subdirectory(gpio)
|
Loading…
Reference in new issue