__initial_sp EQU 0x20000800
PRESERVE8 ;8byte alignment of the stack (required by ARM)
THUMB ; will use THUMB2 instructions
AREA RESET, DATA, READONLY
__Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler
AREA |.text|, CODE, READONLY
ENTRY
Reset_Handler PROC
LDR r1, =0x4002144C ;address of RCC_AHBENR register
LDR r0, =0x1
LDR r2, [r1]
ORRS r2,r0,r2
STR r2, [r1]
LDR r1, =0x48000000 ;address of GPIOA_MODER register
LDR r0, =0x400 ;configure PA5 as output
LDR r2, [r1]
ORRS r2,r0,r2
STR r2, [r1]
LDR r1, = 0x48000018 ;address of GPIOA_BSRR register
LDR r0, =0x20 ;pin 5 on GPIOA set
LDR r2, =0x200000 ;pin 5 on GPIOA clear
loop
STR r0, [r1]
STR r2, [r1]
B loop
ENDP
END
El código parpadea en la MCU (1 advertencia durante la compilación) pero el LED no parpadea. Al depurar ORRS r2, r0, r2 en GPIOA_MODER, aparece el indicador negativo en PSR y el valor no se carga en GPIOA_MODER. Lo mismo sucede con BSRR.
El LED está conectado a PA5.
Creo que te equivocaste en la dirección de registro RCC_AHB 2 ENR.
La dirección base se proporciona como 0x40021000, el desplazamiento es 0x4C. Entonces la dirección del registro es 0x4002104C y no 0x4002144C.
Entonces, en efecto, no habilita el reloj para el GPIOA, por lo tanto, no pasará nada (no he verificado esas direcciones).
Otra observación: su bucle no tiene retraso, el LED no parpadeará visiblemente para los humanos, ya que se encenderá y apagará en el rango de MHz. Se verá como a la mitad.
Lección: preste especial atención a los números mágicos (siempre), trate de usar símbolos predefinidos; luego, debe prestar especial atención solo una vez.
Siguiente error:
El registro del modo GPIO del puerto A tiene un valor de reinicio de 0xABFFFFFF. ORing otro 1 en eso no cambiará nada.
Primero debe restablecer los bits de configuración para el pin que desea cambiar.
Los Frijoles
0___________
Arsenal