This commit is contained in:
Yu Zhang 2023-04-21 18:21:03 +02:00
parent 16728f90fd
commit bbb40b4817
9 changed files with 2118 additions and 49 deletions

View file

@ -6,12 +6,10 @@
;Section RAM (read only) : ;Section RAM (read only) :
area mesdata,data,readonly area mesdata,data,readonly
;Section RAM (read write): ;Section RAM (read write):
area maram,data,readwrite area maram,data,readwrite
export DFT_ModuleAuCarre
; =============================================================================================== ; ===============================================================================================
@ -19,10 +17,48 @@
;Section ROM code (read only) : ;Section ROM code (read only) :
area moncode,code,readonly area moncode,code,readonly
; écrire le code ici ; écrire le code ici
;récuperer le tableau Signal
;calculer de 0 à 63 :
; pour format 2.14 ,asr#2 pour décaler 2bit vers poid faible et get valeur de .14 Mais pour 2 bit?
DFT_ModuleAuCarre proc
;r0 contient l'adresse de lesginal
;r1 contient le valeur de k
push {r4-r10,lr}
mov r12,#0 ;r12 =index
ldr r3,=TabCos
ldr r8,=TabSin
mov r7,#0 ; somme réel
mov r10,#0 ;somme imaginaire
Loop
mul r6, r12, r1 ; valeur de n*k
and r6,#0x3F ; moduler :n*k/M
ldrsh r4,[r3,r6,lsl #1] ;lire le valeur de tabcos:cos(nk/M)
ldrsh r9,[r8,r6,lsl #1]; lire le valeur de tabsin:sin(nk/M) PARTIE IMAGINAIRE
ldrsh r5,[r0,r12,lsl #1] ;lire le valeur de signal:x(i)
mul r6, r4,r5 ; r6=cos(n*k/M) * x(i)
add r7,r6;somme réel =somme réel +x(i)*cos(n*k/M)
mul r6, r9,r5 ;r6=sin(n*k/M) * x(i)
add r10,r6;somme imaginaire =somme imaginaire + x(i)*sin(n*K/M)
add r12,#1
cmp r12,#64
bne Loop
mov r0,r7
mov r1,r10
mul r0,r0
mul r1,r1
add r0,r0,r1
pop {r4-r10,lr}
bx lr
endp
;Section ROM code (read only) : ;Section ROM code (read only) :

View file

@ -1,8 +1,9 @@
#include "DriverJeuLaser.h" #include "DriverJeuLaser.h"
extern short int LeSignal[];
extern int DFT_ModuleAuCarre( short int * Signal64ech, char k) ;
int Dft_x[64];
int main(void) int main(void)
{ {
@ -15,8 +16,9 @@ int main(void)
CLOCK_Configure(); CLOCK_Configure();
for (char k=0;k<64;k++){
Dft_x[k]=DFT_ModuleAuCarre(&LeSignal[0],k);
}
//============================================================================ //============================================================================

File diff suppressed because one or more lines are too long

View file

@ -75,7 +75,7 @@
<OPTFL> <OPTFL>
<tvExp>1</tvExp> <tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>0</IsCurrentTarget> <IsCurrentTarget>1</IsCurrentTarget>
</OPTFL> </OPTFL>
<CpuCode>18</CpuCode> <CpuCode>18</CpuCode>
<DebugOpt> <DebugOpt>
@ -153,7 +153,49 @@
<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>26</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134218394</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\26</Expression>
</Bp>
</Breakpoint>
<WatchWindow1>
<Ww>
<count>0</count>
<WinNumber>1</WinNumber>
<ItemText>lr</ItemText>
</Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>r7</ItemText>
</Ww>
<Ww>
<count>2</count>
<WinNumber>1</WinNumber>
<ItemText>Dft_x</ItemText>
</Ww>
</WatchWindow1>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>1</SubType>
<ItemText>lr</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<Tracepoint> <Tracepoint>
<THDelay>0</THDelay> <THDelay>0</THDelay>
</Tracepoint> </Tracepoint>
@ -267,7 +309,7 @@
<OPTFL> <OPTFL>
<tvExp>1</tvExp> <tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget> <IsCurrentTarget>0</IsCurrentTarget>
</OPTFL> </OPTFL>
<CpuCode>18</CpuCode> <CpuCode>18</CpuCode>
<DebugOpt> <DebugOpt>
@ -624,6 +666,30 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Src\DFT.s</PathWithFileName>
<FilenameWithoutPath>DFT.s</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Src\Signal.asm</PathWithFileName>
<FilenameWithoutPath>Signal.asm</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group> </Group>
<Group> <Group>
@ -634,7 +700,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>2</FileNumber> <FileNumber>4</FileNumber>
<FileType>2</FileType> <FileType>2</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -654,7 +720,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>3</FileNumber> <FileNumber>5</FileNumber>
<FileType>4</FileType> <FileType>4</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>

View file

@ -388,6 +388,16 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>.\Src\principal.c</FilePath> <FilePath>.\Src\principal.c</FilePath>
</File> </File>
<File>
<FileName>DFT.s</FileName>
<FileType>2</FileType>
<FilePath>.\Src\DFT.s</FilePath>
</File>
<File>
<FileName>Signal.asm</FileName>
<FileType>2</FileType>
<FilePath>.\Src\Signal.asm</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
@ -419,7 +429,7 @@
<TargetName>CibleSondeKEIL</TargetName> <TargetName>CibleSondeKEIL</TargetName>
<ToolsetNumber>0x4</ToolsetNumber> <ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName> <ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed> <pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6> <uAC6>0</uAC6>
<TargetOption> <TargetOption>
<TargetCommonOption> <TargetCommonOption>
@ -797,6 +807,16 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>.\Src\principal.c</FilePath> <FilePath>.\Src\principal.c</FilePath>
</File> </File>
<File>
<FileName>DFT.s</FileName>
<FileType>2</FileType>
<FilePath>.\Src\DFT.s</FilePath>
</File>
<File>
<FileName>Signal.asm</FileName>
<FileType>2</FileType>
<FilePath>.\Src\Signal.asm</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
@ -1275,6 +1295,16 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>.\Src\principal.c</FilePath> <FilePath>.\Src\principal.c</FilePath>
</File> </File>
<File>
<FileName>DFT.s</FileName>
<FileType>2</FileType>
<FilePath>.\Src\DFT.s</FilePath>
</File>
<File>
<FileName>Signal.asm</FileName>
<FileType>2</FileType>
<FilePath>.\Src\Signal.asm</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>

View file

@ -0,0 +1,6 @@
#ifndef GESTION_SON_H_
#define GESTION_SON_H_
short int CallbackSon(short int *son, int *index, int longueurSon);
void StartSon(void);
#endif

View file

@ -9,12 +9,19 @@
;Section RAM (read write): ;Section RAM (read write):
area maram,data,readwrite area maram,data,readwrite
SortieSon dcw 0
export SortieSon export SortieSon
export CallbackSon export CallbackSon
Index dcd 0 export StartSon
export Index export Index
import Son
import LongueurSon
import PeriodeSonMicroSec
import PWM_Set_Value_TIM3_Ch3
Index dcd 0
SortieSon dcw 0
; =============================================================================================== ; ===============================================================================================
@ -27,45 +34,54 @@ Index dcd 0
;Section ROM code (read only) : ;Section ROM code (read only) :
area moncode,code,readonly area moncode,code,readonly
import Son
import LongueurSon
import PWM_Set_Value_TIM3_Ch3
; écrire le code ici ; écrire le code ici
CallbackSon proc CallbackSon proc
push {r3} push {lr,r3-r5}
;r0=&son
ldr r1,=LongueurSon ldr r0,=Son
ldr r1,[r1] ;static int i,r1=&index,r2=index
;static int i ldr r1,=Index
ldr r0, =Index ldr r2,[r1]
ldrsh r2,[r0] ;r3=LongueurSon
ldr r3,=LongueurSon
ldr r3,[r3]
;if (i<LongueurSon) ;if (i<LongueurSon)
cmp r2, r1
cmp r2, r3
beq arret beq arret
;SortieSon=(Son[i]+32768)*719/65535; ;SortieSon=(Son[i]+32768)*719/65535;
ldr r1, =Son
ldrsh r3, [r1, r2, lsl #1]
mov r1, #0x8000
add r3, r1
mov r1, #0x2CF
mul r3, r1
mov r1, #0xFFFF
udiv r3, r1
ldr r4,=SortieSon ldr r4,=SortieSon
strh r3,[r4] ;Lire le valeur de son avec r5
ldrsh r5, [r0, r2, lsl #1]
mov r3, #0x8000
add r5, r3
mov r3, #0x2CF
mul r5, r3
;on résoud le problem de division par asr, on fait la décalage de 16 bit vers le fort
mov r3, #16
asr r5, r3
str r5,[r4]
;i+=1 ;i+=1
add r2, #1 add r2, #1
str r2,[r0] str r2,[r1]
bl PWM_Set_Value_TIM3_Ch3 ;mis de la sortie PWM
;bl PWM_Set_Value_TIM3_Ch3; mis @ de la sortie PWM
pop {r3}
arret arret
pop {lr,r3-r5}
bx lr bx lr
endp endp
END
StartSon proc
ldr r1,=Index
mov r3,#0;
str r3,[r1]
bx lr
END

View file

@ -7,6 +7,8 @@
extern short Son; extern short Son;
extern int LongueurSon; extern int LongueurSon;
extern int PeriodeSonMicroSec; extern int PeriodeSonMicroSec;
extern void StartSon(void);
void CallbackSon(void); void CallbackSon(void);
int main(void) int main(void)
@ -14,7 +16,8 @@ int main(void)
// Initialisation de taille et son pour le variable etat // Initialisation de taille et son pour le variable etat
int resolution; int resolution;
//function StartSon
StartSon();
// Activation de la PLL qui multiplie la fréquence du quartz par 9 // Activation de la PLL qui multiplie la fréquence du quartz par 9
CLOCK_Configure(); CLOCK_Configure();
@ -35,6 +38,7 @@ Active_IT_Debordement_Timer(TIM4, 2, CallbackSon);
//Lancement du timer //Lancement du timer
Run_Timer(TIM4); Run_Timer(TIM4);
Run_Timer(TIM3); Run_Timer(TIM3);
while (1) while (1)
{ {
} }

View file

@ -160,15 +160,28 @@
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>SortieSon</ItemText> <ItemText>SortieSon</ItemText>
</Ww> </Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>SortieSon</ItemText>
</Ww>
</WatchWindow1> </WatchWindow1>
<MemoryWindow1> <MemoryWindow1>
<Mm> <Mm>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<SubType>9</SubType> <SubType>266</SubType>
<ItemText>0xE000E000</ItemText> <ItemText>0x200000A4</ItemText>
<AccSizeX>0</AccSizeX> <AccSizeX>0</AccSizeX>
</Mm> </Mm>
</MemoryWindow1> </MemoryWindow1>
<MemoryWindow2>
<Mm>
<WinNumber>2</WinNumber>
<SubType>0</SubType>
<ItemText>r4</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow2>
<Tracepoint> <Tracepoint>
<THDelay>0</THDelay> <THDelay>0</THDelay>
</Tracepoint> </Tracepoint>
@ -189,7 +202,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>
@ -215,7 +228,7 @@
<Wi> <Wi>
<IntNumber>0</IntNumber> <IntNumber>0</IntNumber>
<FirstString>`SortieSon</FirstString> <FirstString>`SortieSon</FirstString>
<SecondString>000080000000000000000000000000000080864000000000000000000000000000000000536F72746965536F6E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000001000000000000000000F03F020000000000000000000000000000000000000030010008</SecondString> <SecondString>FF0000000000000000000000000000000080864000000000000000000000000000000000536F72746965536F6E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000001000000000000000000F03F0F00000000000000000000000000000000000000BA0A0008</SecondString>
</Wi> </Wi>
</LogicAnalyzers> </LogicAnalyzers>
<DebugDescription> <DebugDescription>