- Timestamp:
- Apr 30, 2016, 11:29:25 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
rtos_arduino/trunk/arduino_lib/hardware/arduino/samd/libraries/SPI/SPI.h
r136 r224 14 14 #include "variant.h" 15 15 #include "wiring_constants.h" 16 #include <Arduino.h> 17 18 //#define LSBFIRST 0 //already defined in wiring_constants.h 19 //#define MSBFIRST 1 16 20 17 21 #define SPI_MODE0 0x02 … … 20 24 #define SPI_MODE3 0x01 21 25 26 27 #define SPI_CLOCK_DIV2 6 //8 MHz 28 #define SPI_CLOCK_DIV4 12 //4 MHz 29 #define SPI_CLOCK_DIV8 24 //2 MHz 30 #define SPI_CLOCK_DIV16 48 //1 MHz 31 #define SPI_CLOCK_DIV32 96 //500 KHz 32 #define SPI_CLOCK_DIV64 192 //250 KHz 33 #define SPI_CLOCK_DIV128 384 //125 KHz 34 35 #ifndef intStatus 36 #define intStatus() __intStatus() 37 static inline unsigned char __intStatus(void) __attribute__((always_inline, unused)); 38 static inline unsigned char __intStatus(void) { 39 unsigned int primask, faultmask; 40 asm volatile ("mrs %0, primask" : "=r" (primask)); 41 if (primask) return 0; 42 asm volatile ("mrs %0, faultmask" : "=r" (faultmask)); 43 if (faultmask) return 0; 44 return 1; 45 } 46 #endif 47 48 class SPISettings { 49 public: 50 SPISettings(uint32_t clock, uint8_t bitOrder, uint8_t dataMode) 51 { 52 interface_clock = clock; 53 bit_order = bitOrder; 54 data_mode = dataMode; 55 56 /*Serial.print("clock: "); 57 Serial.println(interface_clock); 58 Serial.print("bit order: "); 59 Serial.println(bit_order); 60 Serial.print("data mode: "); 61 Serial.println(data_mode);*/ 62 } 63 64 SPISettings(void) 65 { 66 interface_clock = 4000000; 67 bit_order = MSBFIRST; 68 data_mode = SPI_MODE0; 69 70 /*Serial.print("clock: "); 71 Serial.println(interface_clock); 72 Serial.print("bit order: "); 73 Serial.println(bit_order); 74 Serial.print("data mode: "); 75 Serial.println(data_mode);*/ 76 } 77 private: 78 uint32_t interface_clock; 79 uint8_t bit_order; 80 uint8_t data_mode; 81 82 friend class SPIClass; 83 }; 84 85 22 86 class SPIClass { 23 87 public: … … 25 89 26 90 byte transfer(uint8_t data); 27 91 void transfer(void *data, size_t count); 92 byte read(void); 93 uint16_t transfer16(uint16_t data); 94 void write(uint8_t data); 28 95 // SPI Configuration methods 96 void beginTransaction(SPISettings settings); 97 void endTransaction(void); 98 29 99 void attachInterrupt(); 30 100 void detachInterrupt(); 101 102 void usingInterrupt(uint8_t interruptNumber); 31 103 32 104 void begin(); 105 void beginSlave(); 33 106 void end(); 34 107 35 108 void setBitOrder(BitOrder order); 36 109 void setDataMode(uint8_t uc_mode); 37 void setClockDivider(uint 8_t uc_div);110 void setClockDivider(uint16_t uc_div); 38 111 39 112 private: … … 42 115 uint8_t _uc_pinMosi; 43 116 uint8_t _uc_pinSCK; 117 uint8_t interruptMode; 118 uint32_t interruptMask; 119 uint8_t interruptSave; 120 uint8_t inTransactionFlag; 44 121 }; 45 122
Note:
See TracChangeset
for help on using the changeset viewer.