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