AvrIO  1.4.5
Bibliothèque C modulaire pour ATMEL AVR
spi.h
1 
21 #ifndef _AVRIO_SPI_H_
22 #define _AVRIO_SPI_H_
23 
24 #include <avrio/defs.h>
25 
26 __BEGIN_C_DECLS
27  /* ======================================================================== */
69 /* constants ================================================================ */
70 #define SPI_CPHA 0x01
71 #define SPI_CPOL 0x02
72 #define SPI_REG_RW_BIT 7
78 typedef enum {
79 
80  SPI_DIV2 = 0x04,
81  SPI_DIV4 = 0x00,
82  SPI_DIV8 = 0x05,
83  SPI_DIV16 = 0x01,
84  SPI_DIV32 = 0x06,
85  SPI_DIV64 = 0x02,
86  SPI_DIV128 = 0x03
88 } eSpiFclkDiv;
89 
90 
105 typedef enum {
106  eSpiMode0 = (0|0),
107  eSpiMode1 = (0|SPI_CPHA),
108  eSpiMode2 = (SPI_CPOL|0),
109  eSpiMode3 = (SPI_CPOL|SPI_CPHA),
111 } eSpiMode;
112 
117 typedef enum {
121 } eSpiBitOrder;
122 
123 /* internal public functions ================================================ */
134 void vSpiMasterInit (eSpiFclkDiv eFclkDiv);
135 
140 void vSpiSetMode (eSpiMode eMode);
141 
146 void vSpiSetBitOrder (eSpiBitOrder eOrder);
147 
158 uint8_t ucSpiMasterWriteRead (uint8_t ucByte);
159 
169 void vSpiMasterXfer (const uint8_t * tx_buffer, uint8_t tx_len, uint8_t *rx_buffer, uint8_t rx_len);
170 
179 uint8_t ucSpiMasterReadReg8 (uint8_t reg);
180 
187 void vSpiMasterWriteReg8 (uint8_t reg, uint8_t data);
188 
196 void vSpiMasterWriteRegBlock (uint8_t reg, const uint8_t * buf, uint8_t len);
197 
205 void vSpiMasterReadRegBlock (uint8_t reg, uint8_t * buf, uint8_t len);
206 
207 # if defined(__DOXYGEN__)
208  /*
209  * __DOXYGEN__ defined
210  * Partie documentation ne devant pas être compilée.
211  * =========================================================================
212  */
221  inline void vSpiMasterWrite (uint8_t ucByte);
222 
232  inline uint8_t ucSpiMasterRead (void);
233 
237  inline void vSpiSetSsAsInput (void);
238 
242  inline void vSpiSetSsAsOutput (void);
243 
247  inline void vSpiSetSs (void);
248 
252  inline void vSpiClearSs (void);
253 
257  inline void vSpiEnable (void);
258 
262  inline void vSpiDisable (void);
263 
267  inline void vSpiClearIF (void);
268 
273 # else
274  /*
275  * __DOXYGEN__ not defined
276  * Partie ne devant pas être documentée.
277  * =========================================================================
278  */
279 # include <avr/io.h>
280  // ---------------------------------------------------------------------------
281  INLINE void
282  vSpiClearIF (void) {
283  register uint8_t ucDummy __attribute__ ((unused));
284 
285  ucDummy = SPSR;
286  ucDummy = SPDR; // clear irq flag
287  }
288 
289  // ---------------------------------------------------------------------------
290  INLINE void
291  vSpiMasterWrite (uint8_t ucByte) {
292 
293  (void) ucSpiMasterWriteRead (ucByte);
294  }
295 
296  // ---------------------------------------------------------------------------
297  INLINE uint8_t
298  ucSpiMasterRead (void) {
299 
300  return ucSpiMasterWriteRead (0);
301  }
302 
303  // ---------------------------------------------------------------------------
304  INLINE void
305  vSpiEnable (void) {
306 
307  SPCR |= _BV(SPE);
308  vSpiClearIF ();
309  }
310 
311  // ---------------------------------------------------------------------------
312  INLINE void
313  vSpiDisable (void) {
314 
315  SPCR &= ~_BV(SPE);
316  }
317 
318 # include "avrio-config.h"
319 
320 # ifdef AVRIO_SPI_ENABLE
321 /* ========================================================================== */
322 # include "avrio-board-spi.h"
323 
324  // ---------------------------------------------------------------------------
325  INLINE void
326  vSpiSetSsAsInput (void) {
327 
328  vSpiBoardSetSsAsInput ();
329  }
330 
331  // ---------------------------------------------------------------------------
332  INLINE void
333  vSpiSetSsAsOutput (void) {
334 
335  vSpiBoardSetSsAsOutput ();
336  }
337 # endif /* AVRIO_SPI_ENABLE defined */
338 # endif /* __DOXYGEN__ not defined */
339 
340  /* ======================================================================== */
341 __END_C_DECLS
342 
343 /* ========================================================================== */
344 #endif /* _AVRIO_SPI_H_ not defined */
eSpiFclkDiv
Facteur de division de l&#39;horloge SPI.
Definition: spi.h:78
void vSpiDisable(void)
Invalide le bus SPI.
#define SPI_CPHA
Definition: spi.h:70
eSpiBitOrder
Ordre des bits.
Definition: spi.h:117
void vSpiSetMode(eSpiMode eMode)
Modification du mode de fonctionnement.
void vSpiSetBitOrder(eSpiBitOrder eOrder)
Modification de l&#39;ordre des bites.
void vSpiMasterXfer(const uint8_t *tx_buffer, uint8_t tx_len, uint8_t *rx_buffer, uint8_t rx_len)
Lecture/Ecriture d&#39;un bloc octets.
void vSpiSetSsAsOutput(void)
Configure la broche SS en sortie à l&#39;état haut.
void vSpiMasterWriteRegBlock(uint8_t reg, const uint8_t *buf, uint8_t len)
Ecriture d&#39;un bloc de registres.
uint8_t ucSpiMasterReadReg8(uint8_t reg)
Lecture d&#39;un registre 8 bits.
Definition: spi.h:82
Definition: spi.h:86
uint8_t ucSpiMasterWriteRead(uint8_t ucByte)
Transmission SPI.
void vSpiEnable(void)
Valide le bus SPI et remets à zéro le drapeau d&#39;interruption SPI.
void vSpiSetSsAsInput(void)
Configure la broche SS en entrée avec résistance de pull-up.
void vSpiMasterWriteReg8(uint8_t reg, uint8_t data)
Ecriture d&#39;un registre 8 bits.
Definition: spi.h:83
#define SPI_CPOL
Definition: spi.h:71
Definition: spi.h:81
void vSpiClearIF(void)
Remets à zéro le drapeau d&#39;interruption SPI.
eSpiMode
Mode SPI.
Definition: spi.h:105
void vSpiSetSs(void)
Affirme la broche SS (SS = 0 -> validé)
void vSpiMasterInit(eSpiFclkDiv eFclkDiv)
Initialise le module SPI en mode maître.
void vSpiMasterWrite(uint8_t ucByte)
Ecriture SPI.
void vSpiClearSs(void)
Désaffirme la broche SS (SS = 1 -> invalidé)
Definition: spi.h:84
Definition: spi.h:85
void vSpiMasterReadRegBlock(uint8_t reg, uint8_t *buf, uint8_t len)
Lecture d&#39;un bloc de registres.
#define _BV(n)
Renvoie un masque avec le bit de rang n à 1.
Definition: defs.h:76
uint8_t ucSpiMasterRead(void)
Lecture SPI.
Definition: spi.h:80