DigitalIoPin: add static lib
This commit is contained in:
64
DigitalIoPin/src/DigitalIoPin.cpp
Normal file
64
DigitalIoPin/src/DigitalIoPin.cpp
Normal file
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* DigitalIoPin.cpp
|
||||
*
|
||||
* Created on: Aug 29, 2022
|
||||
* Author: Vasily Davydov
|
||||
*/
|
||||
|
||||
#include "DigitalIoPin.h"
|
||||
|
||||
DigitalIoPin::DigitalIoPin (int port, int pin, bool input, bool pullup,
|
||||
bool invert)
|
||||
{
|
||||
assert ((port <= UINT8_MAX_VALUE) && (pin <= UINT8_MAX_VALUE));
|
||||
_io._port = (uint8_t)port;
|
||||
_io._pin = (uint8_t)pin;
|
||||
_io._input = input;
|
||||
_io._pullup = pullup;
|
||||
_io._invert = invert;
|
||||
_io.IOCON_mode = IOCON_MODE_INACT;
|
||||
_io.IOCON_inv = IOCON_FUNC0;
|
||||
setIoPin ();
|
||||
}
|
||||
|
||||
DigitalIoPin::~DigitalIoPin ()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
DigitalIoPin::setIoPin ()
|
||||
{
|
||||
bool direction = true;
|
||||
if (_io._input)
|
||||
{
|
||||
direction = false;
|
||||
_io.IOCON_mode = IOCON_MODE_PULLUP;
|
||||
if (!_io._pullup)
|
||||
{
|
||||
_io.IOCON_mode = IOCON_MODE_PULLDOWN;
|
||||
}
|
||||
if (_io._invert)
|
||||
{
|
||||
_io.IOCON_inv = IOCON_INV_EN;
|
||||
}
|
||||
}
|
||||
Chip_IOCON_PinMuxSet (LPC_IOCON, _io._port, _io._pin,
|
||||
(_io.IOCON_mode | _io.DigitalEn | _io.IOCON_inv));
|
||||
/** False direction equals input */
|
||||
Chip_GPIO_SetPinDIR (LPC_GPIO, _io._port, _io._pin, direction);
|
||||
}
|
||||
|
||||
bool
|
||||
DigitalIoPin::read ()
|
||||
{
|
||||
bool state = (Chip_GPIO_GetPinState (LPC_GPIO, _io._port, _io._pin));
|
||||
return (_io._invert && !_io._input) ? !state : state;
|
||||
}
|
||||
|
||||
void
|
||||
DigitalIoPin::write (bool value)
|
||||
{
|
||||
assert (!(_io._input));
|
||||
Chip_GPIO_SetPinState (LPC_GPIO, _io._port, _io._pin, ((_io._invert) ? !value : value));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user