mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-09-19 16:46:11 -04:00
+ version 0.1.01
+ stricter interface + better performance compare in example code
This commit is contained in:
parent
cc73f24876
commit
53ea9611db
@ -1,7 +1,7 @@
|
||||
//
|
||||
// FILE: FastShiftIn.cpp
|
||||
// AUTHOR: Rob Tillaart
|
||||
// VERSION: 0.1.00
|
||||
// VERSION: 0.1.01
|
||||
// PURPOSE: shiftin
|
||||
// DATE: 2013-09-29
|
||||
// URL:
|
||||
@ -11,47 +11,48 @@
|
||||
|
||||
#include "FastShiftIn.h"
|
||||
|
||||
FastShiftIn::FastShiftIn(uint8_t datapin, uint8_t clockpin, uint8_t bitOrder)
|
||||
FastShiftIn::FastShiftIn(const uint8_t datapin, const uint8_t clockpin, const uint8_t bitOrder)
|
||||
{
|
||||
_bitorder = bitOrder;
|
||||
_value = -1;
|
||||
_value = FASTSHIFTIN_NOVALUE;
|
||||
|
||||
pinMode(datapin, INPUT);
|
||||
pinMode(clockpin, INPUT);
|
||||
|
||||
|
||||
// uint8_t _datatimer = digitalPinToTimer(datapin);
|
||||
// if (_datatimer != NOT_ON_TIMER) turnOffPWM(_datatimer); TODO
|
||||
uint8_t _dataport = digitalPinToPort(datapin);
|
||||
uint8_t _dataport = digitalPinToPort(datapin);
|
||||
_datain = portOutputRegister(_dataport);
|
||||
_databit = digitalPinToBitMask(datapin);
|
||||
|
||||
_databit = digitalPinToBitMask(datapin);
|
||||
|
||||
// uint8_t _clocktimer = digitalPinToTimer(clockpin);
|
||||
// if (_clocktimer != NOT_ON_TIMER) turnOffPWM(_clocktimer);
|
||||
uint8_t _clockport = digitalPinToPort(clockpin);
|
||||
uint8_t _clockport = digitalPinToPort(clockpin);
|
||||
_clockin = portOutputRegister(_clockport);
|
||||
_clockbit = digitalPinToBitMask(clockpin);
|
||||
_clockbit = digitalPinToBitMask(clockpin);
|
||||
}
|
||||
|
||||
|
||||
int FastShiftIn::read()
|
||||
{
|
||||
_value = 0;
|
||||
|
||||
for (uint8_t i = 0; i < 8; i++)
|
||||
|
||||
for (uint8_t i = 0; i < 8; i++)
|
||||
{
|
||||
uint8_t oldSREG = SREG;
|
||||
cli();
|
||||
*_clockin |= _clockbit;
|
||||
|
||||
if ((*_datain & _databit) > 0)
|
||||
*_clockin |= _clockbit;
|
||||
|
||||
if ((*_datain & _databit) > 0)
|
||||
{
|
||||
if (_bitorder == LSBFIRST)
|
||||
_value |= (1 << i);
|
||||
_value |= (1 << i);
|
||||
else
|
||||
_value |= (1 << (7 - i));
|
||||
_value |= (1 << (7 - i));
|
||||
}
|
||||
*_clockin |= _clockbit;
|
||||
*_clockin |= _clockbit;
|
||||
SREG = oldSREG;
|
||||
}
|
||||
}
|
||||
return _value;
|
||||
}
|
||||
// -- END OF FILE --
|
@ -1,7 +1,7 @@
|
||||
//
|
||||
// FILE: FastShiftIn.h
|
||||
// AUTHOR: Rob Tillaart
|
||||
// VERSION: 0.1.00
|
||||
// VERSION: 0.1.01
|
||||
// PURPOSE: shiftin
|
||||
// DATE: 2013-09-29
|
||||
// URL:
|
||||
@ -13,27 +13,29 @@
|
||||
#define FastShiftIn_h
|
||||
|
||||
#if defined(ARDUINO) && ARDUINO >= 100
|
||||
#include "Arduino.h"
|
||||
#include "Arduino.h"
|
||||
#else
|
||||
#include "WProgram.h"
|
||||
#include "WProgram.h"
|
||||
#endif
|
||||
|
||||
#define FASTSHIFTIN_LIB_VERSION "0.1.00"
|
||||
#define FASTSHIFTIN_LIB_VERSION "0.1.01"
|
||||
|
||||
#define FASTSHIFTIN_NOVALUE -1
|
||||
|
||||
class FastShiftIn
|
||||
{
|
||||
public:
|
||||
FastShiftIn(uint8_t, uint8_t, uint8_t);
|
||||
public:
|
||||
FastShiftIn(const uint8_t, const uint8_t, const uint8_t);
|
||||
int read(void);
|
||||
|
||||
private:
|
||||
private:
|
||||
uint8_t _bitorder;
|
||||
int _value;
|
||||
|
||||
uint8_t _databit;
|
||||
|
||||
uint8_t _databit;
|
||||
volatile uint8_t *_datain;
|
||||
|
||||
uint8_t _clockbit;
|
||||
|
||||
uint8_t _clockbit;
|
||||
volatile uint8_t *_clockin;
|
||||
};
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
//
|
||||
// FILE: fastShiftIn.ino
|
||||
// AUTHOR: Rob Tillaart
|
||||
// VERSION: 0.1.00
|
||||
// VERSION: 0.1.01
|
||||
// PURPOSE: test sketch
|
||||
// URL:
|
||||
//
|
||||
@ -25,45 +25,53 @@ void setup()
|
||||
|
||||
Serial.println("\nPerformance - time in us");
|
||||
uint32_t start = micros();
|
||||
for (int i=0; i<100; i++)
|
||||
for (int i=0; i<1000; i++)
|
||||
{
|
||||
x = FSI.read();
|
||||
}
|
||||
uint32_t duration = micros() - start;
|
||||
uint32_t duration1 = micros() - start;
|
||||
Serial.print("FastShiftIn1: ");
|
||||
Serial.println(duration/100.0, 1);
|
||||
Serial.println(duration1 * 0.001);
|
||||
|
||||
start = micros();
|
||||
for (int i=0; i<100; i++)
|
||||
for (int i=0; i<1000; i++)
|
||||
{
|
||||
x = FSI.read();
|
||||
x = FSI.read();
|
||||
}
|
||||
duration = micros() - start;
|
||||
uint32_t duration2 = micros() - start;
|
||||
Serial.print("FastShiftIn2: ");
|
||||
Serial.println(duration/100.0, 1);
|
||||
Serial.println(duration2 * 0.001);
|
||||
Serial.print(" Delta: ");
|
||||
Serial.println((duration2-duration1)* 0.001);
|
||||
Serial.println();
|
||||
|
||||
|
||||
start = micros();
|
||||
for (int i=0; i<10000; i++)
|
||||
for (int i=0; i<1000; i++)
|
||||
{
|
||||
x = shiftIn(12, 13, LSBFIRST);
|
||||
}
|
||||
duration = micros() - start;
|
||||
duration1 = micros() - start;
|
||||
Serial.print("Standard shiftIn1: ");
|
||||
Serial.println(duration/10.0, 1);
|
||||
Serial.println(duration1* 0.001);
|
||||
|
||||
start = micros();
|
||||
for (int i=0; i<10000; i++)
|
||||
for (int i=0; i<1000; i++)
|
||||
{
|
||||
x = shiftIn(12, 13, LSBFIRST);
|
||||
x = shiftIn(12, 13, LSBFIRST);
|
||||
}
|
||||
duration = micros() - start;
|
||||
duration2 = micros() - start;
|
||||
Serial.print("Standard shiftIn2: ");
|
||||
Serial.println(duration/10.0, 1);
|
||||
Serial.println(duration2 * 0.001);
|
||||
Serial.print(" Delta: ");
|
||||
Serial.println((duration2-duration1) * 0.001);
|
||||
Serial.println();
|
||||
|
||||
Serial.println("done...");
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user