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