打印
[ZLG-MCU]

8962在使用软复位指令之后串口会产生乱码

[复制链接]
2107|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hhtek|  楼主 | 2008-2-16 20:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "hh_uart.h" 
#include "hh_led.h"
#include "hh_watchdog.h"
#include "hh_timer.h"

void SoftTimerFunction1(void);

int main(void)
{
    unsigned char len,cmd[16];
  unsigned long ulResetCause;
  
  SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ);
    //分频系数为1,使用外部晶体作为主振荡器,且晶体的频率为6M
    delay(2000000);
    LEDInit();
  WDTInit();
  IntEnable(INT_GPIOA);  //允许GPIOA中断
  UART0Init();
  
  TimerInit();
  InitSoftTimer();/* 初始化软定时器模块 */
  SoftTimerRun(0,TICKS_PER_SEC / 2,SoftTimerFunction1); /* 运行两个软定时器 */    
  
  
  while(1){
    ulResetCause=SysCtlResetCauseGet();
    SysCtlResetCauseClear(ulResetCause);
    
    if(ulResetCause & SYSCTL_CAUSE_SW){//软件复位
      LED4On();
      UART0_put_str("SYSCTL_CAUSE_SW\r\n\r\n");
    }else if(ulResetCause & SYSCTL_CAUSE_WDOG){
      LED5On();
      UART0_put_str("SYSCTL_CAUSE_WDOG\r\n\r\n");
    }else if(ulResetCause & SYSCTL_CAUSE_EXT){
      LED6On();
      UART0_put_str(">----------\r\n");
      UART0_put_str(">请选择:\r\n");
      UART0_put_str(">1 软复位\r\n");
      UART0_put_str(">2 将看门狗中断等级提高到最高\r\n");
      UART0_put_str(">3 将看门狗中断等级降低到最低\r\n");
      UART0_put_str(">4 停止外设定时器0\r\n");
      UART0_put_str(">5 启动外设定时器0\r\n");
      UART0_put_str(">6 软件触发GPIOA中断,进入死循环\r\n");
      UART0_put_str(">----------\r\n\r\n");
      UART0_put_str("SYSCTL_CAUSE_EXT\r\n\r\n");
    }else if(ulResetCause & SYSCTL_CAUSE_POR){
      UART0_put_str("SYSCTL_CAUSE_POR\r\n\r\n");
    }
    
    
    if((len=UART0_get_line(cmd,13))>0){
      if(len>3) {
        UART0_put_str("> command you entered is: ");
        UART0_put_str(cmd);
        UART0_put_str("> this is too long! \r\n");
      }else{
        switch(cmd[0]){
          case '1':
            UART0_put_str(">the command is soft reset\r\n");
            delay(2000000);
            SysCtlReset();
            break;
          case '2':
            UART0_put_str("promote watchdog interrupt priority to top 1\r\n");
            IntPrioritySet(INT_WATCHDOG,1<<5);//最高优先级
            break;
          case '3':
            UART0_put_str("bring down watchdog interrupt priority to lowest\r\n");
            IntPrioritySet(INT_WATCHDOG,7<<5);//最低优先级
            break;
          case '4':
            UART0_put_str("the command is stop timer0 Peripheral\r\n");
            TimerDisable(TIMER0_BASE, TIMER_A);
            break;
          case '5':
            UART0_put_str("the command is restart timer0 Peripheral\r\n");
            TimerEnable(TIMER0_BASE, TIMER_A);
            break;
           case '6':
            UART0_put_str("the command is soft GPIOA endless loop\r\n");
            HWREG(NVIC_SW_TRIG)=INT_GPIOA-16;
            break;
          default :
            UART0_put_str(">unkown command\r\n");
            break;
        }
      }
    }
  }
}

void SoftTimerFunction1(void)
{
    GPIOPinWrite(GPIO_PORTB_BASE,LED3,GPIOPinRead(GPIO_PORTB_BASE,LED3)^LED3);/*翻转*/
    SoftTimerRun(0,(TICKS_PER_SEC + 1) / 2,SoftTimerFunction1);
}

void GPIOA_ISR(void)
{
    while(1);
}

相关帖子

沙发
zlgmcu| | 2008-2-18 08:51 | 只看该作者

程序思路不错

不过程序有些复杂,建议另写一个非常简单的UART+Reset测试程序试试。看能否正常。
另外请注意RX和TX上是否有上拉电阻?(作为偏置,防止复位时处于悬空状态)

(zlgmcu_wdx)

使用特权

评论回复
板凳
wahahaabc| | 2008-2-18 11:36 | 只看该作者

偶的和楼主一样

按下CPU PACK板上的RESET按键,串口会有乱码出现。这可能是由于在上电时,LM3S8962的引脚为低电平所致(不像51单片机,上电复位所有的I/O引脚都为高电平)

使用特权

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

本版积分规则

7

主题

23

帖子

0

粉丝