FRDM-KL25z El bucle de retardo del ensamblaje provoca el restablecimiento

0

Actualmente estoy trabajando en un proyecto utilizando la placa de desarrollo FRDM-KL25Z y programando utilizando Keil MDK-lite (5.14a). Lo que se supone que debemos hacer es crear un simple semáforo con los tres LED correspondientes y un botón para acelerar el cambio de luz (no como un semáforo real, sino para verificar después de cada retraso). El problema que tengo es que mi programa funciona perfectamente bien en el simulador pero cuando se ejecuta en la placa de desarrollo se reinicia casi de inmediato. Lo he reducido a los bucles que estoy usando para un retraso de 30 segundos. Cualquier consejo para averiguar por qué sucede esto o cómo encontrar más información en el depurador sería genial.

Aquí hay un recorte del bucle que estoy usando.

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

Aquí está la pulsación de botón de rama

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
    
pregunta ns533

1 respuesta

1

Revisé el módulo de control de reinicio (RCM) mientras realizaba la depuración. La causa del restablecimiento se puede atribuir al temporizador de vigilancia. El tiempo de funcionamiento del ordenador funciona correctamente (COP). Agregué lo siguiente a mi inicialización para resolver el problema. ¡Gracias chicos!

;Disable watchdog COP timer
    LDR R0, =SIM_COPC   ;Load address of SIM_COPC to R0
    LDR R1, =0x0        ;Disable watchdog COPT
    STR R1, [R0]        ;
    
respondido por el ns533

Lea otras preguntas en las etiquetas