打印

CC430串口自收自发时间久了进入rest_vector中

[复制链接]
1031|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yufanjoy|  楼主 | 2014-11-14 14:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yufanjoy 于 2014-11-14 14:12 编辑

在调试CC430串口的时候遇到个问题:
用串口自收自发:收到什么就发什么,用的是中断处理的,具体程序如下:

void main( void )
{  
   
     Initucs();   //初始化系统时钟
   
    WDTCTL = WDTPW + WDTHOLD;
    SetVCore(2);           //提升内核电压 PMM Core Voltage 2 (1.75V)   Increase PMMCOREV level to 2 for proper radio operation                  
   
    ResetRadioCore();  //复位cc430 里面的Radio   
    InitRadio();             //初始化CC430 的Radio 模块:主要是开启PMM的高能量消耗允许,配置CC430的Radio寄存器,设置发射功率等。
    InitLeds();              //初始化按键和LED
    InitUart();              //初始化串口
    ReceiveOn();         //开启RF接收
   
    _EINT();      //开启全局中断
   
    while (1)
    {      
        __no_operation();           
    }      
}

#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
  switch(__even_in_range(UCA0IV,4))
  {
  case 0:break;                             // Vector 0 - no interrupt
  case 2:                                   // Vector 2 - RXIFG
    while (!(UCA0IFG&UCTXIFG));             // USCI_A1 TX buffer ready?
    UCA0TXBUF = UCA0RXBUF;                  // TX -> RXed character
    break;
  case 4:break;                             // Vector 4 - TXIFG
  default: break;
  }  
}

主函数就是对串口初始化而已,并未有其他关于数组和指针的操作,程序的主要是要实现串口接收和发送,所以就简单写了下串口初始化和串口数据处理代码,用串口调试助手每隔80ms发送数据,程序在收到数据后就自动发到串口调试助手。
程序刚开始运行的半个多小时时间内,跑的很正常,可以自收自发,但是要是时间再跑长点,程序就进入?reset_vector段里面去了,调试log里面显示的溢出了,但是我没有涉及数组和指针的操作,怎么会溢出啊,百思不得其解啊,烦请各位大侠帮我参谋参谋啊!!!

相关帖子

沙发
dirtwillfly| | 2014-11-14 14:31 | 只看该作者
可能的原因有很多,可能是stack溢出。建议提供完整的代码

使用特权

评论回复
板凳
yufanjoy|  楼主 | 2014-11-15 14:28 | 只看该作者
dirtwillfly 发表于 2014-11-14 14:31
可能的原因有很多,可能是stack溢出。建议提供完整的代码

版主你好!完整的代码就少了一段 inituart()函数的代码,这个代码就是初始化寄存器而已,程序如下:
void InitUart()
{
    P1SEL |= BIT5 + BIT6;  // 选用P1.5 1.6的第二功能作为串口输入输出口 ,P1.5为 UCA0RXD   P1.6为 UCA0TXD
    P1DIR |= BIT6; //P1.6设为输出
    P1DIR &=~BIT5; //P1.5设为输入
   
    UCA0CTL0 = 0;//无校验 1停止位 8位数据 异步串行通信
    UCA0CTL1 |= 0XC1;//SMCLK 时钟 、使能软件复位
    UCA0BR0 = 0XEC; //波特率为 115200   26*1048576/115200
    UCA0BR1 = 0;
    UCA0MCTL |= UCBRS_3 + 0 ;            // 设置波特率调整参数
    UCA0CTL1 &= ~UCSWRST;                // 恢复UCSWRST
    UCA0IE |= UCRXIE;                    // 使能接收中断

}


程序只有这些代码了,其他的初始化代码都是空函数,没有写代码进去,整个程序的流程图是初始化串口  然后运行到while一直空循环等待串口自收自发,涉及到stack的只有串口接收和发送的数据寄存器了,按理说这2个8位的寄存器应该是收一个就发一个出去的,不会溢出啊,会不会是我收发的时间太短了呀?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

18

帖子

0

粉丝