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

MSP430G2553,I2c接收中断,uart接收中断,共享一个中断向量,我使用了中断标志位却还是只能用IIC中断。

#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

赞(0)
未经允许不得转载:TI中文支持网 » MSP430G2553,I2c接收中断,uart接收中断,共享一个中断向量,我使用了中断标志位却还是只能用IIC中断。
分享到: 更多 (0)