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 TableauIndex dcd 0 SortieSon dcd 0 import LongueurSon import Son import PWM_Set_Value_TIM3_Ch3 ; =============================================================================================== export CallBackSon export SortieSon export TableauIndex ;Section ROM code (read only) : area moncode,code,readonly ; écrire le code ici CallBackSon proc ldr r0, =TableauIndex ldr r1, [r0] ; r1 = valeur tableauIndex ldr r2, =LongueurSon ldr r2, [r2] cmp r1, r2 bne jouer ; dans le cas où on joue pas, on laisse la valeur à zéro mov r0, #0 ldr r2, =SortieSon str r0, [r2] bx lr jouer ; on incrémente l'index pour la prochaine fois add r1, #1 ; on l'écrit dans l'espace mémoire à l'avance str r1, [r0] ; puis on décrémente pour récupérer l'index de départ sub r1, #1 ; donc r0 est maintenant libre vu que j'ai plus besoin d'aller écrire dans la mémoire l'index ldr r3, =Son ; on multiplie par deux l'index pour avoir le bon décalage qui est sur 8 bits dans ce cas ; dans r4 on a la valeur de l'index du tableau, je peux donc incrémenter mon index et le store pour libérer r1 dans la suite du code mov r0, #2 mul r1, r0 ldrsh r3, [r3,r1] ;on met le signal en full positif add r3, #32768 ; on fait une règle de trois mov r0, #719 mul r3,r0 mov r0, #65535 udiv r3, r0 ;r0 est libre ici car on a fini les calculs ldr r0, =SortieSon str r3, [r0] ; il faut modifier sortie son pour pouvoir être dans la plage 0;719 au lieu de -32767 mov r0, r3 ; on met cette fois-ci la valeur du point dans R0 pour respecter l'appel AAPCS b PWM_Set_Value_TIM3_Ch3 ;bx lr endp END