You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.6 KiB
70 lines
1.6 KiB
/* |
|
* 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 <WProgram.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
|
|
|