微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > IAR编译我的UART收发的工程,提示我堆栈越界的问题,但是我的那个工程很小,没用协议栈。

IAR编译我的UART收发的工程,提示我堆栈越界的问题,但是我的那个工程很小,没用协议栈。

时间:10-02 整理:3721RD 点击:
void InitUart()
{
  CLKCONCMD &= ~0x40;                          // 设置系统时钟源为 32MHZ晶振
  while(CLKCONSTA & 0x40);                     // 等待晶振稳定 
  CLKCONCMD &= ~0x47;                          // 设置系统主时钟频率为 32MHZ
  
  PERCFG = 0x00;        //位置1 P0口 
  P0SEL = 0x3c;        //P0_2,P0_3,P0_4,P0_5用作串口,第二功能 
  P2DIR &= ~0XC0;      //P0 优先作为UART0 ,优先级
  
  U0CSR |= 0x80;       //UART 方式 
  U0GCR |= 11;         //U0GCR与U0BAUD配合     
  U0BAUD |= 216;       // 波特率设为115200 
  UTX0IF = 0;          //UART0 TX 中断标志初始置位1  (收发时候)
  U0CSR |= 0X40;       //允许接收 
  IEN0 |= 0x84;        // 开总中断,接收中断    
}

这是设置UART0的参数设置,和时钟设置。但是 单步调试的时候进入第一条语句

  CLKCONCMD &= ~0x40;                          // 设置系统时钟源为 32MHZ晶振

执行后就报下面的堆栈越界的信息:

Mon Feb 02 15:01:57 2015: The stack 'IdataStack' is filled to 100% (64 bytes used out of 64). The warning threshold is set to 90.%

Mon Feb 02 15:01:57 2015: The stack pointer for stack 'IdataStack' (currently IData:0x00) is outside the stack range (IData:0xC0 to IData:0x100)

调试模式是把程序下载到开发板上单步调试

是不是linker->config配置的问题"$PROJ_DIR$\..\..\common\cc2540\ti_51ew_cc2540b.xcl"

不是这个问题的,越界的问题发生在始终配置那三个语句上,只是单步执行时钟配置语句才会有这样的情况,如果GO运行有没有。

TI提供了直接使用CC2540当做8051编程不使用协议栈的例程 里面包括了对UART口的控制  是可以单步联调的 建议您参考使用

   /****************************************************************************
    * Clock setup
    * See basic software example "clk_xosc_cc254x"
    */
 
    // Set system clock source to HS XOSC, with no pre-scaling.
    CLKCONCMD = (CLKCONCMD & ~(CLKCON_OSC | CLKCON_CLKSPD)) | CLKCON_CLKSPD_32M;
    while (CLKCONSTA & CLKCON_OSC);   // Wait until clock source has changed.
 
    // Note the 32 kHz RCOSC starts calibrating, if not disabled.

http://www.ti.com/lit/zip/swrc257

 

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top