root / arduino-1.0 / libraries / SPI / SPI.cpp @ 58d82c77
History | View | Annotate | Download (1.47 KB)
1 | 58d82c77 | Tom Mullins | /*
|
---|---|---|---|
2 | * Copyright (c) 2010 by Cristian Maglie <c.maglie@bug.st>
|
||
3 | * SPI Master library for arduino.
|
||
4 | *
|
||
5 | * This file is free software; you can redistribute it and/or modify
|
||
6 | * it under the terms of either the GNU General Public License version 2
|
||
7 | * or the GNU Lesser General Public License version 2.1, both as
|
||
8 | * published by the Free Software Foundation.
|
||
9 | */
|
||
10 | |||
11 | #include "pins_arduino.h" |
||
12 | #include "SPI.h" |
||
13 | |||
14 | SPIClass SPI; |
||
15 | |||
16 | void SPIClass::begin() {
|
||
17 | // Set direction register for SCK and MOSI pin.
|
||
18 | // MISO pin automatically overrides to INPUT.
|
||
19 | // When the SS pin is set as OUTPUT, it can be used as
|
||
20 | // a general purpose output port (it doesn't influence
|
||
21 | // SPI operations).
|
||
22 | |||
23 | pinMode(SCK, OUTPUT); |
||
24 | pinMode(MOSI, OUTPUT); |
||
25 | pinMode(SS, OUTPUT); |
||
26 | |||
27 | digitalWrite(SCK, LOW); |
||
28 | digitalWrite(MOSI, LOW); |
||
29 | digitalWrite(SS, HIGH); |
||
30 | |||
31 | // Warning: if the SS pin ever becomes a LOW INPUT then SPI
|
||
32 | // automatically switches to Slave, so the data direction of
|
||
33 | // the SS pin MUST be kept as OUTPUT.
|
||
34 | SPCR |= _BV(MSTR); |
||
35 | SPCR |= _BV(SPE); |
||
36 | } |
||
37 | |||
38 | void SPIClass::end() {
|
||
39 | SPCR &= ~_BV(SPE); |
||
40 | } |
||
41 | |||
42 | void SPIClass::setBitOrder(uint8_t bitOrder)
|
||
43 | { |
||
44 | if(bitOrder == LSBFIRST) {
|
||
45 | SPCR |= _BV(DORD); |
||
46 | } else {
|
||
47 | SPCR &= ~(_BV(DORD)); |
||
48 | } |
||
49 | } |
||
50 | |||
51 | void SPIClass::setDataMode(uint8_t mode)
|
||
52 | { |
||
53 | SPCR = (SPCR & ~SPI_MODE_MASK) | mode; |
||
54 | } |
||
55 | |||
56 | void SPIClass::setClockDivider(uint8_t rate)
|
||
57 | { |
||
58 | SPCR = (SPCR & ~SPI_CLOCK_MASK) | (rate & SPI_CLOCK_MASK); |
||
59 | SPSR = (SPSR & ~SPI_2XCLOCK_MASK) | ((rate >> 2) & SPI_2XCLOCK_MASK);
|
||
60 | } |