我目前正在开发一个使用FRDM-KL25Z开发板并使用Keil MDK-lite(5.14a)进行编程的项目。我们应该做的是使用三个相应的LED和一个按钮来创建一个简单的交通灯,以加快光线的变化(不是像真正的交通信号灯那样,而是在每次延迟后检查)。我遇到的问题是我的程序在模拟器中运行得很好但是当在开发板上运行时它几乎立即重置。我把它缩小到我用了30秒延迟的循环。 任何提示,了解发生这种情况的原因或如何在调试器中查找更多信息都很棒。
这是我正在使用的循环的剪切。
reset LDR R1, =0x00000002 ;Change light to red
BL changelight ;
LDR R3, =0x00000011 ;Put value into counter (1 loop just to show code works)
d30_1 BL buttonpress ;Check for button press
SUBS R3, #17 ;Subtract # of ticks in loop (17) from counter
CMP R3, #0
BGT d30_1
CMP R6, #1 ;Check for button press
BEQ reset ;Reset to red if pressed
LDR R1, =0x00000010 ;Change light to green
BL changelight ;
LDR R3, =0x05B8d800 ;Put value into counter (5 seconds, the board resets when counter is this high)
d30_2 BL buttonpress ;Check for button press
SUBS R3, #17 ;Subtract # of ticks in loop (17) from counter
CMP R3, #0
BGT d30_2
...
这是分支按钮
buttonpress
LDR R0, =0x400FF090 ;Put address of PORTC_PDIR into R0
LDR R1, [R0] ;Put value of PORTC_PDIR into R1
LDR R0, =0x00000080 ;Put value of monitored input pin
TST R1, R0 ;Check for button press
BNE nopress ;Break from process if button not pressed
MOVS R6, #1 ;Put 1 in R6 if button has been pressed
nopress BX LR
答案 0 :(得分:1)
我在调试时检查了复位控制模块(RCM)。复位的原因可归因于看门狗定时器计算机正常运行(COP)超时。我在初始化时添加了以下内容来解决问题。谢谢Notlikethat。
;Disable watchdog COP timer
LDR R0, =SIM_COPC ;Load address of SIM_COPC to R0
LDR R1, =0x0 ;Disable watchdog COPT
STR R1, [R0] ;