La interrupción del systick STM32 no se está disparando

0

Por favor alguien me ayude con mi código. Soy un novato y estoy tratando de apagar el LED dentro del controlador de systick. Lo intenté con GDB pero el manejador de systick nunca se activa. ¿Qué me estoy perdiendo?

.section interrupt_vector, "a", %progbits

.word 0x0
.word reset_handler + 1
.org 0x3C
.word stk_handler + 1

.section interrupt_handler, "ax", %progbits

reset_handler:

//enable GPIOA

LDR R0, =AHB1ENR
LDR R1, [R0]
MOV R2, GPIOA_ENABLE
ORR R3, R1, R2
STR R3, [R0]

//configure GPIOA_MODER 

LDR R0, =GPIOA_MODER
LDR R1, [R0]
MOV R2, PIN5_GPIO_MODER
ORR R3, R1, R2
STR R3, [R0]

//enable systick

LDR R0, =STK_LOAD
MOV R1, STK_LOAD_MASK
STR R1, [R0]

LDR R0, =STK_VAL
MOV R1, 0x0
STR R1, [R0]

LDR R0, =STK_CTRL
MOV R1, STK_CTRL_MASK
STR R1, [R0]

//Turn LED on

LDR R0, =GPIOA_ODR
LDR R1, [R0]
MOV R2, PIN5_GPIO_ODR
ORR R3, R1, R2
STR R3, [R0]

LDR R0, =main + 1
BX R0

stk_handler:

LDR R0, =GPIOA_ODR
MOV R1, 0x0
STR R1, [R0]

LDR R0, main + 1
BX R0

main:

nop
b main
    
pregunta Saber

1 respuesta

1

Su código no configura el SP correctamente, lo que desencadena una falla tan pronto como la primera interrupción de SysTick.

Tenga en cuenta que para volver de la interrupción, debe usar BX LR o POP PC si ha empujado LR a la pila.

    
respondido por el Turbo J

Lea otras preguntas en las etiquetas