I2C. Code cleanups.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/i2c_dev@3056 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
350ae0a1a9
commit
f3e571839b
|
@ -96,11 +96,7 @@ typedef enum {
|
||||||
/**
|
/**
|
||||||
* @brief I2C notification callback type.
|
* @brief I2C notification callback type.
|
||||||
* @details This callback invoked when byte transfer finish event occurs,
|
* @details This callback invoked when byte transfer finish event occurs,
|
||||||
* No matter sending or reading. This function designed
|
* No matter sending or reading.
|
||||||
* for sending (re)start or stop events to I2C bus from user level.
|
|
||||||
*
|
|
||||||
* If callback function is set to NULL - driver atomaticcaly
|
|
||||||
* generate stop condition after the transfer finish.
|
|
||||||
*
|
*
|
||||||
* @param[in] i2cp pointer to the @p I2CDriver object triggering the
|
* @param[in] i2cp pointer to the @p I2CDriver object triggering the
|
||||||
* callback
|
* callback
|
||||||
|
@ -135,8 +131,7 @@ typedef uint8_t i2cblock_t;
|
||||||
struct I2CSlaveConfig{
|
struct I2CSlaveConfig{
|
||||||
/**
|
/**
|
||||||
* @brief Callback pointer.
|
* @brief Callback pointer.
|
||||||
* @note Transfer finished callback. Invoke when all data transferred, or
|
* @note Transfer finished callback. Invoke when all data transferred.
|
||||||
* by DMA buffer events
|
|
||||||
* If set to @p NULL then the callback is disabled.
|
* If set to @p NULL then the callback is disabled.
|
||||||
*/
|
*/
|
||||||
i2ccallback_t id_callback;
|
i2ccallback_t id_callback;
|
||||||
|
@ -154,8 +149,8 @@ struct I2CSlaveConfig{
|
||||||
i2cblock_t *txbuf; /*!< Pointer to transmit buffer.*/
|
i2cblock_t *txbuf; /*!< Pointer to transmit buffer.*/
|
||||||
uint16_t slave_addr; /*!< Slave device address.*/
|
uint16_t slave_addr; /*!< Slave device address.*/
|
||||||
uint8_t nbit_addr; /*!< Length of address (must be 7 or 10).*/
|
uint8_t nbit_addr; /*!< Length of address (must be 7 or 10).*/
|
||||||
i2cflags_t errors;
|
i2cflags_t errors; /*!< Error flags.*/
|
||||||
i2cflags_t flags;
|
i2cflags_t flags; /*!< State flags.*/
|
||||||
/* Status Change @p EventSource.*/
|
/* Status Change @p EventSource.*/
|
||||||
EventSource sevent;
|
EventSource sevent;
|
||||||
};
|
};
|
||||||
|
@ -212,7 +207,7 @@ struct I2CSlaveConfig{
|
||||||
* - Callback invocation.
|
* - Callback invocation.
|
||||||
* - Waiting thread wakeup, if any.
|
* - Waiting thread wakeup, if any.
|
||||||
* - Driver state transitions.
|
* - Driver state transitions.
|
||||||
* .
|
*
|
||||||
* @note This macro is meant to be used in the low level drivers
|
* @note This macro is meant to be used in the low level drivers
|
||||||
* implementation only.
|
* implementation only.
|
||||||
*
|
*
|
||||||
|
@ -236,7 +231,7 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
void i2cInit(void);
|
void i2cInit(void);
|
||||||
void i2cObjectInit(I2CDriver *i2cp);
|
void i2cObjectInit(I2CDriver *i2cp);
|
||||||
void i2cStart(I2CDriver *i2cp, I2CConfig *config);
|
void i2cStart(I2CDriver *i2cp, const I2CConfig *config);
|
||||||
void i2cStop(I2CDriver *i2cp);
|
void i2cStop(I2CDriver *i2cp);
|
||||||
void i2cMasterTransmit(I2CDriver *i2cp, I2CSlaveConfig *i2cscfg);
|
void i2cMasterTransmit(I2CDriver *i2cp, I2CSlaveConfig *i2cscfg);
|
||||||
void i2cMasterReceive(I2CDriver *i2cp, I2CSlaveConfig *i2cscfg);
|
void i2cMasterReceive(I2CDriver *i2cp, I2CSlaveConfig *i2cscfg);
|
||||||
|
|
|
@ -157,15 +157,11 @@ struct I2CDriver{
|
||||||
/**
|
/**
|
||||||
* @brief Current configuration data.
|
* @brief Current configuration data.
|
||||||
*/
|
*/
|
||||||
I2CConfig *id_config;
|
const I2CConfig *id_config;
|
||||||
/**
|
/**
|
||||||
* @brief Current slave configuration data.
|
* @brief Current slave configuration data.
|
||||||
*/
|
*/
|
||||||
I2CSlaveConfig *id_slave_config;
|
I2CSlaveConfig *id_slave_config;
|
||||||
/**
|
|
||||||
* @brief RW-bit sent to slave.
|
|
||||||
*/
|
|
||||||
uint8_t rw_bit;
|
|
||||||
|
|
||||||
uint8_t slave_addr1; // 7-bit address of the slave
|
uint8_t slave_addr1; // 7-bit address of the slave
|
||||||
uint8_t slave_addr2; // used in 10-bit address mode
|
uint8_t slave_addr2; // used in 10-bit address mode
|
||||||
|
@ -194,7 +190,7 @@ struct I2CDriver{
|
||||||
*/
|
*/
|
||||||
#define i2c_lld_wait_bus_free(i2cp) { \
|
#define i2c_lld_wait_bus_free(i2cp) { \
|
||||||
uint32_t tmo = 0xffff; \
|
uint32_t tmo = 0xffff; \
|
||||||
while((i2cp->id_i2c->SR2 & I2C_SR2_BUSY) && tmo--) \
|
while((i2cp->id_i2c->SR2 & I2C_SR2_BUSY) && tmo--) \
|
||||||
; \
|
; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ void i2cObjectInit(I2CDriver *i2cp) {
|
||||||
*
|
*
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
void i2cStart(I2CDriver *i2cp, I2CConfig *config) {
|
void i2cStart(I2CDriver *i2cp, const I2CConfig *config) {
|
||||||
|
|
||||||
chDbgCheck((i2cp != NULL) && (config != NULL), "i2cStart");
|
chDbgCheck((i2cp != NULL) && (config != NULL), "i2cStart");
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
#include "max1236.h"
|
#include "max1236.h"
|
||||||
|
|
||||||
/* I2C1 */
|
/* I2C1 */
|
||||||
static I2CConfig i2cfg1 = {
|
static const I2CConfig i2cfg1 = {
|
||||||
OPMODE_I2C,
|
OPMODE_I2C,
|
||||||
100000,
|
100000,
|
||||||
STD_DUTY_CYCLE,
|
STD_DUTY_CYCLE,
|
||||||
|
@ -19,7 +19,7 @@ static I2CConfig i2cfg1 = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* I2C2 */
|
/* I2C2 */
|
||||||
static I2CConfig i2cfg2 = {
|
static const I2CConfig i2cfg2 = {
|
||||||
OPMODE_I2C,
|
OPMODE_I2C,
|
||||||
100000,
|
100000,
|
||||||
STD_DUTY_CYCLE,
|
STD_DUTY_CYCLE,
|
||||||
|
@ -36,14 +36,7 @@ void I2CInit_pns(void){
|
||||||
i2cInit();
|
i2cInit();
|
||||||
|
|
||||||
i2cStart(&I2CD1, &i2cfg1);
|
i2cStart(&I2CD1, &i2cfg1);
|
||||||
while(I2CD1.id_state != I2C_READY){ // wait ready status
|
|
||||||
chThdSleepMilliseconds(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
i2cStart(&I2CD2, &i2cfg2);
|
i2cStart(&I2CD2, &i2cfg2);
|
||||||
while(I2CD2.id_state != I2C_READY){ // wait ready status
|
|
||||||
chThdSleepMilliseconds(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* tune ports for I2C1*/
|
/* tune ports for I2C1*/
|
||||||
palSetPadMode(IOPORT2, 6, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
|
palSetPadMode(IOPORT2, 6, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
|
||||||
|
|
Loading…
Reference in New Issue