Hi,大家好
我在调试CC3200的I2C Slave,使用的是lauchpad GCC + Eclipse开发,之前测试了一下CC3200 I2Cmaster模式,工作正常, 现在改为Slave模式发现无法进入中断,通过逻辑分析仪分析,我发现CC3200有被寻址到,也回复了应答信号,但是这些东西并不是我的中断程序做的。
下面是我的代码:
void main(void)
{
...
// Configure PIN_05 for I2C0 I2C_SCL
PinTypeI2C(PIN_05, PIN_MODE_5);
// Configure PIN_06 for I2C0 I2C_SDA
PinTypeI2C(PIN_06, PIN_MODE_5);
MAP_PRCMPeripheralClkEnable(PRCM_I2CA0, PRCM_RUN_MODE_CLK);
MAP_PRCMPeripheralReset(PRCM_I2CA0);
I2CSlaveInit(I2CA0_BASE, 127);
I2CSlaveFIFODisable(I2CA0_BASE);
MAP_I2CIntRegister(PRCM_I2CA0, I2C0_IRQHandler);
I2CSlaveIntEnableEx(I2CA0_BASE,
I2C_SLAVE_INT_START |
I2C_SLAVE_INT_STOP |
I2C_SLAVE_INT_DATA);
while(1) { }
}
void I2C0_IRQHandler(void)
{
unsigned char rx_data;
GPIOPinWrite(GPIOA3_BASE, 0x01, 1);
MAP_UtilsDelay(1);
GPIOPinWrite(GPIOA3_BASE, 0x01, 0);
Message("I2C0 Inte! \r\n");
if(I2C0_SCSR & I2C_SCSR_DA) //Check RREQ = 1?
{
/* I2C Master Write */
//Receive data from data register
rx_data = I2C0_SDR;
//Send ACK signal
I2CSlaveACKValueSet(I2CA0_BASE, 1);
}
else if(I2C0_SCSR & I2C_SCSR_TREQ) //Check RREQ = 1?
{
I2C0_SDR = 0x37;
}
else
{
return;
}
}
谢谢.