#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
if(((IFG2&UCB0TXIFG)>0)||((IFG2&UCB0RXIFG)>0)) 判断IIC中断
{
_disable_interrupts();
if(I2C_State==TX_STATE)
I2C_TxFrame_ISR();
else
I2C_RxFrame_ISR();
if(RxByteCnt == 0 || TxByteCnt == 0)
__bic_SR_register_on_exit(CPUOFF);
_enable_interrupts();
}
else if((IFG2&UCA0TXIFG)==UCA0TXIFG) 判断UART中断
{
IFG2&=~UCA0TXIFG;
UART_OnTx();
}
}
Susan Yang:
尽管USCIA和USCIB外设在该设备上共享相同的中断指令,但TX和RX标志是SFR(寄存器)中的不同位。您可能需要在中断向量中进行标志检查,以查看哪个外设在执行中断,或者需要对每个位进行开关/切换,以查看是否有中断。
请参见下面的示例代码链接中的I2C或UART标准示例,以获取有关如何进行标志检查的示例。
dev.ti.com/…/node
,
user6605716:
您好,我查看了SFG寄存器的,驱动LCD的IIC和例程UART的中断标志位都在IFG2寄存器上,所以我就根据中断标志位来判断了,如上代码。但是仍没有用。
,
user6605716:
您好,我查看了SFG寄存器的,驱动LCD的IIC和例程UART的中断标志位都在IFG2寄存器上,所以我就根据中断标志位来判断了,如上代码。但是仍没有用。
,
Susan Yang:
您可以看一下用户指南内的 17.3.7.4 Interrupt Vector Assignment
www.ti.com.cn/…/slau144j.pdf
Example 17-1 shows an extract of the interrupt service routine to handle data receive interrupts from USCI_A0 in either UART or SPI mode and state change interrupts from USCI_B0 in I2C mode.
Example 17-2 shows an extract of the interrupt service routine that handles data transmit interrupts from
USCI_A0 in either UART or SPI mode and the data transfer interrupts from USCI_B0 in I2C mode.建议在 USCI_A0:在P1.1和P1.2上执行UART
同时USCI_B0:在P1.6和P1.7上执行I2C
,
Susan Yang:
另外可以参考类似示例:
gist.github.com/…/4376826