be_chti/Src/gestionSon.s
2020-05-27 13:35:57 +02:00

48 rivejä
No EOL
1,1 KiB
ArmAsm

; ce programme est pour l'assembleur RealView (Keil)
thumb
area moncode, code, readonly
export timer_callback
extern etat
;
E_POS equ 0
E_TAI equ 4
E_SON equ 8
E_RES equ 12
E_PER equ 16
COMPOSANTE_CONTINUE equ 32768
TIM3_CCR3 equ 0x4000043C ; adresse registre PWM
timer_callback proc
push{r4}
ldr r1, =etat ;Chargement de la structure etat
ldr r2, [r1, #E_POS] ;Récupération de la position actuelle
ldr r3, [r1,#E_TAI] ;Récupération de la taille du fichier de son
cmp r2, r3 ;Si position >= taille
bge silence ;On a lu tous les échantillons et on termine la procédure
ldr r4, [r1, #E_RES] ;Sinon, on charge la résolution,
ldr r3, [r1, #E_SON] ;Le tableau de son, puis l'échantillon
ldrsh r3, [r3, r2,lsl #1]
add r3, r3, #COMPOSANTE_CONTINUE ;On ajoute la composante continue
mul r3, r3, r4 ;On multiplie par la résolution
lsr r3, #16 ;Puis on divise par 2^16
ldr r4, =TIM3_CCR3 ;On stocke ensuite le résultat dans le TIM3_CCR3 de 32 bits
str r3, [r4]
add r2,#1 ;On incrémente ensuite la position pour l'échantillon suivant
str r2,[r1, #E_POS]
silence
pop{r4}
bx lr
endp
end