|
前几天买的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周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|