48 rivejä
No EOL
1,1 KiB
ArmAsm
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
|
|
|