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 */
	);
}
Пример #2
0
// 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;
}