您好...
这是代码的"部分",似乎不会在 while (i2cstate……)停止 环块。 代码直接击穿了。。。 观察总线事务 RGB 部分所有数据看起来都很好、 但是在 LCD 区,我得到的数据传输中的所有零都是0,这对我来说是指指针没有被复位,这看起来我从来没有进入 ISR.I2CComplete 区……我尝试过各种各样的东西,但没有结果…
结束函数是在进入无限 while 循环之前配置 RGB 和 LCD。 如果我运行代码、我获得所有事务、并且位于 LPM3_BITS + GIE。
__bis_SR_register(GIE);
/*
* initialize RGB
*/
nonZeroBufDepth = I2C_TxArray_Builder((uint8_t *)InitializeRGB, sizeof(InitializeRGB), RGB_W);
i2cstate = I2CWRITE;
sendI2C_data(pI2CStream, nonZeroBufDepth, RGB_12C_ADDRESS);
while(i2cstate != I2CIDLE);
/*
* initialize LCD
*/
nonZeroBufDepth = I2C_TxArray_Builder((uint8_t *)initializeLCD, sizeof(initializeLCD), LCD_multiW);
i2cstate = I2CWRITE;
sendI2C_data(pI2CStream, nonZeroBufDepth, LCD_12C_ADDRESS);
while(1)
{
__bis_SR_register(LPM3_bits + GIE);
if (ISR.I2CComplete)
{
/*
* house-keeping
*/
ISR.I2CComplete = F;
i2cstate = I2CIDLE;
i2c_cnt = 0;
memset((void *)lcd_rgb_data, 0, sizeof(lcd_rgb_data));
pI2CStream = lcd_rgb_data;
}
}
}
#pragma vector = USCI_B0_VECTOR
__interrupt void I2C_ISR(void)
{
uint8_t rcv;
switch(__even_in_range(UCB0IV, USCI_I2C_UCBIT9IFG))
{
case USCI_NONE: break;
case USCI_I2C_UCALIFG: break;
case USCI_I2C_UCNACKIFG: break;
case USCI_I2C_UCSTTIFG: break;
case USCI_I2C_UCSTPIFG:
ISR.I2CComplete = T;
i2cstate = I2CSTOP;
LPM3_EXIT;
break;
