FRDM-KL25z装配延迟环路导致复位

时间:2015-11-29 19:47:01

标签: assembly crash arm keil cortex-m

我目前正在开发一个使用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

1 个答案:

答案 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]        ;