From e6d340948e2157de251d5a89deaaa7b51f7a1155 Mon Sep 17 00:00:00 2001 From: Oussama Hannouch Date: Tue, 23 May 2023 21:41:55 +0200 Subject: [PATCH] Update 'soft/PjtKEIL_StepSon/Src/GestionSon.s' --- soft/PjtKEIL_StepSon/Src/GestionSon.s | 93 +++++++++++++-------------- 1 file changed, 44 insertions(+), 49 deletions(-) diff --git a/soft/PjtKEIL_StepSon/Src/GestionSon.s b/soft/PjtKEIL_StepSon/Src/GestionSon.s index 048a580..932c75d 100644 --- a/soft/PjtKEIL_StepSon/Src/GestionSon.s +++ b/soft/PjtKEIL_StepSon/Src/GestionSon.s @@ -1,6 +1,11 @@ - PRESERVE8 +PRESERVE8 THUMB + + import LongueurSon + import PeriodeSonMicroSec + import Son + include Driver/DriverJeuLaser.inc ; ====================== zone de réservation de données, ====================================== ;Section RAM (read only) : @@ -10,59 +15,49 @@ ;Section RAM (read write): area maram,data,readwrite -SortieSon equ 0 -Index equ 0 - - import LongueurSon - import Son - import PWM_Set_Value_TIM3_Ch3 - export CallBackSon + +Son_index dcd 0 +SortieSon dcw 0 + ; =============================================================================================== - - + + EXPORT Son_index + EXPORT SortieSon ;Section ROM code (read only) : area moncode,code,readonly -; écrire le code ici - - -CallBackSon proc - ldr r0, =Index ; Chargement de l'adresse mémoire de la variable "Index" dans le registre r0 - ldr r1, [r0] ; Chargement de la valeur de la variable "Index" depuis la mémoire dans le registre r1 - - ldr r2, =LongueurSon ; Chargement de l'adresse mémoire de la variable "LongueurSon" dans le registre r2 - ldr r2, [r2] ; Chargement de la valeur de la variable "LongueurSon" depuis la mémoire dans le registre r2 +; écrire le code ici + EXPORT StartSon + EXPORT CallbackSon - cmp r1, r2 ; Comparaison de la valeur de la variable "Index" (r1) avec la valeur de la variable "LongueurSon" (r2) - beq FIN_Son ; Branchement à l'étiquette "FIN_Son" si les valeurs comparées sont égales - - add r1, #1 ; Ajout de 1 à la valeur du registre r1 - str r1, [r0] ; Stockage de la valeur de r1 dans la mémoire à l'adresse de la variable "Index" - sub r1, #1 ; Soustraction de 1 à la valeur du registre r1 - ldr r3, =Son ; Chargement de l'adresse mémoire de la variable "Son" dans le registre r3 - ldrsh r3, [r3,r1,LSL #1] ; Chargement du contenu de la variable "Son" depuis la mémoire à l'adresse "r3+r1*2" dans le registre r3 - - add r3, #0x8000 ; Ajout de la valeur hexadécimale 0x8000 (32768 en décimal) à la valeur de r3 - mov r0, #0x2CF ; Stockage de la valeur hexadécimale 0x2CF (719 en décimal) dans le registre r0 - mul r3,r0 ; Multiplication de la valeur de r3 par la valeur de r0 - mov r0,#0xFFFF ; Stockage de la valeur hexadécimale 0xFFFF (65535 en décimal) dans le registre r0 - udiv r3,r0 ; Division de la valeur de r3 par la valeur de r0 sans signe - - - ldr r0, =SortieSon ; Chargement de l'adresse mémoire de la variable "SortieSon" dans le registre r0 - str r3, [r0] ; Stockage de la valeur de r3 dans la mémoire à l'adresse de la variable "SortieSon" - mov r0, r3 ; Copie de la valeur de r3 dans le registre r0 - - bl PWM_Set_Value_TIM3_Ch3 ; Appel d'une fonction nommée "PWM_Set_Value_TIM3_Ch3" avec la valeur de r0 comme argument +StartSon proc + mov r0, #0 ; Charger la valeur 0 dans le registre r0 + ldr r1, =Son_index ; Charger l'adresse de la variable Son_index dans le registre r1 + str r0, [r1] ; Stocker la valeur de r0 dans la variable Son_index + bx lr ; Retourner à l'appelant + endp; Fin de la procédure StartSon -FIN_Son - mov r0, #0 ; Stockage de la valeur zéro dans le registre r0 - ldr r2, =SortieSon ; Chargement de l'adresse mémoire de la variable "SortieSon" dans le registre r2 - str r0, [r2] ; Stockage de la valeur de r0 dans la mémoire à l'adresse de la variable "SortieSon" - bx lr ; Retour de la fonction avec l'utilisation de la valeur contenue dans le registre de lien (lr) - - endp - - END \ No newline at end of file +CallbackSon proc + ldr r1, =LongueurSon + ldr r0, [r1] + ldr r1, =Son_index + ldr r2, [r1] + cmp r0, r2 + bls fin ; if (LongeurSon <= Son_index) ; + ldr r3, =Son + ldrsh r0, [r3, r1, lsl #1] ; r0 = Son[Son_index] + add r0, #32768 + mov r3, #720 + mul r0, r3 + lsr r0, #16 ;x in [-32768; 32767] -> x in [0; 719] // divise r0 par 65536 + ldr r3, =SortieSon + str r0, [r3] ; Sortie_son = x + add r2, r2, #1 + str r2, [r1] ; Son_index++; + b PWM_Set_Value_TIM3_Ch3 +fin + bx lr + endp + END \ No newline at end of file