12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /*
- * 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
|