TI中文支持网
TI专业的中文技术问题搜集分享网站

I2C 作为从设备时 STOP中断信号提前的问题

使用的芯片是:MSP430FR2311

I2C 作为从设备,在主机发送写命令时,会偶尔出现 “STOP中断 ”在“写最后一个数据的中断”前

灰小子:

你用的官网例程还是自己写的iic从设备代码?

LUCA WANG:

回复 灰小子:

初始化是按照官网来的,增加了起始信号、读写信号的中断

LUCA WANG:

都没人回答下么???

灰小子:

回复 LUCA WANG:

有没有用示波器或者逻辑分析仪观察一下?

建议上传下实际的时序图

灰小子:

回复 灰小子:

你没上传代码,但猜测你可能是遇到了这个问题:
USCI/eUSCI状态图表示,在接收到最后一个字节前,需要设定UCTXSTP位。在只接收到一个字节的应用中,UCTXSTP位与UCTXSTT位一同设置。如果接收到多个字节,那么应该在接收到第N-1字节后设定UCTXSTP。这样就确保了在接收到最后一个字节后,立即发送停止序列。

LUCA WANG:

回复 灰小子:

初始化://Disable the USCI moduleUCB0CTLW0 = UCSWRST;
//Clear USCI master modeUCB0CTLW0 &= ~UCMST;
//Configure I2C as Slave and Synchronous modeUCB0CTLW0 |= UCMODE_3 | UCSYNC;
//Set up the slave address.UCB0I2COA0 = SMspI2c_SlaveAddr | UCOAEN;// own address is 0x48 + enable//UCB0CTLW1 &= ~UCETXINT;UCB0CTLW0 &= ~UCSWRST;// clear reset register//Clear the I2C interrupt source.UCB0IFG &= ~(UCRXIFG0 | UCTXIFG0| UCSTTIFG | UCSTPIFG);//UCSTPIFG UCSTTIFG//Enable the interrupt masked bitUCB0IE |= (UCRXIE0 | UCTXIE0| UCSTTIE | UCSTPIE);//UCSTPIE UCSTTIE__bis_SR_register(GIE);

中断响应处理:
#pragma vector = USCI_B0_VECTOR
__interrupt void USCIB0_ISR(void)
{switch(__even_in_range(UCB0IV,UCIV__UCBIT9IFG)){case 0x06:// Vector 6: STTIFG break;UCB0IFG &= ~UCSTTIFG;// Clear start condition int flagTEpu_OnI2cEvent(SBase_I2CEVENT_START,0);break;case 0x08:// Vector 8: STPIFG break;UCB0IFG &= ~UCSTPIFG;// Clear stop condition int flagTEpu_OnI2cEvent(SBase_I2CEVENT_STOP,0);break;case 0x16:// Vector 24: RXIFG0 break;{u8 tmp;tmp = UCB0RXBUF;TEpu_OnI2cEvent(SBase_I2CEVENT_WRITE,tmp);}break;case 0x18:// Vector 26: TXIFG0 break;UCB0TXBUF = TEpu_OnI2cEvent(SBase_I2CEVENT_READ,0);break;case 0x00: break;// Vector 0: No interrupts break;case 0x02:// Vector 2: ALIFG break;case 0x04:// Vector 4: NACKIFG break;case 0x0a:// Vector 10: RXIFG3 break;case 0x0c:// Vector 14: TXIFG3 break;case 0x0e:// Vector 16: RXIFG2 break;case 0x10:// Vector 18: TXIFG2 break;case 0x12:// Vector 20: RXIFG1 break;case 0x14:// Vector 22: TXIFG1 break;case 0x1a:// Vector 28: BCNTIFG break;case 0x1c:// Vector 30: clock low timeout break;case 0x1e:// Vector 32: 9th bit break;default: TEpu_OnI2cEvent(SBase_I2CEVENT_OTHER,__even_in_range(UCB0IV,UCIV__UCBIT9IFG));break;}
}

LUCA WANG:

回复 灰小子:

我用的MSP430FR2311 是当做I2C 从设备!!!
问题是:
主机发送写数据后,会偶尔出现,在收到STOP中断后,再收到接收到数据的中断

赞(0)
未经允许不得转载:TI中文支持网 » I2C 作为从设备时 STOP中断信号提前的问题
分享到: 更多 (0)