From d83c9d32ce26de87b1dfea88a717649c4f06e398 Mon Sep 17 00:00:00 2001 From: Cavailles Kevin Date: Tue, 31 Mar 2020 23:32:35 +0200 Subject: [PATCH] commentaires + ajustements --- Activite_2_1/Src/calculCarre.s | 21 +++-- Activite_2_1/Src/signalCarre.s | 8 +- Activite_2_2/Project.uvoptx | 152 ++++++++++++++++++++++++++++----- Activite_2_2/Src/calcul_dft.s | 46 +++++----- 4 files changed, 168 insertions(+), 59 deletions(-) diff --git a/Activite_2_1/Src/calculCarre.s b/Activite_2_1/Src/calculCarre.s index fdacae7..ddc4c6e 100644 --- a/Activite_2_1/Src/calculCarre.s +++ b/Activite_2_1/Src/calculCarre.s @@ -8,21 +8,20 @@ calcul_carre proc - push {r4} - push {r5} + push {r4,r5} + - ldr r4, =TabSin ;on charge les tables sin et cos - ldr r5, =TabCos - ldrh r2, [r4, r0, LSL #1] ;on récupère la i-ème valeur de chacune des tables - ldrh r0, [r5, r0, LSL #1] + ldr r4, =TabCos ;on charge les tables sin et cos + ldr r5, =TabSin + ldrh r1, [r4, r0, LSL #1] ;on récupère la i-ème valeur de chacune des tables + ldrh r2, [r5, r0, LSL #1] - mul r0, r0 ;on effectue le calcul cos²+sin² - mul r2, r2 - add r0, r2 + mul r1, r1, r1 ;on calcule cos² + mla r0, r2, r2, r1 ;puis on calcule sin*sin + cos² dans r0 - pop {r5} - pop {r4} + pop {r4,r5} + bx lr endp diff --git a/Activite_2_1/Src/signalCarre.s b/Activite_2_1/Src/signalCarre.s index dd689cd..5ca01b3 100644 --- a/Activite_2_1/Src/signalCarre.s +++ b/Activite_2_1/Src/signalCarre.s @@ -14,16 +14,16 @@ timer_callback proc ; mise a 1 de PB1 push {lr} - ldr r1, =etat ;chargement de la variable etat + ldr r1, =etat ;chargement de la variable etat ldr r1, [r1] ldr r3, =GPIOB_BSRR - cmp r1, #0x00020000 ;if(etat == 0){etat =1}else{etat=0} + cmp r1, #0x00020000 ;if(etat == 0){etat =1}else{etat=0} beq eq bne noteq gdc ldr r0, =etat - str r1, [r0] ;on met à jour etat - str r1, [r3] ;et GPIOB_BSRR + str r1, [r0] ;on met à jour etat + str r1, [r3] ;et GPIOB_BSRR ; N.B. le registre BSRR est write-only, on ne peut pas le relire diff --git a/Activite_2_2/Project.uvoptx b/Activite_2_2/Project.uvoptx index 321d6fc..4c33385 100644 --- a/Activite_2_2/Project.uvoptx +++ b/Activite_2_2/Project.uvoptx @@ -157,6 +157,86 @@ 0 0 + 56 + 1 +
134225642
+ 0 + 0 + 0 + 0 + 0 + 1 + .\Src\calcul_dft.s + + \\CHTI\Src/calcul_dft.s\56 +
+ + 1 + 0 + 28 + 1 +
134225588
+ 0 + 0 + 0 + 0 + 0 + 1 + .\Src\calcul_dft.s + + \\CHTI\Src/calcul_dft.s\28 +
+ + 2 + 0 + 27 + 1 +
134225586
+ 0 + 0 + 0 + 0 + 0 + 1 + .\Src\calcul_dft.s + + \\CHTI\Src/calcul_dft.s\27 +
+ + 3 + 0 + 23 + 1 +
134225578
+ 0 + 0 + 0 + 0 + 0 + 1 + .\Src\calcul_dft.s + + \\CHTI\Src/calcul_dft.s\23 +
+ + 4 + 0 + 18 + 1 +
134225570
+ 0 + 0 + 0 + 0 + 0 + 1 + .\Src\calcul_dft.s + + \\CHTI\Src/calcul_dft.s\18 +
+ + 5 + 0 18 1
134225484
@@ -171,25 +251,9 @@ \\CHTI\Src/principal.c\18
- 1 + 6 0 - 31 - 1 -
134225568
- 0 - 0 - 0 - 0 - 0 - 1 - .\Src\calcul_dft.s - - \\CHTI\Src/calcul_dft.s\31 -
- - 2 - 0 - 19 + 30 1
0
0 @@ -198,7 +262,55 @@ 0 0 0 - .\Src\principal.c + .\Src\calcul_dft.s + + +
+ + 7 + 0 + 57 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + .\Src\calcul_dft.s + + +
+ + 8 + 0 + 58 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + .\Src\calcul_dft.s + + +
+ + 9 + 0 + 60 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + .\Src\calcul_dft.s
@@ -219,7 +331,7 @@ 1 10 - 0x08001F28 + 0x08001F30 0 diff --git a/Activite_2_2/Src/calcul_dft.s b/Activite_2_2/Src/calcul_dft.s index 45db3e4..f0bd096 100644 --- a/Activite_2_2/Src/calcul_dft.s +++ b/Activite_2_2/Src/calcul_dft.s @@ -1,7 +1,6 @@ ; ce programme est pour l'assembleur RealView (Keil) thumb area moncode, code, readonly - export calcul_dft_moitie export calcul_dft import TabCos import TabSin @@ -11,45 +10,44 @@ calcul_dft proc push {lr} - ;push {r1} + push {r0,r1,r4,r5} ldr r2, =TabCos - bl calcul_dft_moitie ;recuperation Re(k) dans r0 + bl calcul_partie_dft ;recuperation Re(k) dans r0 - ;pop {r1} + smull r4, r5, r0, r0 ;Re(k)² dans r4, r5 + pop {r0,r1} ;recupereration de TabSig et k dans r0,r1 - ;push {r0} ;mise de Re(k) dans la pile - ;ldr r2, =TabSin - ;bl calcul_dft_moitie ;mise de -Im(k) dans r0 + ldr r2, =TabSin + bl calcul_partie_dft ;mise de -Im(k) dans r0 - ;mul r0, r0, r0 ;(-Im(k))² + smlal r4, r5, r0, r0 ;Re²+(-Im(k))² - ;pop {r1} ;mise de Re(k) dans r1 - ;mul r1, r1, r1 ;Re(k)² - ;add r0, r0, r1 ;addition de Re(k)² + Im(k)² - pop {lr} + mov r0, r5 ;recuperation des bits de poids fort de M2(k) + pop {lr, r4,r5} bx lr endp -calcul_dft_moitie proc - push {lr,r4-r6} +calcul_partie_dft proc + push {lr,r4-r7} - mov r4, r0 - mov r5, r2 - mov r6, r1 + mov r4, r0 ;chargement de TabSig dans r4 + mov r5, r2 ;chargement de TabCos/TabSin dans r5 + mov r6, r1 ;chargement de k dans r6 + mov r7, #0 ;ik dans r7 mov r3, #0 ;i=0 dans r3 mov r0, #0 ;resultat de la somme dans r0 -boucle ldrh r2, [r4, r3, LSL #1] ;chargement de x(i) +boucle ldrh r1, [r4, r3, LSL #1] ;chargement de x(i) + ldrsh r2, [r5, r7, LSL #1] ;chargement de cos(ik..), ldrs(!)h tres important, ne fonctionne pas sinon - mul r1, r3, r6 ;multiplication ik dans r1 - and r1, r1, #63 ;modulo de ik par 64 + mla r0, r1, r2, r0 ;multiplication + ajout au resultat de x(i)cos(ik..) + + add r7, r7, r6 ;mise a jour de ik + and r7, r7, #63 ;modulo de ik par 64 - ldrh r1, [r5, r1, LSL #1] ;chargement de cos(ik..) - mul r12, r1, r2 ;multiplication x(i)cos(ik..) - add r0, r0, r12 ;ajout dans la somme add r3, #1 ;incrementation de i cmp r3, #64 ;test de i bne boucle @@ -57,7 +55,7 @@ boucle ldrh r2, [r4, r3, LSL #1] ;chargement de x(i) sortie - pop {lr,r4-r6} + pop {lr,r4-r7} bx lr endp