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