AvrIO  1.4.5
Bibliothèque C modulaire pour ATMEL AVR
twi.h
1 
18 #ifndef _AVRIO_TWI_H_
19 #define _AVRIO_TWI_H_
20 
21 #include <avrio/defs.h>
22 #include <avrio/queue.h>
23 #include <avrio/twi_addr.h>
24 
25 __BEGIN_C_DECLS
26  /* ======================================================================== */
87  /* constants ============================================================== */
94  typedef enum {
95 
98  /* Codes d'état */
107  /* Codes Erreur */
119 } eTwiStatus;
120 
121 /* types ==================================================================== */
126 typedef uint8_t xTwiDeviceAddr;
127 #define TWI_DEVICE_ADDR_SIZEOF 1
128 
133 typedef uint8_t xTwiLength;
134 #define TWI_LENGTH_SIZEOF 1
135 
140 typedef struct xTwiFrame {
141  uint8_t * pxData;
144 } xTwiFrame;
145 
146 /* internal public functions ================================================ */
153 void vTwiInit (void);
154 
158 bool bTwiIsBusy (void);
159 
160 /*-----------------------------Mode Maître------------------------------------*/
174 /* types ==================================================================== */
179 typedef int8_t xTwiId;
180 #define TWI_ID_SIZEOF 1
181 
182 /* internal public functions ================================================ */
183 
194 eTwiStatus eTwiSend (xTwiFrame * pxFrame);
195 
211 eTwiStatus eTwiWrite (xTwiDeviceAddr xDeviceAddr, uint8_t ucByte);
212 
223 eTwiStatus eTwiReceive (xTwiFrame * pxFrame);
224 
240 eTwiStatus eTwiRead (xTwiDeviceAddr xDeviceAddr, uint8_t * pucByte);
241 
250 eTwiStatus eTwiMem8Write (uint8_t ucFisrtByte, xTwiFrame * pxFrame);
251 
260 eTwiStatus eTwiMem8Read (uint8_t ucFisrtByte, xTwiFrame * pxFrame);
261 
269 eTwiStatus eTwiMem16Write (uint16_t usMemAddr, xTwiFrame * pxFrame);
270 
278 eTwiStatus eTwiMem16Read (uint16_t usMemAddr, xTwiFrame * pxFrame);
279 
280 /*=============================================================================
281  | Sous interruption uniquement |
282  =============================================================================*/
283 
302 xTwiId xTwiTrySend (const xTwiFrame * pxFrame);
303 
323 xTwiId xTwiTryReceive (xTwiFrame * pxFrame);
324 
339 eTwiStatus eTwiGetStatus (xTwiId xFrameId, xTwiLength * pxLength);
340 
351 
356 /*----------------------------Mode Esclave------------------------------------*/
376 /* constants ================================================================ */
384 #define TWI_GENCALL 0x01
385 
386 /* internal public functions ================================================ */
406 eTwiStatus eTwiSlaveRxCB (xQueue * pxRxPayload, eTwiStatus eStatus);
407 
422 eTwiStatus eTwiSlaveTxCB (xQueue * pxTxPayload, eTwiStatus eStatus);
423 
424 #if defined(__DOXYGEN__)
425 /*
426  * __DOXYGEN__ defined
427  * Partie documentation ne devant pas être compilée.
428  * =============================================================================
429  */
430 /* macros =================================================================== */
438 #define TWIFRAME_DECLARE(xVarName, xBufferSize)
439 
447 #define TWIFRAME_STATIC_DECLARE(xVarName, xBufferSize)
448 
449 /* inline public functions ================================================== */
458 void vTwiSetDeviceAddress (xTwiDeviceAddr xMyDeviceAddr);
459 
460 /*--------------------------Fin Mode Esclave----------------------------------*/
466 /*-----------------------------Mode Maître------------------------------------*/
476 eTwiStatus eTwiSetSpeed (uint16_t usSpeed);
477 
483 #else
484 /*
485  * __DOXYGEN__ not defined
486  * Partie ne devant pas être documentée.
487  * =============================================================================
488  */
489 #include "avrio-config.h"
490 
491 #ifdef AVRIO_TWI_ENABLE
492 #include "avrio-board-twi.h"
493 
494 /* macros =================================================================== */
495 // ----------------------------------------------------------------------------
496 #define TWIFRAME_DECLARE(__name,__size) \
497  uint8_t __name ##Buffer[__size]; \
498  xTwiFrame __name = { .pxData = __name ##Buffer, \
499  .xLen = 0, \
500  .xAddr = 0 }
501 // ----------------------------------------------------------------------------
502 #define TWIFRAME_STATIC_DECLARE(__name,__size) \
503  static uint8_t __name ##Buffer[__size]; \
504  static xTwiFrame __name = { .pxData = __name ##Buffer }
505 
506 /* inline public functions ================================================== */
507 #include <avr/io.h>
508  /*----------------------------Mode Maître-----------------------------------*/
509 
510  // ----------------------------------------------------------------------------
511 __STATIC_ALWAYS_INLINE (eTwiStatus eTwiSetSpeed (uint16_t usSpeed)) {
512  uint16_t usRatio;
513 
514 #ifdef TWPS0
515  TWSR &= ~(_BV (TWPS0) | _BV (TWPS1));
516 #endif
517 
518  usRatio = ((AVRIO_CPU_FREQ / 1000UL) / usSpeed);
519  if ((usRatio < 16) || (usRatio > (255 * 2 + 16))) {
520 
522  }
523  TWBR = (uint8_t) (usRatio - 16) / 2;
524  return TWI_SUCCESS;
525 }
526 
527  /*---------------------------Mode Esclave-----------------------------------*/
528 
529  // ----------------------------------------------------------------------------
530 __STATIC_ALWAYS_INLINE (void
531  vTwiSetDeviceAddress (xTwiDeviceAddr xMyDeviceAddr)) {
532 
533  TWAR = xMyDeviceAddr;
534  TWCR = _BV (TWINT) | _BV (TWEN) | _BV (TWIE) | _BV (TWEA);
535 }
536 #endif /* AVRIO_TWI_ENABLE defined */
537 
538 #endif /* __DOXYGEN__ not defined */
539 /* ========================================================================== */
540 __END_C_DECLS
541 #endif /* _AVRIO_TWI_H_ */
eTwiStatus eTwiWrite(xTwiDeviceAddr xDeviceAddr, uint8_t ucByte)
Envoi d&#39;un octet en mode maître.
eTwiStatus eTwiSlaveRxCB(xQueue *pxRxPayload, eTwiStatus eStatus)
Gestionnaire de réception esclave.
void vTwiSetDeviceAddress(xTwiDeviceAddr xMyDeviceAddr)
Modifie l&#39;adresse de notre circuit en mode esclave.
uint8_t xTwiLength
Longueur d&#39;une trame.
Definition: twi.h:133
void vTwiInit(void)
Initialise le module.
xTwiId xTwiTrySend(const xTwiFrame *pxFrame)
Emission non bloquante d&#39;un message en mode maître.
bool bTwiIsBusy(void)
Indique si le module est occupé
eTwiStatus eTwiSetSpeed(uint16_t usSpeed)
Modifie la vitesse d&#39;horloge du bus en mode maître.
xTwiDeviceAddr xAddr
Definition: twi.h:143
Pile FIFO.
eTwiStatus eTwiMem8Write(uint8_t ucFisrtByte, xTwiFrame *pxFrame)
Ecriture dans une mémoire I2C (Adresse mémoire 8 bits)
eTwiStatus
Codes d&#39;erreur et d&#39;état.
Definition: twi.h:94
eTwiStatus eTwiRead(xTwiDeviceAddr xDeviceAddr, uint8_t *pucByte)
Réception d&#39;un octet en mode maître.
eTwiStatus eTwiMem8Read(uint8_t ucFisrtByte, xTwiFrame *pxFrame)
Lecture dans une mémoire I2C (Adresse mémoire 8 bits)
eTwiStatus eTwiReceive(xTwiFrame *pxFrame)
Réception d&#39;un message en mode maître.
uint8_t * pxData
Definition: twi.h:141
xTwiLength xLen
Definition: twi.h:142
eTwiStatus eTwiGetRxFrame(xTwiFrame *pxFrame)
Lecture d&#39;une trame reçue.
xTwiId xTwiTryReceive(xTwiFrame *pxFrame)
Réception non bloquante d&#39;un message en mode maître.
eTwiStatus eTwiSlaveTxCB(xQueue *pxTxPayload, eTwiStatus eStatus)
Gestionnaire de transmission esclave.
Trame I2C.
Definition: twi.h:140
eTwiStatus eTwiMem16Read(uint16_t usMemAddr, xTwiFrame *pxFrame)
Lecture dans une mémoire I2C (Adresse mémoire 16 bits)
eTwiStatus eTwiGetStatus(xTwiId xFrameId, xTwiLength *pxLength)
Lecture de l&#39;état du module maître.
#define _BV(n)
Renvoie un masque avec le bit de rang n à 1.
Definition: defs.h:76
eTwiStatus eTwiSend(xTwiFrame *pxFrame)
Emission d&#39;un message en mode maître.
int8_t xTwiId
Identifiant d&#39;une trame.
Definition: twi.h:179
eTwiStatus eTwiMem16Write(uint16_t usMemAddr, xTwiFrame *pxFrame)
Ecriture dans une mémoire I2C (Adresse mémoire 16 bits)
uint8_t xTwiDeviceAddr
Adresse d&#39;un circuit sur le bus I2C.
Definition: twi.h:126