grpD_Lanard_ElKhatiri/soft/PjtKEIL_StepSon/Src/GestionSon.s
2023-05-24 19:28:15 +02:00

121 lines
No EOL
1.5 KiB
ArmAsm

PRESERVE8
THUMB
; ====================== zone de réservation de données, ======================================
;Section RAM (read only) :
area mesdata,data,readonly
;Section RAM (read write):
area maram,data,readwrite
; ===============================================================================================
include ../Driver/DriverJeuLaser.inc
export CallbackSon
export SortieSon
extern LongueurSon
extern Son
export StartSon
Index DCD 0
export Index
SortieSon DCW 0
;Section ROM code (read only) :
area moncode,code,readonly
; écrire le code ici
CallbackSon proc
ldr r0,=Index
ldr r1,[r0]
ldr r2,=Son
ldr r3,LongueurSon
push {r4}
push {r5}
push {r6}
push {r7}
mov r4, #2
mul r3,r4
ldr r7,[r0] ; comparaison de la valeur de l'index pour savoir si c'est la fin
cmp r3,r7
beq FinIndex
cmp r1,r3
ble notEqual
notEqual
ldrsh r5,[r2,r1]
mov r4,#32768
add r5,r5,r4
mov r4,#719
mul r5,r4
mov r4,#65535
udiv r5,r4
ldr r6,=SortieSon
strh r5,[r6]
push {r1}
push {lr}
push {r0}
mov r0,r5
bl PWM_Set_Value_TIM3_Ch3
pop {r0}
pop {lr}
pop {r1}
add r1, #2
str r1,[r0]
pop {r7}
pop {r6}
pop {r5}
pop {r4}
bx lr
ENDFUNC
StartSon proc
ldr r0, =Index
mov r2,#0
str r2,[r0]
bx lr
endp
FinIndex
push {r8}
mov r8,#-1
str r8,[r0]
pop {r8}
pop {r7}
pop {r6}
pop {r5}
pop {r4}
bx lr
endp
END