Soldered SD Card Arduino Library 1.0.0
Easily read and write files to and form the SD card breakout! A fork of the original SDFat library by Bill Greiman.
Loading...
Searching...
No Matches
SdSpiAvr.h
Go to the documentation of this file.
1
25#ifndef SdSpiAvr_h
26#define SdSpiAvr_h
27// Use of in-line for AVR to save flash.
28#define nop asm volatile("nop\n\t")
29//------------------------------------------------------------------------------
30inline void SdSpiArduinoDriver::begin(SdSpiConfig spiConfig)
31{
32 (void)spiConfig;
33 SPI.begin();
34}
35//------------------------------------------------------------------------------
37{
38 SPI.beginTransaction(m_spiSettings);
39}
40//------------------------------------------------------------------------------
42{
43 SPI.endTransaction();
44}
45//------------------------------------------------------------------------------
46inline uint8_t SdSpiArduinoDriver::receive()
47{
48 return SPI.transfer(0XFF);
49}
50//------------------------------------------------------------------------------
51inline uint8_t SdSpiArduinoDriver::receive(uint8_t *buf, size_t count)
52{
53 if (count == 0)
54 {
55 return 0;
56 }
57 uint8_t *pr = buf;
58 SPDR = 0XFF;
59 while (--count > 0)
60 {
61 while (!(SPSR & _BV(SPIF)))
62 {
63 }
64 uint8_t in = SPDR;
65 SPDR = 0XFF;
66 *pr++ = in;
67 // nops to optimize loop for 16MHz CPU 8 MHz SPI
68 nop;
69 nop;
70 }
71 while (!(SPSR & _BV(SPIF)))
72 {
73 }
74 *pr = SPDR;
75 return 0;
76}
77//------------------------------------------------------------------------------
78inline void SdSpiArduinoDriver::send(uint8_t data)
79{
80 SPI.transfer(data);
81}
82//------------------------------------------------------------------------------
83inline void SdSpiArduinoDriver::send(const uint8_t *buf, size_t count)
84{
85 if (count == 0)
86 {
87 return;
88 }
89 SPDR = *buf++;
90 while (--count > 0)
91 {
92 uint8_t b = *buf++;
93 while (!(SPSR & (1 << SPIF)))
94 {
95 }
96 SPDR = b;
97 // nops to optimize loop for 16MHz CPU 8 MHz SPI
98 nop;
99 nop;
100 }
101 while (!(SPSR & (1 << SPIF)))
102 {
103 }
104}
105#endif // SdSpiAvr_h
void send(uint8_t data)
Definition SdSpiArtemis.cpp:63
SPISettings m_spiSettings
Definition SdSpiArduinoDriver.h:88
uint8_t receive()
Definition SdSpiArtemis.cpp:51
void activate()
Definition SdSpiArtemis.cpp:28
void begin(SdSpiConfig spiConfig)
Definition SdSpiArtemis.cpp:33
void deactivate()
Definition SdSpiArtemis.cpp:46
SPI card configuration.
Definition SdSpiDriver.h:112