diff --git a/soft/PjtKEIL_StepDFT/Src/DFT.s b/soft/PjtKEIL_StepDFT/Src/DFT.s
index 9fc6bc6..f2fce9a 100644
--- a/soft/PjtKEIL_StepDFT/Src/DFT.s
+++ b/soft/PjtKEIL_StepDFT/Src/DFT.s
@@ -21,25 +21,61 @@
area moncode,code,readonly
; écrire le code ici
-
-DFT_ModuleAuCarre PROC
- push {r4, r5}
+ EXPORT DFT_ModuleAuCarre
+
+DFT_PartieReelle PROC
+ push {lr, r4, r5, r6}
+ ldr r3, =TabCos
+ mov r4, #0
mov r7, #0
- mov r5, #0
- ldr r3, =TabCos ; r3 = &TabCos[0];
-Loop
- ldrsh r2, [r3], #2 ; r2 = TabCos[i++]
- ldrsh r4, [r0], #2 ; r5 = Signal[i++]
- add r5, #1 ; i++;
- mul r2, r4 ; r3 = Signal[i] * TabCos[i];
- mul r2, r1 ; r3 = Signal[i] * TabCos[i] * k;
- add r7, r2
- cmp r5, #64
- blt Loop
- pop {r4, r5}
+Boucle1
+ mul r6, r1, r4
+ and r6, #63
+ ldrsh r2, [r3, r6, LSL#1]
+ ldrsh r5, [r0, r6, LSL#1]
+ mul r5, r2, r5
+ add r7, r5
+ add r4, #1
+ cmp r4, #64
+ blt Boucle1
+ mov r0, r7
+ pop {lr, r4, r5, r6}
+ bx lr
+ ENDP
+
+DFT_PartieImaginaire PROC
+ push {lr, r4, r5, r6}
+ ldr r3, =TabSin
+ mov r4, #0
+ mov r7, #0
+Boucle2
+ mul r6, r1, r4
+ and r6, #63
+ ldrsh r2, [r3, r6, LSL#1]
+ ldrsh r5, [r0, r6, LSL#1]
+ mul r5, r2, r5
+ add r7, r5
+ add r4, #1
+ cmp r4, #64
+ blt Boucle2
+ mov r0, r7
+ pop {lr, r4, r5, r6}
+ bx lr
+ ENDP
+
+DFT_ModuleAuCarre PROC
+ push {r0, r4, lr}
+ bl DFT_PartieReelle
+ mov r4, r0
+ pop {r0}
+ bl DFT_PartieImaginaire
+ smull r1, r3, r0, r0
+ smull r2, r7, r4, r4
+ adds r1, r2
+ adc r0, r3, r7
+ pop {r4, lr}
bx lr
ENDP
-
;Section ROM code (read only) :
AREA Trigo, DATA, READONLY
diff --git a/soft/PjtKEIL_StepDFT/Src/principal.c b/soft/PjtKEIL_StepDFT/Src/principal.c
index 77395db..408708a 100644
--- a/soft/PjtKEIL_StepDFT/Src/principal.c
+++ b/soft/PjtKEIL_StepDFT/Src/principal.c
@@ -1,9 +1,10 @@
#include "DriverJeuLaser.h"
-extern void DFT_ModuleAuCarre(short int* Signal64ech, char k);
-extern int16_t* LeSignal;
-
+extern int DFT_ModuleAuCarre(short int* Signal64ech, char k);
+extern int16_t LeSignal;
+unsigned int test = 0;
+unsigned int test2 = 0;
int main(void)
{
@@ -25,8 +26,9 @@ while (1)
{
if (once) {
once = 0;
- DFT_ModuleAuCarre(LeSignal, 1);
-
+ //for (int i = 0; i < 64; i++)
+ test = DFT_ModuleAuCarre(&LeSignal, 1);
+ }
}
}
diff --git a/soft/PjtKEIL_StepDFT/StepDFT.uvoptx b/soft/PjtKEIL_StepDFT/StepDFT.uvoptx
index b329156..d71a9ab 100644
--- a/soft/PjtKEIL_StepDFT/StepDFT.uvoptx
+++ b/soft/PjtKEIL_StepDFT/StepDFT.uvoptx
@@ -75,7 +75,7 @@
1
0
- 0
+ 1
18
@@ -154,6 +154,46 @@
+
+
+ 0
+ 1
+ r7
+
+
+ 1
+ 1
+ r4,0x0A
+
+
+ 2
+ 1
+ r5
+
+
+ 3
+ 1
+ r0
+
+
+ 4
+ 1
+ r3
+
+
+ 5
+ 1
+ test
+
+
+
+
+ 1
+ 0
+ test
+ 0
+
+
0
@@ -174,7 +214,7 @@
0
0
0
- 0
+ 1
0
0
0
@@ -199,8 +239,8 @@
0
- ((portb & 0x00000002) >> 1 & 0x2) >> 1
- FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028706F7274622026203078303030303030303229203E3E2031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F160000000000000000000000000000000000000096020008
+ `test
+ FF000000000000000000E0C10000C0FFFFFFDF410000000000000000000000000000000074657374000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F0A000000000000000000000000000000000000007C020008
@@ -267,7 +307,7 @@
1
0
- 1
+ 0
18