dft marche bien

This commit is contained in:
Remi Pitault 2023-05-22 11:18:06 +02:00
parent c20157a75b
commit 1de10927ba
5 changed files with 70 additions and 38 deletions

View file

@ -22,58 +22,60 @@
; écrire le code ici ; écrire le code ici
EXPORT DFT_ModuleAuCarre EXPORT DFT_ModuleAuCarre
DFT_PartieReelle PROC DFT_PartieReelle PROC
push {lr, r4-r7} push {lr, r4, r5, r6}
ldr r3, =TabCos ldr r3, =TabCos
mov r4, #0 mov r4, #0
mov r6, #0
mov r7, #0 mov r7, #0
Boucle1 Boucle1
mul r6, r1, r4 add r6, r1
and r6, #63 and r6, #63
ldrsh r2, [r3, r6, LSL#1] ldrsh r2, [r3, r6, LSL#1]
ldrsh r5, [r0, r6, LSL#1] ldrsh r5, [r0, r4, LSL#1]
mul r5, r2, r5 mul r5, r2, r5
add r7, r5 add r7, r5
add r4, #1 add r4, #1
cmp r4, #64 cmp r4, #64
blt Boucle1 blt Boucle1
mov r0, r7 mov r0, r7
pop {lr, r4-r7} pop {lr, r4, r5, r6}
bx lr bx lr
ENDP ENDP
DFT_PartieImaginaire PROC DFT_PartieImaginaire PROC
push {lr, r4-r7} push {lr, r4, r5, r6}
ldr r3, =TabSin ldr r3, =TabSin
mov r4, #0 mov r4, #0
mov r6, #0
mov r7, #0 mov r7, #0
Boucle2 Boucle2
mul r6, r1, r4 add r6, r1
and r6, #63 and r6, #63
ldrsh r2, [r3, r6, LSL#1] ldrsh r2, [r3, r6, LSL#1]
ldrsh r5, [r0, r6, LSL#1] ldrsh r5, [r0, r4, LSL#1]
mul r5, r2, r5 mul r5, r2, r5
add r7, r5 add r7, r5
add r4, #1 add r4, #1
cmp r4, #64 cmp r4, #64
blt Boucle2 blt Boucle2
mov r0, r7 mov r0, r7 ; 10.22
pop {lr, r4-r7} pop {lr, r4, r5, r6}
bx lr bx lr
ENDP ENDP
DFT_ModuleAuCarre PROC DFT_ModuleAuCarre PROC
push {lr, r0-r7} push {r0, r4, lr}
bl DFT_PartieReelle bl DFT_PartieReelle
mov r4, r0 mov r4, r0
pop {r0} pop {r0}
bl DFT_PartieImaginaire bl DFT_PartieImaginaire
smull r1, r3, r0, r0 smull r1, r3, r0, r0
smull r2, r7, r4, r4 smull r2, r7, r4, r4
;adds r1, r2 adds r1, r2
add r0, r3, r7 adc r0, r3, r7
pop {lr, r1-r7} pop {r4, lr}
bx lr bx lr
ENDP ENDP

View file

@ -13,7 +13,7 @@ void mesure() {
Stop_DMA1; Stop_DMA1;
for (int i = 0; i < 64; i++) for (int i = 0; i < 64; i++)
coeff[i] = DFT_ModuleAuCarre(dma_buf, i); coeff[i] = DFT_ModuleAuCarre(&(dma_buf[0]), i);
} }
int main(void) int main(void)
@ -26,22 +26,20 @@ int main(void)
// Après exécution : le coeur CPU est clocké à 72MHz ainsi que tous les timers // Après exécution : le coeur CPU est clocké à 72MHz ainsi que tous les timers
CLOCK_Configure(); CLOCK_Configure();
//Init_TimingADC_ActiveADC_ff(ADC1, 72); Init_TimingADC_ActiveADC_ff(ADC1, 72);
//Single_Channel_ADC(ADC1, 2); Single_Channel_ADC(ADC1, 2);
//Init_Conversion_On_Trig_Timer_ff(ADC1, TIM2_CC2, 225); Init_Conversion_On_Trig_Timer_ff(ADC1, TIM2_CC2, 225);
//Init_ADC1_DMA1(0, dma_buf); Init_ADC1_DMA1(0, dma_buf);
//
//Systick_Period_ff(72000000 * 5 / 1000); Systick_Period_ff(72000000 * 5 / 1000);
//Systick_Prio_IT(0, mesure); Systick_Prio_IT(0, mesure);
//SysTick_On; SysTick_On;
//SysTick_Enable_IT; SysTick_Enable_IT;
//============================================================================ //============================================================================
while (1) while (1)
{ {
for (int i = 1; i < 64; i++)
coeff[i] = DFT_ModuleAuCarre(&LeSignal, i);
} }
} }

View file

@ -22,17 +22,18 @@
; écrire le code ici ; écrire le code ici
EXPORT DFT_ModuleAuCarre EXPORT DFT_ModuleAuCarre
DFT_PartieReelle PROC DFT_PartieReelle PROC
push {lr, r4, r5, r6} push {lr, r4, r5, r6}
ldr r3, =TabCos ldr r3, =TabCos
mov r4, #0 mov r4, #0
mov r6, #0
mov r7, #0 mov r7, #0
Boucle1 Boucle1
mul r6, r1, r4 add r6, r1
and r6, #63 and r6, #63
ldrsh r2, [r3, r6, LSL#1] ldrsh r2, [r3, r6, LSL#1]
ldrsh r5, [r0, r6, LSL#1] ldrsh r5, [r0, r4, LSL#1]
mul r5, r2, r5 mul r5, r2, r5
add r7, r5 add r7, r5
add r4, #1 add r4, #1
@ -47,18 +48,19 @@ DFT_PartieImaginaire PROC
push {lr, r4, r5, r6} push {lr, r4, r5, r6}
ldr r3, =TabSin ldr r3, =TabSin
mov r4, #0 mov r4, #0
mov r6, #0
mov r7, #0 mov r7, #0
Boucle2 Boucle2
mul r6, r1, r4 add r6, r1
and r6, #63 and r6, #63
ldrsh r2, [r3, r6, LSL#1] ldrsh r2, [r3, r6, LSL#1]
ldrsh r5, [r0, r6, LSL#1] ldrsh r5, [r0, r4, LSL#1]
mul r5, r2, r5 mul r5, r2, r5
add r7, r5 add r7, r5
add r4, #1 add r4, #1
cmp r4, #64 cmp r4, #64
blt Boucle2 blt Boucle2
mov r0, r7 mov r0, r7 ; 10.22
pop {lr, r4, r5, r6} pop {lr, r4, r5, r6}
bx lr bx lr
ENDP ENDP

View file

@ -1,6 +1,8 @@
#include "DriverJeuLaser.h" #include "DriverJeuLaser.h"
extern int DFT_ModuleAuCarre(short int* Signal64ech, char k); extern int DFT_ModuleAuCarre(short int* Signal64ech, char k);
extern int DFT_PartieReelle(short int* Signal64ech, char k);
extern int DFT_PartieImaginaire(short int* Signal64ech, char k);
extern int16_t LeSignal; extern int16_t LeSignal;
unsigned int test = 0; unsigned int test = 0;
@ -26,8 +28,9 @@ while (1)
{ {
if (once) { if (once) {
once = 0; once = 0;
//for (int i = 0; i < 64; i++) for (int i = 0; i < 64; i++)
test = DFT_ModuleAuCarre(&LeSignal, 1); test = DFT_ModuleAuCarre(&LeSignal, i);
} }
} }
} }

View file

@ -153,7 +153,24 @@
<Name>-U066CFF574857847167074929 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)</Name> <Name>-U066CFF574857847167074929 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)</Name>
</SetRegEntry> </SetRegEntry>
</TargetDriverDllRegistry> </TargetDriverDllRegistry>
<Breakpoint/> <Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>32</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134218380</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\Src\principal.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\StepDFT\Src/principal.c\32</Expression>
</Bp>
</Breakpoint>
<WatchWindow1> <WatchWindow1>
<Ww> <Ww>
<count>0</count> <count>0</count>
@ -185,6 +202,16 @@
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>test</ItemText> <ItemText>test</ItemText>
</Ww> </Ww>
<Ww>
<count>6</count>
<WinNumber>1</WinNumber>
<ItemText>i</ItemText>
</Ww>
<Ww>
<count>7</count>
<WinNumber>1</WinNumber>
<ItemText>test</ItemText>
</Ww>
</WatchWindow1> </WatchWindow1>
<MemoryWindow1> <MemoryWindow1>
<Mm> <Mm>
@ -240,7 +267,7 @@
<Wi> <Wi>
<IntNumber>0</IntNumber> <IntNumber>0</IntNumber>
<FirstString>`test</FirstString> <FirstString>`test</FirstString>
<SecondString>FF000000000000000000E0C10000C0FFFFFFDF410000000000000000000000000000000074657374000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F0A000000000000000000000000000000000000007C020008</SecondString> <SecondString>FF00000000000000000000000000809AE8FFCF410000000000000000000000000000000074657374000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F10000000000000000000000000000000000000007C020008</SecondString>
</Wi> </Wi>
</LogicAnalyzers> </LogicAnalyzers>
<DebugDescription> <DebugDescription>