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

MSP430G2553,I2c接收中断,uart接收中断,共享一个中断向量,无法同时使用?

Other Parts Discussed in Thread:MSP430G2553, TMS320F2812

想用TI赠送的MSP430G2 launchpad做个微型四旋翼,iic单独能工作,uart单独也能工作,但同时使用的话,IIC的接收中断和UART的接收中断好像公用一个中断向量,结果只能响应UART的中断,IIC则歇菜了,搞不懂这颗MSP430G2553这么若吗?

还有感觉MSP430关于中断的文档很简单,参考资料只有芯片datasheet和user guide两个文档, 关于中断的内容一点也不详细,不想原来tms320f2812,有专门的文档,也很详尽,还是我没找到对的文档?

是逼我改用st的芯片吗?

灰小子:

做四轴会设计到一些算法,这不是msp430的特长。msp430的最大特长是低功耗。

如果必须用msp430做四轴的话,建议选用msp430f5xx/6xx

看你用过tms320f2812,其实用c2000系列作四轴是个很好的选择

,

灰小子:

MSP430G2 launchpad方面的资料也非常多的。除了官网提供的430ware例有例程,第三方的教材和资料也很多

,

chengcheng wang:

主要是TI赠送了一批MSP430g2553 launchpad开发板,想用它来开发些有趣的应用,我看到别人用8位单片机也能用来控制四旋翼,只要做姿态解算和PID控制,我想430处理能力应该够了,这样这些开发板用于教学就更有吸引力。

现在就卡在IIC和UART同时工作上,有高手指点下吗?

如果实在不行,只能用软件模拟IIC工作了,但这样效率又要下降一些。

另外这个20PIN的2553,是不是只能用到3个PWM,控制四旋翼要用4个PWM,缺一个我只能用定时器中断来模拟,还有什么好的办法吗?

要是能提供4个PWM,IIC和UART也都能独立工作,这个launchpad就比较理想了!!!

,

chengcheng wang:

终于试成功可以同时uart RX 中断 + i2c RX/TX中断,这款芯片的中断感觉真别扭,稍微复杂的应用,外设使用间就相互掣肘。

既然是推广口袋实验室,找个接口丰富,性能全面点的芯片啊,要不然真玩不出什么花样!

,

YK Lin:

請問樓上的前輩!  我目前也碰到中斷的問題! 

可以貼 code 讓我學習學習嗎?

感激了~~~~

,

kqian0327:

你好,

你碰到的是什么中断有问题呢?

我把口袋资料的代码贴出来供你参考:

http://www.deyisupport.com/cfs-file.ashx/__key/communityserver-discussions-components-files/55/0677.CODE.rar

,

xue liu:

请问如何做的啊?如何区分这2个中断呢?

,

灰小子:

标志位是不同的

,

user6605716:

#pragma vector = USCIAB0TX_VECTOR__interrupt void USCIAB0TX_ISR(void){ if(((IFG2&UCB0TXIFG)>0)||((IFG2&UCB0RXIFG)>0)) { _disable_interrupts(); //等同_DINT if(I2C_State==TX_STATE) //判断是收状态还是发状态 I2C_TxFrame_ISR(); // 事件:发送帧 else I2C_RxFrame_ISR(); // 事件:接收帧 //——-预留给主循环中唤醒CPU用途——- if(RxByteCnt == 0 || TxByteCnt == 0) //如果没有待发送或待接收数据 __bic_SR_register_on_exit(CPUOFF); // Exit LPM0 _enable_interrupts(); //等同_ENIT //等同_ENIT } else if((IFG2&UCA0TXIFG)==UCA0TXIFG) { IFG2&=~UCA0TXIFG; // 手动清除标志位 UART_OnTx(); }}

您好,我遇到了相同的问题,我使用了中断标志位来判断是哪一个中断,但是这样我只能进入IIC中断,无法进入UART中断,能请教一下么?

,

user6605716:

#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
if(((IFG2&UCB0TXIFG)>0)||((IFG2&UCB0RXIFG)>0))
{
_disable_interrupts(); //等同_DINT
if(I2C_State==TX_STATE) //判断是收状态还是发状态
I2C_TxFrame_ISR(); // 事件:发送帧
else
I2C_RxFrame_ISR(); // 事件:接收帧
//——-预留给主循环中唤醒CPU用途——-
if(RxByteCnt == 0 || TxByteCnt == 0) //如果没有待发送或待接收数据
__bic_SR_register_on_exit(CPUOFF); // Exit LPM0
_enable_interrupts(); //等同_ENIT
//等同_ENIT
}
else if((IFG2&UCA0TXIFG)==UCA0TXIFG)
{
IFG2&=~UCA0TXIFG; // 手动清除标志位
UART_OnTx();
}
}

您好,我遇到了相同的问题,我使用了中断标志位来判断是哪一个中断,但是这样我只能进入IIC中断,无法进入UART中断,能请教一下么?

赞(0)
未经允许不得转载:TI中文支持网 » MSP430G2553,I2c接收中断,uart接收中断,共享一个中断向量,无法同时使用?
分享到: 更多 (0)