PRESERVE8 THUMB ; ====================== zone de réservation de données, ====================================== ;Section RAM (read only) : area mesdata,data,readonly IMPORT PWM_Set_Value_TIM3_Ch3 IMPORT LongueurSon IMPORT Son ;Section RAM (read write): area maram,data,readwrite IndexSon DCW 5512 SortieSon DCW 0 EXPORT SortieSon ; =============================================================================================== EXPORT CallbackSon EXPORT StartSon ;Section ROM code (read only) : area moncode,code,readonly ; écrire le code ici StartSon proc push {lr} ldr r0, =IndexSon mov r1, #0 str r1, [r0] pop {lr} bx lr ENDP CallbackSon proc push {lr} ldr r0, =IndexSon ; r0 = &IndexSon ldrh r1, [r0] ; r1 = IndexSon ldr r2, =LongueurSon ; r2 = &LongueurSon ldr r3, [r2] ; r3 = LongueurSon cmp r1, r3 bge DoNothing ldr r3, =Son ; r3 = &Son ldrsh r2, [r3, r1, LSL#1] ; r2 = Son[IndexSon] add r2, #0x8000 ; translater de [-32768;32767] à [0;65535] mov r7, #720 ; r7 car pas besoin de le sauvegarder mul r2, r7 ; on veut passer r2 de [0;65535] à [0;719], on multiplie par 720 puis LSR de 16 pour eviter une instruction de division lsr r2, #16 add r1, #1 ; r1 = IndexSon + 1 str r1, [r0] ; IndexSon++; ldr r0, =SortieSon ; r0 = &SortieSon strh r2, [r0] ; SortieSon = ce qu'on veut mov r0, r2 bl PWM_Set_Value_TIM3_Ch3 DoNothing pop {lr} bx lr ENDP END