aboutsummaryrefslogtreecommitdiff
path: root/libraries/SPI/SPI.h
diff options
context:
space:
mode:
authorThibaut VIARD <thibaut.viard@atmel.com>2011-06-21 00:20:43 +0200
committerThibaut VIARD <thibaut.viard@atmel.com>2011-06-21 00:20:43 +0200
commit0887b98f627500271b5ad8b3c4f6c7b90bc227ee (patch)
treeef8626954567ba22e392c68c8f3606416b07b5b5 /libraries/SPI/SPI.h
parent90c487402cefadb6a2aab907ab07075cbb759e34 (diff)
Moving all AVR specific libraries to hardware/avr
Diffstat (limited to 'libraries/SPI/SPI.h')
-rw-r--r--libraries/SPI/SPI.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/libraries/SPI/SPI.h b/libraries/SPI/SPI.h
new file mode 100644
index 0000000..79c89d4
--- /dev/null
+++ b/libraries/SPI/SPI.h
@@ -0,0 +1,70 @@
+/*
+ * 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