diff options
author | danielgarcia@gmail.com <danielgarcia@gmail.com@4ad4ec5c-605d-bd5c-5796-512c9b60011b> | 2013-02-09 09:05:45 +0400 |
---|---|---|
committer | danielgarcia@gmail.com <danielgarcia@gmail.com@4ad4ec5c-605d-bd5c-5796-512c9b60011b> | 2013-02-09 09:05:45 +0400 |
commit | 9e0f1e14b78b9ce9e7d79de74a67b54dbdb22dbf (patch) | |
tree | 0da3fbbf7fbf3c361a77a1e02040430c357b93a7 | |
parent | a36585c82589478cff2749b4b331480bfaed6112 (diff) |
Tweak some class names. Add compile time messaging for missing information for accelerated pin access or hardware SPI access
-rw-r--r-- | FastSPI_LED2.h | 4 | ||||
-rw-r--r-- | fastpin.h | 6 | ||||
-rw-r--r-- | fastspi.h | 41 |
3 files changed, 28 insertions, 23 deletions
diff --git a/FastSPI_LED2.h b/FastSPI_LED2.h index bb574a58..1ede0f47 100644 --- a/FastSPI_LED2.h +++ b/FastSPI_LED2.h @@ -21,7 +21,7 @@ public: template <uint8_t DATA_PIN, uint8_t CLOCK_PIN, uint8_t LATCH_PIN> class LPD8806Controller : public CLEDController { - typedef ArduinoSPIOutput<DATA_PIN, CLOCK_PIN, LATCH_PIN, 0> SPI; + typedef AVRSPIOutput<DATA_PIN, CLOCK_PIN, LATCH_PIN, 0> SPI; void clearLine(int nLeds) { int n = ((nLeds + 63) >> 6); @@ -53,7 +53,7 @@ public: template <uint8_t DATA_PIN, uint8_t CLOCK_PIN, uint8_t LATCH_PIN> class WS2801Controller : public CLEDController { - typedef ArduinoSPIOutput<DATA_PIN, CLOCK_PIN, LATCH_PIN, 0> SPI; + typedef AVRSPIOutput<DATA_PIN, CLOCK_PIN, LATCH_PIN, 0> SPI; public: virtual void init() { @@ -74,7 +74,7 @@ typedef volatile uint8_t & reg8_t; /////////////////////////////////////////////////////////////////////////////////////////////////////////// // -// Pin definitions for AVR +// Pin definitions for AVR. If there are pin definitions supplied below for the platform being built on // /////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -99,6 +99,10 @@ _DEFPIN(8, 8, D); _DEFPIN(9, 64, C); _DEFPIN(10, 128, C); _DEFPIN(11, 64, D); _DEFPIN(12, 128, D); _DEFPIN(13, 16, B); _DEFPIN(14, 32, B); _DEFPIN(15, 64, B); _DEFPIN(16, 128, F); _DEFPIN(17, 64, F); _DEFPIN(18, 32, F); _DEFPIN(19, 16, F); _DEFPIN(20, 2, F); _DEFPIN(21, 1, F); _DEFPIN(22, 16, D); _DEFPIN(23, 32, D); +#else + +#pragma message "No pin/port mappings found, pin access will be slightly slower. See fastpin.h for info." + #endif @@ -61,7 +61,7 @@ public: ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// template <uint8_t DATA_PIN, uint8_t CLOCK_PIN, uint8_t LATCH_PIN, uint8_t SPI_SPEED> -class ArduinoSoftwareSPIOutput { +class AVRSoftwareSPIOutput { public: static void init() { // set the pins to output @@ -287,16 +287,16 @@ public: // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -template <uint8_t DATA_PIN, uint8_t CLOCK_PIN, uint8_t LATCH_PIN, uint8_t SPI_SPEED> -class ArduinoHardwareSPIOutput { +template <uint8_t _DATA_PIN, uint8_t _CLOCK_PIN, uint8_t _LATCH_PIN, uint8_t _SPI_SPEED> +class AVRHardwareSPIOutput { public: static void init() { uint8_t clr; // set the pins to output - Pin<DATA_PIN>::setOutput(); - Pin<LATCH_PIN>::setOutput(); - Pin<CLOCK_PIN>::setOutput(); + Pin<_DATA_PIN>::setOutput(); + Pin<_LATCH_PIN>::setOutput(); + Pin<_CLOCK_PIN>::setOutput(); SPCR |= ((1<<SPE) | (1<<MSTR) ); // enable SPI as master SPCR &= ~ ( (1<<SPR1) | (1<<SPR0) ); // clear out the prescalar bits @@ -305,7 +305,7 @@ public: clr = SPDR; // clear SPI data register bool b2x = false; - switch(SPI_SPEED) { + switch(_SPI_SPEED) { /* fosc/2 */ case 0: b2x=true; break; /* fosc/4 */ case 1: break; /* fosc/8 */ case 2: SPCR |= (1<<SPR0); b2x=true; break; @@ -340,24 +340,24 @@ public: template <uint8_t BIT> inline static void writeBit(uint8_t b, volatile uint8_t *clockpin, volatile uint8_t *datapin) { SPCR &= ~(1 << SPE); if(b & (1 << BIT)) { - Pin<DATA_PIN>::hi(datapin); + Pin<_DATA_PIN>::hi(datapin); } else { - Pin<DATA_PIN>::lo(datapin); + Pin<_DATA_PIN>::lo(datapin); } - Pin<CLOCK_PIN>::hi(clockpin); - Pin<CLOCK_PIN>::lo(clockpin); + Pin<_CLOCK_PIN>::hi(clockpin); + Pin<_CLOCK_PIN>::lo(clockpin); SPCR |= 1 << SPE; } template <uint8_t BIT> inline static void writeBit(uint8_t b) { - register volatile uint8_t *clockpin = Pin<CLOCK_PIN>::port(); - register volatile uint8_t *datapin = Pin<CLOCK_PIN>::port(); + register volatile uint8_t *clockpin = Pin<_CLOCK_PIN>::port(); + register volatile uint8_t *datapin = Pin<_CLOCK_PIN>::port(); writeBit<BIT>(b, clockpin, datapin); } - static void latch() { Pin<LATCH_PIN>::hi(); } - static void release() { Pin<LATCH_PIN>::lo(); } + static void latch() { Pin<_LATCH_PIN>::hi(); } + static void release() { Pin<_LATCH_PIN>::lo(); } static void writeBytesValue(uint8_t value, int len) { latch(); @@ -407,8 +407,8 @@ public: // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -template<uint8_t DATA_PIN, uint8_t CLOCK_PIN, uint8_t LATCH_PIN, uint8_t SPI_SPEED> -class ArduinoSPIOutput : public ArduinoSoftwareSPIOutput<DATA_PIN, CLOCK_PIN, LATCH_PIN, SPI_SPEED> {}; +template<uint8_t _DATA_PIN, uint8_t _CLOCK_PIN, uint8_t _LATCH_PIN, uint8_t _SPI_SPEED> +class AVRSPIOutput : public AVRSoftwareSPIOutput<_DATA_PIN, _CLOCK_PIN, _LATCH_PIN, _SPI_SPEED> {}; // uno/mini/duemilanove #if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) @@ -416,7 +416,7 @@ class ArduinoSPIOutput : public ArduinoSoftwareSPIOutput<DATA_PIN, CLOCK_PIN, LA #define SPI_CLOCK 13 #define SPI_LATCH 10 template<uint8_t SPI_SPEED> -class ArduinoSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> : public ArduinoHardwareSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> {}; +class AVRSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> : public AVRHardwareSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> {}; // Leonardo, teensy, blinkm #elif defined(__AVR_ATmega32U4__) @@ -424,10 +424,11 @@ class ArduinoSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> : public Ardui #define SPI_CLOCK 1 #define SPI_LATCH 0 template<uint8_t SPI_SPEED> -class ArduinoSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> : public ArduinoHardwareSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> {}; +class AVRSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> : public AVRHardwareSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> {}; +#else +#pragma message "No hardware SPI pins defined. All SPI access will default to bitbanged output" #endif - #endif |