root / arduino-1.0 / libraries / SPI / SPI.h @ 58d82c77
History | View | Annotate | Download (1.57 KB)
1 |
/*
|
---|---|
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 |
#ifndef _SPI_H_INCLUDED
|
12 |
#define _SPI_H_INCLUDED
|
13 |
|
14 |
#include <stdio.h> |
15 |
#include <Arduino.h> |
16 |
#include <avr/pgmspace.h> |
17 |
|
18 |
#define SPI_CLOCK_DIV4 0x00 |
19 |
#define SPI_CLOCK_DIV16 0x01 |
20 |
#define SPI_CLOCK_DIV64 0x02 |
21 |
#define SPI_CLOCK_DIV128 0x03 |
22 |
#define SPI_CLOCK_DIV2 0x04 |
23 |
#define SPI_CLOCK_DIV8 0x05 |
24 |
#define SPI_CLOCK_DIV32 0x06 |
25 |
//#define SPI_CLOCK_DIV64 0x07
|
26 |
|
27 |
#define SPI_MODE0 0x00 |
28 |
#define SPI_MODE1 0x04 |
29 |
#define SPI_MODE2 0x08 |
30 |
#define SPI_MODE3 0x0C |
31 |
|
32 |
#define SPI_MODE_MASK 0x0C // CPOL = bit 3, CPHA = bit 2 on SPCR |
33 |
#define SPI_CLOCK_MASK 0x03 // SPR1 = bit 1, SPR0 = bit 0 on SPCR |
34 |
#define SPI_2XCLOCK_MASK 0x01 // SPI2X = bit 0 on SPSR |
35 |
|
36 |
class SPIClass { |
37 |
public:
|
38 |
inline static byte transfer(byte _data); |
39 |
|
40 |
// SPI Configuration methods
|
41 |
|
42 |
inline static void attachInterrupt(); |
43 |
inline static void detachInterrupt(); // Default |
44 |
|
45 |
static void begin(); // Default |
46 |
static void end(); |
47 |
|
48 |
static void setBitOrder(uint8_t); |
49 |
static void setDataMode(uint8_t); |
50 |
static void setClockDivider(uint8_t); |
51 |
}; |
52 |
|
53 |
extern SPIClass SPI;
|
54 |
|
55 |
byte SPIClass::transfer(byte _data) { |
56 |
SPDR = _data; |
57 |
while (!(SPSR & _BV(SPIF)))
|
58 |
; |
59 |
return SPDR;
|
60 |
} |
61 |
|
62 |
void SPIClass::attachInterrupt() {
|
63 |
SPCR |= _BV(SPIE); |
64 |
} |
65 |
|
66 |
void SPIClass::detachInterrupt() {
|
67 |
SPCR &= ~_BV(SPIE); |
68 |
} |
69 |
|
70 |
#endif
|