FRDM-KL25z 组装延时回路导致复位
FRDM-KL25z assembly delay loop causes reset
我目前正在使用 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
我在调试时检查了复位控制模块(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] ;
我目前正在使用 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
我在调试时检查了复位控制模块(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] ;