搜索
bottom↓
回复: 10

看了个别人写的 msp430 uart程序,更改后为何不能正常接收数据,原来是做AVR的,msp430为

[复制链接]

出0入0汤圆

发表于 2011-6-12 14:05:52 | 显示全部楼层 |阅读模式
如下面这样直接接收 时,进入中断就退不出来了,看其他 msp430串口 的例子,也可以写成下面的方式的,为何这个不行?
#pragma vector=UART1RX_VECTOR
__interrupt void usart1_rx (void)
{
     msg[0]=RXBUF1;       //Reading data from RXBUF0 for clearing URXIFG0 automatically
}
而必须更改为如下的方式,才可以正常工作,是什么原因?  
//----------------------------------------
#pragma vector=UART1RX_VECTOR

__interrupt void usart1_rx (void)
{   _DINT();
    if(!(U1IFG & URXIFG1))
    {
     UTCTL1 &=~URXSE;     //Clear inner URXS flag without occuring URXIFGO
     UTCTL1 |=URXSE;      //Re-setting URXSE founction  
     _BIS_SR(SCG0+SCG1);  //Activating DCO if it was disabled by low-power mode
    }  
    else
   {            
     msg[0]=RXBUF1;       //Reading data from RXBUF0 for clearing URXIFG0 automatically
   
   }
  _EINT();
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-6-12 15:03:38 | 显示全部楼层
下面的也太繁琐了。给个TI的官方例程如下:

#include  "msp430x22x4.h"

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
  DCOCTL = CALDCO_1MHZ;
  P3SEL = 0x30;                             // P3.4,5 = USCI_A0 TXD/RXD
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 104;                            // 1MHz 9600
  UCA0BR1 = 0;                              // 1MHz 9600
  UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt

  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled
}

//  Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
  while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
  UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character
}

出0入0汤圆

 楼主| 发表于 2011-6-13 17:14:55 | 显示全部楼层
如何 我不进入 LPM0 模式呢,
难道使用
#pragma vector=UART1RX_VECTOR
__interrupt void usart1_rx (void)
{
     msg[0]=RXBUF1;       //Reading data from RXBUF0 for clearing URXIFG0 automatically
}
方式 就该 接收不到数据吗?

出0入0汤圆

发表于 2011-7-8 11:49:10 | 显示全部楼层
不知道,帮你顶一个

出0入0汤圆

发表于 2011-9-30 12:05:44 | 显示全部楼层
我发现它接收字符串的时候会漏掉第一个字符,搞得我很纠结,现在还在想办法解决

出0入0汤圆

发表于 2011-10-21 09:19:10 | 显示全部楼层
你仔细看初始化。
开的中断也不一样

出0入0汤圆

发表于 2012-5-14 13:48:21 | 显示全部楼层
cc1989summer 发表于 2011-6-12 15:03
下面的也太繁琐了。给个TI的官方例程如下:

#include  "msp430x22x4.h"

这样UART没有数据时,CPU啥也干不了了

出0入0汤圆

发表于 2012-5-14 14:58:29 | 显示全部楼层
看看TI官网的代码吧   很简单  430要注意进的低功耗模式  小心把要用到的时钟关了

出0入0汤圆

发表于 2012-5-14 18:32:40 | 显示全部楼层
要只是漏掉了一个字符,能不能在最后的发送字符里多加一个字符补充?

出0入0汤圆

发表于 2012-5-25 14:34:09 | 显示全部楼层
                                               
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-6 10:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表