uint8_t TM_I2C_DMA_Transmitting(I2C_TypeDef* I2Cx) { /* Get I2C settings */ TM_I2C_DMA_INT_t* Settings = TM_I2C_DMA_INT_GetSettings(I2Cx); /* Check if TX or RX DMA are working */ return ( Settings->RX_Stream->NDTR || /*!< RX is working */ Settings->TX_Stream->NDTR || /*!< TX is working */ I2C_IS_BUSY(I2Cx) /*!< I2C is busy */ ); }
// inicializa I2C na UCB0 // P3.2 e P3.1 I2C_STATUS i2c_init_module(void){ // desable i2c module UCB0CTL1 = UCSWRST; // config ports I2C_PORTS_CFG(); // clock MSCLK UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2CMODE UCB0CTL1 = UCSSEL1 | UCSWRST; // baudrate // fbaud = FBRclk / UCBRx // 0x640 = 10kbps // 0xA0 = 100kbps // 0x28 = 400kbps #ifdef I2C_LOW_SPEED // 10k UCB0BR0 = 0x40; UCB0BR1 = 0x06; #else #ifdef I2C_HIGH_SPEED // 400k UCB0BR0 = 0xA0; UCB0BR1 = 0x00; #else // 100k UCB0BR0 = 0x28 UCB0BR1 = 0x00; #endif #endif // libera o reset UCB0CTL1 &= ~UCSWRST; if(I2C_IS_BUSY()){ I2C_SET_SLAVE_ADDR(0); I2C_START_TRANSMIT(); I2C_GENERATE_NACK(); I2C_GENERATE_STOP(); } #ifdef __I2C_TEST delayms(10); UCB0I2CSA = 0x68; I2C_START_TRANSMIT(); I2C_GENERATE_STOP(); #endif // __I2C_TEST return I2C_STAT_DONE; }