	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			; VarTime est un entier

	
; ===============================================================================================
	
;constantes (équivalent du #define en C)
; addr 0x20000000
TimeValue	equ 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

; Temps réel d'exécution : 100,00006 ms
Delay_100ms proc
	
	    ldr r0,=VarTime 		; varTime 
		
		ldr r1,=TimeValue		; r1 := 900000
		str r1,[r0]				; *r0 := 900000
		
BoucleTempo						; LABEL 
		ldr r1,[r0]     		; r1 := 900000
						
		subs r1,#1				; r1 -= 1
		str  r1,[r0]			; *r0 := 900000
		bne	 BoucleTempo		; goto LABEL if r1 > 0
			
		bx lr					; return (pc = lr)
		endp
		
		
	END	