搜索
bottom↓
回复: 2

晕!lm3s6911 watchdog 怎么了?

[复制链接]

出0入0汤圆

发表于 2011-4-3 23:33:17 | 显示全部楼层 |阅读模式
前几天买的LM3S6911板子,按照惯例,先看开发板的example(这里是IAR下的blink范例),再调用库编写片上外设的应用,达到熟悉开发板。
想必大家也是这样的吧(^_^)。

    先从watchdog开始吧,启动代码(startup_ewarm.c)咱先不理会他,照搬不误。主程序初始化端口F的一个引脚(用来驱动板上的 LED)和看门狗定时器,然后
while(1),等待看门狗中断Toggle LED。代码如下:

int main(void)
{
   portFInitial();
   wdtInitial();
   while(1);
}

/***************************************************************
      FunctionName: portFInitial
        Task: Initial GPIOF, contain clock source and others

        Arguments: Nil
        Returns:   Nil
        Notes:  See function comments in function
***************************************************************/
void portFInitial(void)
{
    volatile unsigned long ulLoop;

    //
    // Enable the GPIO port that is used for the on-board LED.
    //
    SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOF;

    //
    // Do a dummy read to insert a few cycles after enabling the peripheral.
    //
    ulLoop = SYSCTL_RCGC2_R;

    //
    // Enable the GPIO pin for the LED (PF0).  Set the direction as output, and
    // enable the GPIO pin for digital function.
    //
    GPIO_PORTF_DIR_R = 0x01;
    GPIO_PORTF_DEN_R = 0x01;  
}


/***************************************************************
      FunctionName: wdtInitial
        Task: Initial watchdog

        Arguments: Nil
        Returns:   Nil
        Notes:  Initial watchdog accroding to lm3s6911 datasheet
***************************************************************/
void wdtInitial(void)
{
    SYSCTL_RCGC0_R |= SYSCTL_RCGC0_WDT; //Should enable wdt module clock
    WatchdogReloadSet(WATCHDOG_BASE, 0xffffffff);
    WatchdogResetDisable(WATCHDOG_BASE);
    WatchdogIntEnable(WATCHDOG_BASE);
    WatchdogLock(WATCHDOG_BASE);
}


/***************************************************************
        FunctionName: WatchdogIntHandler
        Task: Handler for watchdog interrupt, not reset function

        Arguments: Nil
        Returns:   Nil
        Notes:  Toggle led on board when wdt interrupt occurs
***************************************************************/
void WatchdogIntHandler(void)
{
    GPIO_PORTF_DATA_R ^= 0x01;
}

这样应该差不多吧(很简单),哦,对了,还要在启动代码的向量表里加WatchdogIntHandler向量:
                                            // The initial stack pointer
    __iar_program_start,                    // The reset handler
    NmiSR,                                  // The NMI handler
    FaultISR,                               // The hard fault handler
    IntDefaultHandler,                      // The MPU fault handler
    IntDefaultHandler,                      // The bus fault handler
    IntDefaultHandler,                      // The usage fault handler
    0,                                      // Reserved
    0,                                      // Reserved
    0,                                      // Reserved
    0,                                      // Reserved
    IntDefaultHandler,                      // SVCall handler
    IntDefaultHandler,                      // Debug monitor handler
    0,                                      // Reserved
    IntDefaultHandler,                      // The PendSV handler
    IntDefaultHandler,                      // The SysTick handler
    IntDefaultHandler,                      // GPIO Port A
    IntDefaultHandler,                      // GPIO Port B
    IntDefaultHandler,                      // GPIO Port C
    IntDefaultHandler,                      // GPIO Port D
    IntDefaultHandler,                      // GPIO Port E
    IntDefaultHandler,                      // UART0 Rx and Tx
    IntDefaultHandler,                      // UART1 Rx and Tx
    IntDefaultHandler,                      // SSI0 Rx and Tx
    IntDefaultHandler,                      // I2C0 Master and Slave
    WatchdogIntHandler,                      // PWM Fault                                  //定位看门狗中断向量
    IntDefaultHandler,                      // PWM Generator 0

这里应用的是lm3s6965的向量表,和6911有点区别(6965是38 interrupts,6911是30个),所以向量表也有区别。

好了,这下ok了吧!调试...


(原文件名:Capture.JPG)

晕~执行到第二条指令就出现未定义,接着执行几条指令后,就跳不进主程序了:


(原文件名:Capture1.JPG)

就在这里打转,跳不进main,debug log窗口也没提示到底是什么原因,只是说系统复位:

Sun Apr 03 23:51:33 2011: Found Cortex-M3 r1p1, Little endian.
Sun Apr 03 23:51:33 2011: TPIU fitted.
Sun Apr 03 23:51:33 2011:   FPUnit: 6 code (BP) slots and 2 literal slots
Sun Apr 03 23:51:34 2011: Found Cortex-M3 r1p1, Little endian.
Sun Apr 03 23:51:34 2011: TPIU fitted.
Sun Apr 03 23:51:34 2011:   FPUnit: 6 code (BP) slots and 2 literal slots
Sun Apr 03 23:51:34 2011: Software reset was performed
Sun Apr 03 23:51:34 2011: Target reset              //记录就停在这里

照理出现未定义指令的话会跳到用法错误啊,但debug log里面没提示,程序也永远停住了。

哎,郁闷,请大家伙帮忙看看!工程:

点击此处下载 ourdev_628050WQTRVQ.rar(文件大小:59K) (原文件名:WDT_Test.rar)

谢谢!!

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2011-4-4 00:02:17 | 显示全部楼层
你不用库??

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-6-3 17:05

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

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