;****************************************************************************** ; ; This is the code that gets called when the processor receives a fault ; interrupt. This simply enters an infinite loop, preserving the system state ; for examination by a debugger. ; ;****************************************************************************** FaultISR B FaultISR
没啥大问题,小笔误而已,jtag.c的宏定义写错了一点,导致程序死在startup.s里:
;******************************************************************************
;
; This is the code that gets called when the processor receives a fault
; interrupt. This simply enters an infinite loop, preserving the system state
; for examination by a debugger.
;
;******************************************************************************
FaultISR
B FaultISR
碰到这类问题,建议Debug的方式来查错,在程序中设多几个断点,看程序跑在哪里出了问题。逐步排查。最终运行效果是三个灯在那里轮流闪。
附上我用的Jtag防锁死代码,针对EK-LM3S811,复位时按住USER按键S2,程序进入JtagWait死循环的时候,Status LED会闪烁,表示在等待Jtag连接。
//防止JTAG失效,上电或者复位时按下板上的USER按键,进去此函数,板上Status LED一直闪烁。
void JtagWait(void)
{
unsigned long i;
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); // 使能KEY、LED所在的PC端口
GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_4); // 设置KEY所在管脚PC4为输入
GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_5 ); // 设置LED所在管脚PC5为输出
if (GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_4) == 0x00) // 若复位或上电时按下KEY,则进入
{
while(1) //死循环,以等待JTAG连接,LED闪烁
{
for(i=0;i<200000;i++);
GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5,GPIO_PIN_5); //点亮LED
for(i=0;i<200000;i++);
GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5,~GPIO_PIN_5); //熄灭LED
}
}
SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOC); // 禁止KEY所在的GPIO端口
}
一周热门 更多>