00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "pins_arduino.h"
00012 #include "SPI.h"
00013
00014 SPIClass SPI;
00015
00016 void SPIClass::begin() {
00017
00018
00019
00020
00021
00022
00023 pinMode(SCK, OUTPUT);
00024 pinMode(MOSI, OUTPUT);
00025 pinMode(SS, OUTPUT);
00026
00027 digitalWrite(SCK, LOW);
00028 digitalWrite(MOSI, LOW);
00029 digitalWrite(SS, HIGH);
00030
00031
00032
00033
00034 SPCR |= _BV(MSTR);
00035 SPCR |= _BV(SPE);
00036 }
00037
00038 void SPIClass::end() {
00039 SPCR &= ~_BV(SPE);
00040 }
00041
00042 void SPIClass::setBitOrder(uint8_t bitOrder)
00043 {
00044 if(bitOrder == LSBFIRST) {
00045 SPCR |= _BV(DORD);
00046 } else {
00047 SPCR &= ~(_BV(DORD));
00048 }
00049 }
00050
00051 void SPIClass::setDataMode(uint8_t mode)
00052 {
00053 SPCR = (SPCR & ~SPI_MODE_MASK) | mode;
00054 }
00055
00056 void SPIClass::setClockDivider(uint8_t rate)
00057 {
00058 SPCR = (SPCR & ~SPI_CLOCK_MASK) | (rate & SPI_CLOCK_MASK);
00059 SPSR = (SPSR & ~SPI_2XCLOCK_MASK) | ((rate >> 2) & SPI_2XCLOCK_MASK);
00060 }
00061