chti23/git/PjtKEIL_StepSon/Src/GestionSon.s
2023-06-02 14:59:59 +02:00

112 lines
No EOL
2.2 KiB
ArmAsm

PRESERVE8
THUMB
include .\Driver\DriverJeuLaser.inc
; ====================== zone de réservation de données, ======================================
;Section RAM (read only) :
area mesdata,data,readonly
;Section RAM (read write):
area maram,data,readwrite
SortieSon dcw 0
Index dcd 0
Res dcw 719
export CallbackSon
export StartSon
extern Son
extern LongueurSon
extern TIM4
EXPORT SortieSon
EXPORT Index
; ===============================================================================================
;Section ROM code (read only) :
area moncode,code,readonly
; écrire le code ici
;int tab Son
;int index
;short sortieSon
;int callBack
; int decalage = 1<<15;
; double echelle = 719/(1<<16) //decalage*2
; if(index < LongueurSon) {
; sortieSon = (Son[index] +decalage)*echelle
;
; index += 1;
; }
; return sortieSon
;
StartSon proc
push {lr}
ldr r0,=Index
mov r1,#0
str r1,[r0]
pop {pc}
endp
;CallbackSon mov r0,=Son
CallbackSon proc
; On récupère l'adresse du tableau Son et de l'index
push {lr}
ldr r0,=Son ;contient l'adresse du tableau Son
ldr r2,=Index
ldr r3,[r2] ;contient la valeur de Index
; if(index < LongueurSon)
push {r0}
ldr r0,=LongueurSon
cmp r0, r2
bge exit ; on quitte dans le cas contraire
pop{r0}
; sortieSon = (Son[index] +decalage)*echelle
ldrsh r1, [r0,r3,lsl #1] ;r1 contient Son[Index]
ldr r0,=SortieSon ;r0 contient l'adresse de la variable SortieSon où on lira le son
;mise à echelle
push {r0,r2,r3}
; Variable décalage
mov r3,#1
lsl r0,r3,#15
add r1,r1,r0 ;ajout de decalage à Son[index]
;Calcul mise à l'échelle (719/2^16)
ldr r2,=Res ; Res contient 719
ldrh r2,[r2] ; on met 719 dans r2
mul r1,r1,r2 ; on multiplie 719 par (Son[Index]+decalage) dans r1
lsr r1,r1,#16 ; on divise par 2^16 dans r1
pop {r0,r2,r3}
;fin mise à échelle
strh r1,[r0] ; On écrit cette valeur dans SortieSon
mov r0,r1 ; r0 contient la valeur de SortieSon (donnée en argument de la fonction suivante)
bl PWM_Set_Value_TIM3_Ch3
; index += 1;
add r3,r3,#1
str r3,[r2] ; On ajoute 2 à l'index
exit pop {pc}
endp
END