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中断,能请教一下么?