; 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