This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我的设置由一个以16MHz 运行的 MSP430FR2433 I2C 从设备组成。 I2C 主设备通信使用 TI USB2ANY 器件完成。 我注意到 MSP430需要定期拉伸 I2C 时钟以跟上主设备的步伐。 在所连接的捕获中、需要时钟拉伸来应答地址。 我意识到这完全符合 I2C 规范、但我对它无法跟上100kHz I2C 总线有点惊讶?
这是我的 ISR:
#pragma vector=USCI_B0_vector __interrupt void USCIB0_ISR (void) { switch (_even_in_range (UCB0IV、0x1E)) { 案例0x00:break;//向量00:无中断 案例0x02:break;//向量02:UCALIFG 案例0x04:break;//向量 0x06 UCNIFG 案例0x04:CnIFG:CnIFG: //向量06:UCSTTIFG 启动 rxBuffIndex = 0; 中断; 情况0x08: //向量08:UCSTPIFG 停止 stopSet = true; break; case 0x0A:break;// Vector 0A:UCRXIFG3 case 0x0C:break;// Vector 0C:UCTXIFG3 case 0x0E:break;// Vector 0E:UCRXIFG2 case 0x10:break;// Vector 10:UCTXIFG2 case 0x12:break;// Vector 12:UCRXIFG1 :UCRXIFG1:0x14:UCRXIFG1:case 0x14;/ Vector 0x14:break //向量16:UCRXIFG0 if (rxBuffIndex >= slave_I2C_buff_size) { //生成 NAK UCB0CTLW0 |= UCTXNACK; 返回; } rxBuff[rxBuffIndex++]= UCB0RXBUF; IF (stopSet) { stopSet = false; if (dataRxCallback!= NULL) { dataRxCallback (&rxBuff[0]、rxBuffIndex); } } 中断; 情况0x18: //向量18:UCTXIFG0 if (txBuff.dataIndex >= txBuff.maxNumBytes) { //生成 NAK UCB0CTLW0 |= UCTXNACK; 返回; } UCB0TXBUF = txBuff.dataPtR[txBuff.dataIndex++]; break; case 0x1A:break;// Vector 1A:UCBCNTIFG case 0x1C:break;// Vector 1C:UCCLTOIFG case 0x1E:break;// Vector 1E:UCBIT9IFG default:break; }