FRDM-KL25z assembly delay loop causes reset

2

I'm currently working on a project using the FRDM-KL25Z development board and programming using Keil MDK-lite (5.14a). What we're supposed to do is create a simple traffic light using three corresponding LEDs and a push button to expedite the light change(not immediately like a real traffic light but to check after each delay). The problem I'm having is my program works perfectly fine in the simulator but when running on the development board it reset itself almost immediately. I've narrowed it down to the loops I'm using for a 30 second delay. Any tips to find out why this is happening or how to find more information in the debugger would be great.

Here's a cutout of the loop I'm using.

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
        ... 

Here is the branch buttonpress

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
assembly
crash
arm
keil
cortex-m
asked on Stack Overflow Nov 29, 2015 by ns533 • edited Nov 30, 2015 by Peter Cordes

1 Answer

1

I checked the Reset Control Module (RCM) while debugging. The cause of the reset can be attributed to the watchdog timer Computer Operating Properly (COP) timing out. I added the following to my initialization to solve the problem. Thank you 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]        ;
answered on Stack Overflow Dec 1, 2015 by ns533

User contributions licensed under CC BY-SA 3.0