diff options
| author | Cristian Maglie <c.maglie@bug.st> | 2012-01-04 15:14:51 +0100 | 
|---|---|---|
| committer | Cristian Maglie <c.maglie@bug.st> | 2012-01-04 15:14:51 +0100 | 
| commit | 8c2b5b979a75d109ae7cc306afc50d7ffe1e0366 (patch) | |
| tree | 19ac8d91c7209397e7dc890b432a254ae9a7cd62 /libraries/SPI/SPI.h | |
| parent | be52c95820400d48e47615232d3c38236166fad3 (diff) | |
Moved libraries folder inside platform folder. Now libraries and examples are searched per board/platform
Diffstat (limited to 'libraries/SPI/SPI.h')
| -rw-r--r-- | libraries/SPI/SPI.h | 70 | 
1 files changed, 70 insertions, 0 deletions
| diff --git a/libraries/SPI/SPI.h b/libraries/SPI/SPI.h new file mode 100644 index 0000000..f647d5c --- /dev/null +++ b/libraries/SPI/SPI.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2010 by Cristian Maglie <c.maglie@bug.st> + * SPI Master library for arduino. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of either the GNU General Public License version 2 + * or the GNU Lesser General Public License version 2.1, both as + * published by the Free Software Foundation. + */ + +#ifndef _SPI_H_INCLUDED +#define _SPI_H_INCLUDED + +#include <stdio.h> +#include <Arduino.h> +#include <avr/pgmspace.h> + +#define SPI_CLOCK_DIV4 0x00 +#define SPI_CLOCK_DIV16 0x01 +#define SPI_CLOCK_DIV64 0x02 +#define SPI_CLOCK_DIV128 0x03 +#define SPI_CLOCK_DIV2 0x04 +#define SPI_CLOCK_DIV8 0x05 +#define SPI_CLOCK_DIV32 0x06 +//#define SPI_CLOCK_DIV64 0x07 + +#define SPI_MODE0 0x00 +#define SPI_MODE1 0x04 +#define SPI_MODE2 0x08 +#define SPI_MODE3 0x0C + +#define SPI_MODE_MASK 0x0C  // CPOL = bit 3, CPHA = bit 2 on SPCR +#define SPI_CLOCK_MASK 0x03  // SPR1 = bit 1, SPR0 = bit 0 on SPCR +#define SPI_2XCLOCK_MASK 0x01  // SPI2X = bit 0 on SPSR + +class SPIClass { +public: +  inline static byte transfer(byte _data); + +  // SPI Configuration methods + +  inline static void attachInterrupt(); +  inline static void detachInterrupt(); // Default + +  static void begin(); // Default +  static void end(); + +  static void setBitOrder(uint8_t); +  static void setDataMode(uint8_t); +  static void setClockDivider(uint8_t); +}; + +extern SPIClass SPI; + +byte SPIClass::transfer(byte _data) { +  SPDR = _data; +  while (!(SPSR & _BV(SPIF))) +    ; +  return SPDR; +} + +void SPIClass::attachInterrupt() { +  SPCR |= _BV(SPIE); +} + +void SPIClass::detachInterrupt() { +  SPCR &= ~_BV(SPIE); +} + +#endif | 
