Update 'soft/PjtKEIL_StepDFT/Src/DFT.s'

This commit is contained in:
Oussama Hannouch 2023-05-23 21:27:38 +02:00
parent a045d8be1e
commit a289b39dab

View file

@ -1,4 +1,4 @@
PRESERVE8 PRESERVE8
THUMB THUMB
@ -10,7 +10,7 @@
;Section RAM (read write): ;Section RAM (read write):
area maram,data,readwrite area maram,data,readwrite
; =============================================================================================== ; ===============================================================================================
@ -19,52 +19,47 @@
;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
export DFT_ModuleAuCarre
;for i in 0...63
;signal[i]*Cos[k*i] +=
export DFT_ModuleAuCarre
DFT_ModuleAuCarre proc DFT_ModuleAuCarre proc
push {r4, r5, r6, r8, r9, r10} ; push{r4-r10}; sauvegarde des registres dans la pile
mov r2, #0 ; partie imaginaire = 0 mov r2, #0 ;initialisation de la partie imaginaire à zero
mov r3, #0 ; partie reelle = 0 mov r3, #0 ;initialisation de la partie relle à zero
mov r7, #0 ; compteur pour parcourir les tableaux "TabCos" et "TabSin" mov r7 ,#0 ;initialisation de p(=n*k) à zero
mov r4, #0 ; compteur pour parcourir le signal d'entrée mov r4 ,#0 ;initialisation de l'indice n à zero
ldr r5, =TabCos ; les adresses du tableau "TabCos" ldr r5, =TabCos ; chargement de l'adresse de TabCos dans r5
ldr r6, =TabSin ; les adresses du tableau "TabSin" ldr r6, =TabSin ; chargement de l'adresse de TabCos dans r5
SumLoop
ldrsh r8, [r0, r4, lsl #1] ; Chargement des éléments du signal d'entrée 4.12 Sommation
ldrsh r9, [r5, r7, lsl #1] ;Cos 1.15 ;Rsom += Signal[i] * TabCos[k*i]
ldrsh r10,[r6, r7, lsl #1] ;Sin 1.15 ldrsh r8,[r0, r4, lsl#1] ; chargement du LeSignal[n] dans r8
mul r9, r8, r9 ;* Multiplication de l'élément du signal d'entrée avec l'élément correspondant des tableaux "TabCos" et "TabSin" (en utilisant une multiplication longue pour éviter la saturation). ldrsh r9,[r5, r7, lsl #1] ; chargement de TabCos[p] dans r9
mul r10, r8, r10 ;5.27 ldrsh r10,[r6, r7, lsl #1] ; chargement de TabSin[p] dans r10
asr r9, #6 mul r9, r8, r9 ; multiplication de LeSignal[n] par TabCos[n*k]-->5.27
asr r10, #6 mul r10, r8, r10 ; multiplication de LeSignal[n] par TabSin[n*k] -->5.27
add r3, r3, r9 ; +=Mise à jour des parties réelles et imaginaires du résultat. asr r9, #16 ; -->format 5.11 me probleme de debordement
add r2, r2, r10 ;5+6 11.21 asr r10,#16 ;-->format 5.11
add r3,r3, r9 ;ajout de la partie réelle au résultat (conservation du format) -->11.11
mul r7, r4, r1 ; i*k add r2,r2, r10 ;ajout de la partie imaginaire au résultat (conservation du format) -->11.11 a cause de 64 additions
and r7, #0x3F ; mod 64
add r4, r4, #1 ; ++n add r7, r1 ; ajout de k à n*k ce qui fait p= (n+1)*k
cmp r4, #64 ; and r7, 63 ;modulo 64 pour ne pas depasser la taille du tableau
blt SumLoop ; if n < 64 refaire add r4, r4, #1 ; incrémentation de l'indice n
cmp r4 ,#64 ; comparaison de n à 64
mov r0, r3 ; 5.27 reel blt Sommation ; si n<64 on recommence la boucle
asr r3, #16
mul r9, r3, r3 ; reel*reel asr r3, #6 ; décalage de 10 bits vers la droite pour rétablir le format --> 11.5
mov r0, r9 mul r3, r3, r3 ; la partie relle au carre -->10.22
asr r2, #16 asr r2, #6 ; décalage de 10 bits vers la droite pour rétablir le format -->11.5
mul r10, r2, r2 ; im*im mul r2, r2, r2 ; la partie imaginaire au carre -->22.10
add r0, r9, r10 ; 10.22 mov r0, r3 ; copie de la partie rélle dans r0
add r0, r0, r2 ; addition de la partie imaginaire dans r0 forme final--> 22.10
;mov r0, r2 ;test im
pop{r4-r10} ; restauration des registres depuis la pile
pop {r4, r5, r6, r8, r9, r10} bx lr
bx lr endp
endp