firmware  v0.1.2
Chromation Spectrometer Dev-Kit
SpiMaster.h
Go to the documentation of this file.
1 #ifndef _SPIMASTER_H
2 #define _SPIMASTER_H
3 #include <stdint.h>
4 #include "ReadWriteBits.h"
5 #include "Spi.h"
6 
7 #ifdef USE_FAKES
8 #include "Spi_faked.h"
9 /* #include "SpiMaster_faked.h" // no need for this yet */
10 #endif
11 
12 // ---Private---
13 //
14 // ---API (Go to the Doxygen documentation of this file)---
21 inline uint8_t SpiMasterXfrByte(uint8_t byte)
22 {
32  // select the SPI Slave
33  ClearBit(Spi_PortOutput, Spi_Ss);
34 
35  // load data reg with byte to send
36  *Spi_SPDR = byte;
37 
38  // wait for SPI transmission to complete
39  while(BitIsClear(Spi_SPSR, Spi_InterruptFlag));
40 
41  // unselect the SPI Slave
42  SetBit(Spi_PortOutput, Spi_Ss);
43 
44  // Clear the Spi_InterruptFlag by
45  // reading Spi_InterruptFlag while it is set
46  // then reading Spi_SPDR
47  return *Spi_SPDR;
48 }
49 
50 // ---API functions that call fakes when testing---
51 //
52 #ifdef USE_FAKES
53 #define ClearSpiInterruptFlag ClearSpiInterruptFlag_fake
54 #endif
55 inline void SpiMasterInit(void)
56 {
72  // Pin Ss: HIGH
73  SetBit(Spi_PortOutput, Spi_Ss);
74  // Pin Ss: output
75  SetBit(Spi_PortDirection, Spi_Ss);
76 
77  // Pin Miso: input
78  ClearBit(Spi_PortDirection, Spi_Miso);
79  // Pin Miso: enable pullup
80  SetBit(Spi_PortOutput, Spi_Miso);
81 
82  // Pin DataReady: input
83  ClearBit(Spi_PortDirection, Spi_DataReady);
84  // Pin DataReady: enable pullup
85  SetBit(Spi_PortOutput, Spi_DataReady);
86 
87  // Pin Mosi: output
88  SetBit(Spi_PortDirection, Spi_Mosi);
89 
90  // Pin Sck: output
91  SetBit(Spi_PortDirection, Spi_Sck);
92 
93  // Be the SPI Master
94  SetBit(Spi_SPCR, Spi_MasterSlaveSelect);
95 
96  // Set SPI clock to 1.25MHz
97  SetBit (Spi_SPCR, Spi_ClockBit0);
98  ClearBit(Spi_SPCR, Spi_ClockBit1);
99  SetBit (Spi_SPSR, Spi_DoubleClock);
100 
102 
104 }
105 #ifdef USE_FAKES
106 #undef ClearSpiInterruptFlag
107 #endif
108 
109 #endif // _SPIMASTER_H
void SpiMasterInit(void)
Definition: SpiMaster.h:55
uint8_t SpiMasterXfrByte(uint8_t byte)
Definition: SpiMaster.h:21
spi_ptr Spi_SPSR
SPI Status Register.
spi_ptr Spi_SPCR
SPI Control Register.
spi_ptr Spi_SPDR
SPI Data Register.
Spi.h declares SPI hardware types and variables common to the SPI Master and SPI Slave.
void _EnableSpiModule(void)
Definition: Spi.h:75
spi_reg Spi_PortOutput
Atmel PORT.
spi_reg Spi_PortDirection
Atmel DDR.
void ClearSpiInterruptFlag(void)
Definition: Spi.h:116