chti23/soft/PjtKEIL_StepDeb_1/Src/Delay.s
2023-05-22 12:13:10 +02:00

62 lines
No EOL
1.7 KiB
ArmAsm

PRESERVE8
THUMB
; ====================== zone de réservation de données, ======================================
;Section RAM (read only) :
area mesdata,data,readonly
;Section RAM (read write):
area maram,data,readwrite
VarTime dcd 0 ; short_int* VarTime = malloc() memset(VarTime,0,sizeof...)
; ===============================================================================================
;constantes (équivalent du #define en C)
TimeValue equ 900000 ; #define TIMEVALUE 900000
EXPORT Delay_100ms ; la fonction Delay_100ms est rendue publique donc utilisable par d'autres modules.
EXPORT VarTime
;Section ROM code (read only) :
area moncode,code,readonly
; REMARQUE IMPORTANTE
; Cette manière de créer une temporisation n'est clairement pas la bonne manière de procéder :
; - elle est peu précise
; - la fonction prend tout le temps CPU pour... ne rien faire...
;
; Pour autant, la fonction montre :
; - les boucles en ASM
; - l'accés écr/lec de variable en RAM
; - le mécanisme d'appel / retour sous programme
;
; et donc possède un intérêt pour débuter en ASM pur
Delay_100ms proc ; procédure
ldr r0,=VarTime ; *r0 = VarTime (= 0)
ldr r1,=TimeValue ; *r1 = TimeValue
str r1,[r0] ; met la valeur TimeValue stockée dans R1 dans l'adresse mémoire
; spécifiée dans R0
BoucleTempo
ldr r1,[r0] ; r1 = *r0
subs r1,#1 ; r1 = r1 - 1 (avec retenue)
str r1,[r0] ; same que en haut
bne BoucleTempo ; branchement qui appelle BoucleTempo si
; l'instruction d'avant est non equal
bx lr ; retour de fonction
endp
END