123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- #ifndef HAL_I2C_H
- #define HAL_I2C_H
- #if (HAL_USE_I2C == TRUE) || defined(__DOXYGEN__)
- #define I2C_NO_ERROR 0x00
- #define I2C_BUS_ERROR 0x01
- #define I2C_ARBITRATION_LOST 0x02
- #define I2C_ACK_FAILURE 0x04
- #define I2C_OVERRUN 0x08
- #define I2C_PEC_ERROR 0x10
- #define I2C_TIMEOUT 0x20
- #define I2C_SMB_ALERT 0x40
- #define I2C_ISR_LIMIT 0x80
- #if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
- #define I2C_USE_MUTUAL_EXCLUSION TRUE
- #endif
- typedef enum {
- I2C_UNINIT = 0,
- I2C_STOP = 1,
- I2C_READY = 2,
- I2C_ACTIVE_TX = 3,
- I2C_ACTIVE_RX = 4,
- I2C_LOCKED = 5
- } i2cstate_t;
- #include "hal_i2c_lld.h"
- #define _i2c_wakeup_isr(i2cp) do { \
- osalSysLockFromISR(); \
- osalThreadResumeI(&(i2cp)->thread, MSG_OK); \
- osalSysUnlockFromISR(); \
- } while(0)
- #define _i2c_wakeup_error_isr(i2cp) do { \
- osalSysLockFromISR(); \
- osalThreadResumeI(&(i2cp)->thread, MSG_RESET); \
- osalSysUnlockFromISR(); \
- } while(0)
- #define i2cMasterTransmit(i2cp, addr, txbuf, txbytes, rxbuf, rxbytes) \
- (i2cMasterTransmitTimeout(i2cp, addr, txbuf, txbytes, rxbuf, rxbytes, \
- TIME_INFINITE))
- #define i2cMasterReceive(i2cp, addr, rxbuf, rxbytes) \
- (i2cMasterReceiveTimeout(i2cp, addr, rxbuf, rxbytes, TIME_INFINITE))
- #ifdef __cplusplus
- extern "C" {
- #endif
- void i2cInit(void);
- void i2cObjectInit(I2CDriver *i2cp);
- void i2cStart(I2CDriver *i2cp, const I2CConfig *config);
- void i2cStop(I2CDriver *i2cp);
- void i2cSoftStop(I2CDriver *i2cp);
- i2cflags_t i2cGetErrors(I2CDriver *i2cp);
- msg_t i2cMasterTransmitTimeout(I2CDriver *i2cp,
- i2caddr_t addr,
- const uint8_t *txbuf, size_t txbytes,
- uint8_t *rxbuf, size_t rxbytes,
- sysinterval_t timeout);
- msg_t i2cMasterReceiveTimeout(I2CDriver *i2cp,
- i2caddr_t addr,
- uint8_t *rxbuf, size_t rxbytes,
- sysinterval_t timeout);
- #if I2C_USE_MUTUAL_EXCLUSION == TRUE
- void i2cAcquireBus(I2CDriver *i2cp);
- void i2cReleaseBus(I2CDriver *i2cp);
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif
- #endif
|