100 lines
2.7 KiB
NASM
100 lines
2.7 KiB
NASM
|
|
|
|
;************************************************************************
|
|
THUMB
|
|
REQUIRE8
|
|
PRESERVE8
|
|
;************************************************************************
|
|
|
|
include REG_UTILES.inc
|
|
|
|
|
|
;************************************************************************
|
|
; IMPORT/EXPORT Système
|
|
;************************************************************************
|
|
|
|
IMPORT ||Lib$$Request$$armlib|| [CODE,WEAK]
|
|
|
|
|
|
|
|
|
|
; IMPORT/EXPORT de procédure
|
|
|
|
IMPORT Init_Cible
|
|
|
|
|
|
EXPORT main
|
|
|
|
;*******************************************************************************
|
|
|
|
|
|
;*******************************************************************************
|
|
AREA mesdonnees, data, readwrite
|
|
|
|
|
|
|
|
|
|
;*******************************************************************************
|
|
|
|
AREA moncode, code, readonly
|
|
|
|
|
|
|
|
;*******************************************************************************
|
|
; On eteint la LED
|
|
;*******************************************************************************
|
|
Eteint_LED PROC
|
|
|
|
PUSH {R12,R0} ;On stocke R12 dans R0
|
|
LDR R12,=GPIOBASEB ;On recupère l'adresse de base
|
|
MOV R5,#(0x01 << 10) ;1 décalé de 10 dans R5
|
|
STRH R5,[R12,#OffsetReset] ;On stocke la variable R5 à l'adresse 0x0X40010C14 (reset)
|
|
POP {R12,R0} ;On restitue R12 dans R0
|
|
BX LR ;Retour
|
|
;LDR R5,[R12,#0x0C] ;Valeur à l'adresse de l'output
|
|
;AND R5, R5,#~(0x01 << 10) ;OU LOGIQUE pour calculer la valeur a mettre dans l'output
|
|
;STRH R5,[R12,#0x0C] ;Etat du port B (R5) stocké dans l'output
|
|
ENDP
|
|
|
|
;*******************************************************************************
|
|
; On allume la LED
|
|
;*******************************************************************************
|
|
Allume_LED PROC
|
|
|
|
PUSH {R12,R0} ;On stocke R12 dans R0
|
|
LDR R12,=GPIOBASEB ;On recupère l'adresse de base
|
|
MOV R5,#(0x01 << 10) ;1 décalé de 10 dans R5
|
|
STRH R5,[R12,#OffsetSet] ;On stocke la variable R5 à l'adresse 0x0X40010C10 (set)
|
|
POP {R12,R0} ;On restitue R12 dans R0
|
|
BX LR ;Retour
|
|
;LDR R5,[R12,#0x0C] ;Valeur à l'adresse de l'output
|
|
;ORR R5, R5,#(0x01 << 10) ;OU LOGIQUE pour calculer la valeur a mettre dans l'output
|
|
;STRH R5,[R12,#0x0C] ;Etat du port B (R5) stocké dans l'output
|
|
|
|
ENDP
|
|
|
|
|
|
;*******************************************************************************
|
|
; Procédure principale et point d'entrée du projet
|
|
;*******************************************************************************
|
|
main PROC
|
|
;*******************************************************************************
|
|
|
|
|
|
MOV R0,#0;
|
|
BL Init_Cible;
|
|
Boucle
|
|
BL Allume_LED
|
|
BL Eteint_LED
|
|
B Boucle
|
|
|
|
B . ; boucle inifinie terminale...
|
|
|
|
|
|
|
|
|
|
ENDP
|
|
|
|
END
|
|
|
|
;*******************************************************************************
|