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