Xmega Application Note


spi_driver.h

Go to the documentation of this file.
00001 /* This file has been prepared for Doxygen automatic documentation generation.*/
00059 #ifndef SPI_DRIVER_H
00060 #define SPI_DRIVER_H
00061 
00062 #include "avr_compiler.h"
00063 
00064 /* Hardware defines */
00065 
00066 #define SPI_SS_bm             0x10 
00067 #define SPI_MOSI_bm           0x20 
00068 #define SPI_MISO_bm           0x40 
00069 #define SPI_SCK_bm            0x80 
00071 /* SPI master status code defines. */
00072 
00073 #define SPI_OK              0     
00074 #define SPI_INTERRUPTED     1     
00075 #define SPI_BUSY            2     
00079 typedef struct SPI_DataPacket
00080 {
00081         PORT_t *ssPort;                     
00082         uint8_t ssPinMask;                  
00083         const uint8_t *transmitData;        
00084         volatile uint8_t *receiveData;      
00085         volatile uint8_t bytesToTransceive; 
00086         volatile uint8_t bytesTransceived;  
00087         volatile bool complete;             
00088 } SPI_DataPacket_t;
00089 
00090 
00092 typedef struct SPI_Master
00093 {
00094         SPI_t *module;                
00095         PORT_t *port;                 
00096         bool interrupted;             
00097         SPI_DataPacket_t *dataPacket; 
00098 } SPI_Master_t;
00099 
00100 
00102 typedef struct SPI_Slave
00103 {
00104         SPI_t *module;      
00105         PORT_t *port;       
00106 } SPI_Slave_t;
00107 
00108 
00109 /* Definitions of macros. */
00110 
00111 
00120 #define SPI_MasterInterruptTransmissionComplete(_spi) ( (_spi)->dataPacket->complete )
00121 
00122 
00123 
00131 #define SPI_MasterSSLow(_port, _pinBM) ( (_port)->OUTCLR = (_pinBM) )
00132 
00133 
00134 
00142 #define SPI_MasterSSHigh(_port, _pinBM) ( (_port)->OUTSET = (_pinBM) )
00143 
00144 
00145 
00151 #define SPI_SlaveWriteByte(_spi, _data) ( (_spi)->module->DATA = (_data) )
00152 
00153 
00154 
00161 #define SPI_SlaveReadByte(_spi) ( (_spi)->module->DATA )
00162 
00163 
00164 
00171 #define SPI_SlaveDataAvailable(_spi) ( (_spi)->module->STATUS & SPI_IF_bm )
00172 
00173 
00174 /* Prototype functions. Documentation found in source file */
00175 
00176 void SPI_MasterInit(SPI_Master_t *spi,
00177                     SPI_t *module,
00178                     PORT_t *port,
00179                                         bool lsbFirst,
00180                     SPI_MODE_t mode,
00181                     SPI_INTLVL_t intLevel,
00182                     bool clk2x,
00183                     SPI_PRESCALER_t clockDivision);
00184 
00185 void SPI_SlaveInit(SPI_Slave_t *spi,
00186                    SPI_t *module,
00187                    PORT_t *port,
00188                    bool lsbFirst,
00189                    SPI_MODE_t mode,
00190                    SPI_INTLVL_t intLevel);
00191 
00192 void SPI_MasterCreateDataPacket(SPI_DataPacket_t *dataPacket,
00193                                 const uint8_t *transmitData,
00194                                 uint8_t *receiveData,
00195                                 uint8_t bytesToTransceive,
00196                                 PORT_t *ssPort,
00197                                 uint8_t ssPinMask);
00198 
00199 void SPI_MasterInterruptHandler(SPI_Master_t *spi);
00200 
00201 uint8_t SPI_MasterInterruptTransceivePacket(SPI_Master_t *spi,
00202                                             SPI_DataPacket_t *dataPacket);
00203 
00204 uint8_t SPI_MasterTransceiveByte(SPI_Master_t *spi, uint8_t TXdata);
00205 
00206 bool SPI_MasterTransceivePacket(SPI_Master_t *spi,
00207                                 SPI_DataPacket_t *dataPacket);
00208 
00209 #endif
@DOC_TITLE@
Generated on Mon Nov 2 13:52:24 2009 for AVR1309 Using the XMEGA SPI by doxygen 1.5.9