	PRESERVE8
	THUMB   
	include ./Driver/DriverJeuLaser.inc


; ====================== zone de r�servation de donn�es,  ======================================
;Section RAM (read only) :
	area    mesdata,data,readonly
	extern Son 
	extern LongueurSon

;Section RAM (read write):
	area    maram,data,readwrite
		
	export SortieSon
SortieSon dcw 0 ;Declaration d'une variable sur 16bits
index dcd 0
		

	
; ===============================================================================================
	


		
;Section ROM code (read only) :		
	area    moncode,code,readonly
; �crire le code ici	

	export CallbackSon
CallbackSon proc

	push {lr}
	push {r5}

	ldr r0, =Son  ;r0=&Son
	ldr r2, =index  ; r2=&index
	ldr r1, [r2] ; r1 = index
	
	ldr r5, = LongueurSon ; r5 = &LongueurSon
	ldr r5, [r5] ; r5 = LongueurSon ; r5 = LongueurSon
	lsl r5, #1; r5 = 2 x LongueurSon
	
	cmp r1, r5 ; compare index et length
	bgt done
	
	ldrsh r3, [r0, r1] ;r3=son[index]
	; on aurait pu faire ldrsh r3, [r0, r1, lsl #1] et incrementer de 1
	add r1, #2 ; index +=2
	str r1, [r2] ; index en memoire=r1
	
	;Normalisation de la valeur son [index]
	add r3, #32768 ;r3+=32278
	
	push {r4}
	mov r4, #719 ; r4 = 719 
	mul r3,r4  ;r3*=719
	asr r3, #16 ;r3/=65536
	pop {r4}
	
	;On met la valeur modifiee dans SortieSon
	ldr r0, =SortieSon  ;r0=&SortieSon
	str r3, [r0]
	
	push {r0-r3}
	mov r0,r3
	bl PWM_Set_Value_TIM3_Ch3
	pop {r0-r3}

done

	pop {r5}
	pop {pc}
	endp
	

	export StartSon
StartSon proc
	push {lr}
	ldr r2, =index  ; r2=&index
	mov r1, #0 ;r1 =0
	str r1, [r2] ;on ecrit 0 dans index
	
	
	pop {pc}
	endp




		
		
	END	