mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
initial version of FastShiftOut
This commit is contained in:
parent
fabe3ba99b
commit
b99f202fac
59
libraries/FastShiftOut/FastShiftOut.cpp
Normal file
59
libraries/FastShiftOut/FastShiftOut.cpp
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
//
|
||||||
|
// FILE: FastShiftOut.cpp
|
||||||
|
// AUTHOR: Rob Tillaart
|
||||||
|
// VERSION: 0.1
|
||||||
|
// PURPOSE:
|
||||||
|
// URL:
|
||||||
|
//
|
||||||
|
// Released to the public domain
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "FastShiftOut.h"
|
||||||
|
|
||||||
|
FastShiftOut::FastShiftOut(uint8_t datapin, uint8_t clockpin, uint8_t bitOrder)
|
||||||
|
{
|
||||||
|
_datapin = datapin;
|
||||||
|
_clockpin = clockpin;
|
||||||
|
_bitorder = bitOrder;
|
||||||
|
_value = -1;
|
||||||
|
pinMode(_datapin, OUTPUT);
|
||||||
|
pinMode(_clockpin, OUTPUT);
|
||||||
|
|
||||||
|
_datatimer = digitalPinToTimer(_datapin);
|
||||||
|
_databit = digitalPinToBitMask(_datapin);
|
||||||
|
_dataport = digitalPinToPort(_datapin);
|
||||||
|
// if (_datatimer != NOT_ON_TIMER) turnOffPWM(_datatimer);
|
||||||
|
_dataout = portOutputRegister(_dataport);
|
||||||
|
|
||||||
|
_clocktimer = digitalPinToTimer(_clockpin);
|
||||||
|
_clockbit = digitalPinToBitMask(_clockpin);
|
||||||
|
_clockport = digitalPinToPort(_clockpin);
|
||||||
|
// if (_clocktimer != NOT_ON_TIMER) turnOffPWM(_clocktimer);
|
||||||
|
_clockout = portOutputRegister(_clockport);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FastShiftOut::write(uint8_t data)
|
||||||
|
{
|
||||||
|
_value = data;
|
||||||
|
for (uint8_t i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
uint8_t v;
|
||||||
|
if (_bitorder == LSBFIRST) v = !!(_value & (1 << i));
|
||||||
|
else v = !!(_value & (1 << (7 - i)));
|
||||||
|
|
||||||
|
uint8_t oldSREG = SREG;
|
||||||
|
cli();
|
||||||
|
if (v == LOW) *_dataout &= ~_databit;
|
||||||
|
else *_dataout |= _databit;
|
||||||
|
*_clockout |= _clockbit;
|
||||||
|
*_clockout &= ~_clockbit;
|
||||||
|
SREG = oldSREG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int FastShiftOut::read()
|
||||||
|
{
|
||||||
|
return _value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- END OF FILE --
|
48
libraries/FastShiftOut/FastShiftOut.h
Normal file
48
libraries/FastShiftOut/FastShiftOut.h
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
//
|
||||||
|
// FILE: FastShiftOut.h
|
||||||
|
// AUTHOR: Rob Tillaart
|
||||||
|
// VERSION: 0.1
|
||||||
|
// PURPOSE:
|
||||||
|
// URL:
|
||||||
|
//
|
||||||
|
// Released to the public domain
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef FastShiftOut_h
|
||||||
|
#define FastShiftOut_h
|
||||||
|
|
||||||
|
#if defined(ARDUINO) && ARDUINO >= 100
|
||||||
|
#include "Arduino.h"
|
||||||
|
#else
|
||||||
|
#include "WProgram.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define FASTSHIFTOUT_LIB_VERSION "0.1.00"
|
||||||
|
|
||||||
|
class FastShiftOut
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FastShiftOut(uint8_t, uint8_t, uint8_t);
|
||||||
|
void write(uint8_t);
|
||||||
|
int read(void);
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint8_t _datapin;
|
||||||
|
uint8_t _clockpin;
|
||||||
|
uint8_t _bitorder;
|
||||||
|
int _value;
|
||||||
|
|
||||||
|
uint8_t _datatimer;
|
||||||
|
uint8_t _databit;
|
||||||
|
uint8_t _dataport;
|
||||||
|
volatile uint8_t *_dataout;
|
||||||
|
|
||||||
|
uint8_t _clocktimer;
|
||||||
|
uint8_t _clockbit;
|
||||||
|
uint8_t _clockport;
|
||||||
|
volatile uint8_t *_clockout;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
// -- END OF FILE --
|
3
libraries/FastShiftOut/FastShiftOut.txt
Normal file
3
libraries/FastShiftOut/FastShiftOut.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
TODO
|
||||||
|
- examples
|
Loading…
Reference in New Issue
Block a user