您好...
这是代码的"部分",似乎不会在 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;