DFT en cours

This commit is contained in:
Cavailles Kevin 2020-03-27 18:28:57 +01:00
parent 6de270033e
commit 609f428e0d
8 changed files with 235 additions and 49 deletions

View file

@ -153,29 +153,19 @@
<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> <WatchWindow1>
<Number>0</Number> <Ww>
<Type>0</Type> <count>0</count>
<LineNumber>9</LineNumber> <WinNumber>1</WinNumber>
<EnabledFlag>1</EnabledFlag> <ItemText>tab</ItemText>
<Address>134225472</Address> </Ww>
<ByteObject>0</ByteObject> </WatchWindow1>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\Src\principal.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\CHTI\Src/principal.c\9</Expression>
</Bp>
</Breakpoint>
<MemoryWindow1> <MemoryWindow1>
<Mm> <Mm>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<SubType>0</SubType> <SubType>10</SubType>
<ItemText>0x20000000</ItemText> <ItemText>0x08001F28</ItemText>
<AccSizeX>0</AccSizeX> <AccSizeX>0</AccSizeX>
</Mm> </Mm>
</MemoryWindow1> </MemoryWindow1>
@ -199,7 +189,7 @@
<AscS3>0</AscS3> <AscS3>0</AscS3>
<aSer3>0</aSer3> <aSer3>0</aSer3>
<eProf>0</eProf> <eProf>0</eProf>
<aLa>1</aLa> <aLa>0</aLa>
<aPa1>0</aPa1> <aPa1>0</aPa1>
<AscS4>0</AscS4> <AscS4>0</AscS4>
<aSer4>0</aSer4> <aSer4>0</aSer4>
@ -287,8 +277,8 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\Src\table_sin_cos.s</PathWithFileName> <PathWithFileName>.\Src\calcul_dft.s</PathWithFileName>
<FilenameWithoutPath>table_sin_cos.s</FilenameWithoutPath> <FilenameWithoutPath>calcul_dft.s</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
@ -332,6 +322,30 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Src\table_sin_cos.s</PathWithFileName>
<FilenameWithoutPath>table_sin_cos.s</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Src\signal.s</PathWithFileName>
<FilenameWithoutPath>signal.s</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group> </Group>
<Group> <Group>

View file

@ -398,9 +398,9 @@
<FilePath>.\Src\calculCarre.s</FilePath> <FilePath>.\Src\calculCarre.s</FilePath>
</File> </File>
<File> <File>
<FileName>table_sin_cos.s</FileName> <FileName>calcul_dft.s</FileName>
<FileType>2</FileType> <FileType>2</FileType>
<FilePath>.\Src\table_sin_cos.s</FilePath> <FilePath>.\Src\calcul_dft.s</FilePath>
</File> </File>
</Files> </Files>
</Group> </Group>
@ -422,6 +422,16 @@
<FileType>4</FileType> <FileType>4</FileType>
<FilePath>..\GASSP72\gassp72.lib</FilePath> <FilePath>..\GASSP72\gassp72.lib</FilePath>
</File> </File>
<File>
<FileName>table_sin_cos.s</FileName>
<FileType>2</FileType>
<FilePath>.\Src\table_sin_cos.s</FilePath>
</File>
<File>
<FileName>signal.s</FileName>
<FileType>2</FileType>
<FilePath>.\Src\signal.s</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>

View file

@ -12,6 +12,8 @@ GPIOB_BSRR equ 0x40010C10 ; Bit Set/Reset register
timer_callback proc timer_callback proc
; mise a 1 de PB1 ; mise a 1 de PB1
push {lr}
ldr r1, =etat ldr r1, =etat
ldr r1, [r1] ldr r1, [r1]
ldr r3, =GPIOB_BSRR ldr r3, =GPIOB_BSRR
@ -24,7 +26,8 @@ gdc ldr r0, =etat
str r1, [r3] str r1, [r3]
; N.B. le registre BSRR est write-only, on ne peut pas le relire ; N.B. le registre BSRR est write-only, on ne peut pas le relire
bx lr pop {lr}
bx lr
endp endp
eq eq

View file

@ -7,9 +7,13 @@
; ;
calcul_carre proc calcul_carre proc
ldr r3, =TabSin
push {r4}
push {r5}
ldr r4, =TabSin
ldr r5, =TabCos ldr r5, =TabCos
ldrh r2, [r3, r0, LSL #1] ldrh r2, [r4, r0, LSL #1]
ldrh r0, [r5, r0, LSL #1] ldrh r0, [r5, r0, LSL #1]
mul r0, r0 mul r0, r0
@ -17,7 +21,8 @@ calcul_carre proc
add r0, r2 add r0, r2
str r0, [r1] pop {r5}
pop {r4}
bx lr bx lr
endp endp

65
Src/calcul_dft.s Normal file
View file

@ -0,0 +1,65 @@
; ce programme est pour l'assembleur RealView (Keil)
thumb
area moncode, code, readonly
export calcul_dft_moitie
export calcul_dft
import TabCos
import TabSin
import TabSig
;
calcul_dft proc
push {lr}
;push {r1}
ldr r2, =TabCos
bl calcul_dft_moitie ;recuperation Re(k) dans r0
;pop {r1}
;push {r0} ;mise de Re(k) dans la pile
;ldr r2, =TabSin
;bl calcul_dft_moitie ;mise de -Im(k) dans r0
;mul r0, r0, r0 ;(-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}
bx lr
endp
calcul_dft_moitie proc
push {lr,r4-r6}
mov r4, r0
mov r5, r2
mov r6, r1
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)
mul r1, r3, r6 ;multiplication ik dans r1
and r1, r1, #63 ;modulo de ik par 64
ldrh r1, [r5, r1, LSL #1] ;chargement de cos(ik..)
mul r1, r1, r2 ;multiplication x(i)cos(ik..)
add r0, r0, r1 ;ajout dans la somme
add r3, #1 ;incrementation de i
cmp r3, #64 ;test de i
bne boucle
beq sortie
sortie
pop {lr,r4-r6}
bx lr
endp
end

View file

@ -1,29 +1,42 @@
#include "gassp72.h" #include "gassp72.h"
extern void timer_callback(void); extern void timer_callback(void);
extern short TabSig[];
int etat = 0x00020000; int etat = 0x00020000;
extern int calcul_carre(int);
extern int calcul_dft(short *, int);
//int tab[64];
int main(void) int main(void)
{ {
u32 Periode_en_Tck = 7200000;
// activation de la PLL qui multiplie la fréquence du quartz par 9 //for(int i=0; i<64; i++){
CLOCK_Configure(); // tab[i]= calcul_carre(i);
// config port PB1 pour être utilisé en sortie //}
GPIO_Configure(GPIOB, 1, OUTPUT, OUTPUT_PPULL); calcul_dft(TabSig,1);
// initialisation du timer 4
// Periode_en_Tck doit fournir la durée entre interruptions,
// exprimée en périodes Tck de l'horloge principale du STM32 (72 MHz)
Timer_1234_Init_ff( TIM4, Periode_en_Tck );
// enregistrement de la fonction de traitement de l'interruption timer
// ici le 2 est la priorité, timer_callback est l'adresse de cette fonction, a créér en asm,
// cette fonction doit être conforme à l'AAPCS
Active_IT_Debordement_Timer( TIM4, 2, timer_callback );
// lancement du timer
Run_Timer( TIM4 );
while (1)
{
}
u32 Periode_en_Tck = 7200000;
// activation de la PLL qui multiplie la fréquence du quartz par 9
CLOCK_Configure();
// config port PB1 pour être utilisé en sortie
GPIO_Configure(GPIOB, 1, OUTPUT, OUTPUT_PPULL);
// initialisation du timer 4
// Periode_en_Tck doit fournir la durée entre interruptions,
// exprimée en périodes Tck de l'horloge principale du STM32 (72 MHz)
Timer_1234_Init_ff( TIM4, Periode_en_Tck );
// enregistrement de la fonction de traitement de l'interruption timer
// ici le 2 est la priorité, timer_callback est l'adresse de cette fonction, a créér en asm,
// cette fonction doit être conforme à l'AAPCS
Active_IT_Debordement_Timer( TIM4, 2, timer_callback );
// lancement du timer
Run_Timer( TIM4 );
while (1)
{
}
} }

75
Src/signal.s Normal file
View file

@ -0,0 +1,75 @@
AREA Signal, DATA, READONLY
export TabSig
; Fnor = 1.000
; Ph = 0.000
; A = 2048.000
TabSig
DCW 4095 ; 0 0x0fff 0.99976
DCW 4086 ; 1 0x0ff6 0.99756
DCW 4057 ; 2 0x0fd9 0.99048
DCW 4008 ; 3 0x0fa8 0.97852
DCW 3940 ; 4 0x0f64 0.96191
DCW 3854 ; 5 0x0f0e 0.94092
DCW 3751 ; 6 0x0ea7 0.91577
DCW 3631 ; 7 0x0e2f 0.88647
DCW 3496 ; 8 0x0da8 0.85352
DCW 3347 ; 9 0x0d13 0.81714
DCW 3186 ; 10 0x0c72 0.77783
DCW 3013 ; 11 0x0bc5 0.73560
DCW 2832 ; 12 0x0b10 0.69141
DCW 2643 ; 13 0x0a53 0.64526
DCW 2448 ; 14 0x0990 0.59766
DCW 2249 ; 15 0x08c9 0.54907
DCW 2048 ; 16 0x0800 0.50000
DCW 1847 ; 17 0x0737 0.45093
DCW 1648 ; 18 0x0670 0.40234
DCW 1453 ; 19 0x05ad 0.35474
DCW 1264 ; 20 0x04f0 0.30859
DCW 1083 ; 21 0x043b 0.26440
DCW 910 ; 22 0x038e 0.22217
DCW 749 ; 23 0x02ed 0.18286
DCW 600 ; 24 0x0258 0.14648
DCW 465 ; 25 0x01d1 0.11353
DCW 345 ; 26 0x0159 0.08423
DCW 242 ; 27 0x00f2 0.05908
DCW 156 ; 28 0x009c 0.03809
DCW 88 ; 29 0x0058 0.02148
DCW 39 ; 30 0x0027 0.00952
DCW 10 ; 31 0x000a 0.00244
DCW 0 ; 32 0x0000 0.00000
DCW 10 ; 33 0x000a 0.00244
DCW 39 ; 34 0x0027 0.00952
DCW 88 ; 35 0x0058 0.02148
DCW 156 ; 36 0x009c 0.03809
DCW 242 ; 37 0x00f2 0.05908
DCW 345 ; 38 0x0159 0.08423
DCW 465 ; 39 0x01d1 0.11353
DCW 600 ; 40 0x0258 0.14648
DCW 749 ; 41 0x02ed 0.18286
DCW 910 ; 42 0x038e 0.22217
DCW 1083 ; 43 0x043b 0.26440
DCW 1264 ; 44 0x04f0 0.30859
DCW 1453 ; 45 0x05ad 0.35474
DCW 1648 ; 46 0x0670 0.40234
DCW 1847 ; 47 0x0737 0.45093
DCW 2048 ; 48 0x0800 0.50000
DCW 2249 ; 49 0x08c9 0.54907
DCW 2448 ; 50 0x0990 0.59766
DCW 2643 ; 51 0x0a53 0.64526
DCW 2832 ; 52 0x0b10 0.69141
DCW 3013 ; 53 0x0bc5 0.73560
DCW 3186 ; 54 0x0c72 0.77783
DCW 3347 ; 55 0x0d13 0.81714
DCW 3496 ; 56 0x0da8 0.85352
DCW 3631 ; 57 0x0e2f 0.88647
DCW 3751 ; 58 0x0ea7 0.91577
DCW 3854 ; 59 0x0f0e 0.94092
DCW 3940 ; 60 0x0f64 0.96191
DCW 4008 ; 61 0x0fa8 0.97852
DCW 4057 ; 62 0x0fd9 0.99048
DCW 4086 ; 63 0x0ff6 0.99756
END

View file

@ -2,6 +2,7 @@
export TabSin export TabSin
export TabCos export TabCos
TabCos TabCos
DCW 32767 ; 0 0x7fff 0.99997 DCW 32767 ; 0 0x7fff 0.99997
DCW 32610 ; 1 0x7f62 0.99518 DCW 32610 ; 1 0x7f62 0.99518