大家好!
项目中需要把I2C0做为slave,在中断中实现收发。把固件库Example中收、发两个中断例程放到一起,并没有正常工作。
不能多次读,读一次I2C就挂了。多次写正常
求一个能工作的例程!
下面是我用的代码
uint8_t g_offset, g_val = 0x35;
uint8_t g_Rx_Buf[160], g_cnt;
void I2C0_EventIRQ_Handler(void)
{
static uint8_t cnt = 0;
uint8_t dat_rx, dat_tx;
if(i2c_interrupt_flag_get(I2C0, I2C_INT_FLAG_ADDSEND)){
/* clear the ADDSEND bit */
i2c_interrupt_flag_clear(I2C0, I2C_INT_FLAG_ADDSEND);
}else if(i2c_interrupt_flag_get(I2C0, I2C_INT_FLAG_RBNE)){
/* if reception data register is not empty ,I2C0 will read a data from I2C_DATA */
dat_rx= i2c_data_receive(I2C0); // master Tx, slave Rx
} else if(i2c_interrupt_flag_get(I2C0, I2C_INT_FLAG_STPDET)){
/* clear the STPDET bit */
i2c_enable(I2C0);
} else if((i2c_interrupt_flag_get(I2C0, I2C_INT_FLAG_TBE))&&(!i2c_interrupt_flag_get(I2C0, I2C_INT_FLAG_AERR))){
/* send a data byte */
dat_tx = g_val;
i2c_data_transmit(I2C0, g_val++); // slave Tx, master Rx
}
}
|
一模一样的问题, 我的MCU是GD32E230C