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 SortieSon dcw 0 Index dcd 0x00000000 ; =============================================================================================== EXPORT CallbackSon EXPORT SortieSon EXPORT StartSon EXPORT Index EXTERN Son EXTERN LongueurSon INCLUDE ../Driver/DriverJeuLaser.inc ;Section ROM code (read only) : area moncode,code,readonly ; écrire le code ici CallbackSon proc push {lr} ldr r0, =SortieSon ; r0 = &SortieSon car SortieSon variable ldr r1, =Son ; r1 = &Son ldr r2, =Index ; r2 = &Index ldr r3, =LongueurSon ; r3 = &LongueurSon push {r4} push {r5} push {r6} push {r7} push {r8} push {r9} push {r10} push {r11} ldr r4, [r2] ; r4 = Index ldr r10, [r2] ; r10 = Index ldr r11, [r3] ; r11 = LongueurSon cmp r10, r11 bne notEqual push {r12} mov r12, #-1 str r12, [r2] pop {r12} pop {r11} pop {r10} pop {r9} pop {r8} pop {r7} pop {r6} pop {r5} pop {r4} pop {lr} bx lr notEqual mov r9, #2 mul r4, r9 ; r4 = 2*Index ldrsh r5, [r1, r4] ; r5 = Son[(2*)Index] //ldrsh car 16 bits signés ldr r6, [r0] ; r6 = SortieSon mov r7, #360 mov r8, #32768 mul r5, r7 sdiv r5, r8 adds r5, #360 ; r5 = (r6*360)/32768 + 360 pour la mise à l'échelle entre 0 et 719 des valauers de SortieSon strh r5, [r0] ;SortieSon chargée dans la mémoire //strh car 16 bits signe positif mov r0, r5 adds r10, #1; r10 = Index++ str r10, [r2] ;Index chargée dans la mémoire //str car 32 bits pop {r11} pop {r10} pop {r9} pop {r8} pop {r7} pop {r6} pop {r5} pop {r4} bl PWM_Set_Value_TIM3_Ch3 pop {pc} ENDFUNC StartSon proc ldr r0, =Index; r0 = &Index mov r1, #0 ; r1 = 0 str r1, [r0] ;Index chargée dans la mémoire //str car 32 bits bx lr ENDFUNC END