diff --git a/projet_keil/Project.uvoptx b/projet_keil/Project.uvoptx index 8069531..65c296b 100644 --- a/projet_keil/Project.uvoptx +++ b/projet_keil/Project.uvoptx @@ -157,22 +157,6 @@ 0 0 - 31 - 1 -
134221080
- 0 - 0 - 0 - 0 - 0 - 1 - .\Src\principal.c - - \\CHTI\Src/principal.c\31 -
- - 1 - 0 0 0
134218136
@@ -201,7 +185,7 @@ 2 1 - counters + counters,0x0A @@ -232,7 +216,7 @@ 0 0 0 - 0 + 1 0 0 0 @@ -257,8 +241,33 @@ 0 - ((portb & 0x00000002) >> 1 & 0x2) >> 1 - FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028706F7274622026203078303030303030303229203E3E2031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F0700000000000000000000000000000000000000401E0008 + `counters[0] + 008000000000000000000000000000000000354000000000000000000000000000000000636F756E746572735B305D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000001000000555555555555C53F1800000000000000000000000000000000000000180D0008 + + + 1 + `counters[1] + 000080000000000000000000000000000000354000000000000000000000000000000000636F756E746572735B315D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000002000000555555555555C53F1800000000000000000000000000000000000000180D0008 + + + 2 + `counters[2] + 000000000000000000000000000000000000354000000000000000000000000000000000636F756E746572735B325D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000003000000555555555555C53F1800000000000000000000000000000000000000180D0008 + + + 3 + `counters[3] + FF0000000000000000000000000000000000354000000000000000000000000000000000636F756E746572735B335D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000004000000555555555555C53F1800000000000000000000000000000000000000180D0008 + + + 4 + `counters[4] + 008000000000000000000000000000000000354000000000000000000000000000000000636F756E746572735B345D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000005000000555555555555C53F1800000000000000000000000000000000000000180D0008 + + + 5 + `counters[5] + 000080000000000000000000000000000000354000000000000000000000000000000000636F756E746572735B355D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000006000000545555555555C53F1800000000000000000000000000000000000000180D0008 diff --git a/projet_keil/Src/calcul_dft.s b/projet_keil/Src/calcul_dft.s index e18781d..368c136 100644 --- a/projet_keil/Src/calcul_dft.s +++ b/projet_keil/Src/calcul_dft.s @@ -16,11 +16,11 @@ dft proc mov r9, #0 ; r9 = resultat reel mov r12, #0 ; r10 = resultat imaginaire -deb_somme ldrh r6, [r0, r4, LSL #1] ; r6 = x[i], LSL #1 pour faire x2 car chaque valeur est sur 2 octets | format 16.0 +deb_somme ldrh r6, [r0, r4, LSL #1] ; r6 = x[i], LSL #1 pour faire x2 car chaque valeur est sur 2 octets | format 4.12 ldrsh r7, [r2, r5, LSL #1] ; r7 = cos [ik%N] | format 1.15 ldrsh r8, [r3, r5, LSL #1] ; r8 = sin [ik%N] | format 1.15 - mla r9, r6, r7, r9 ; r9 += x[i] * cos[ik%n] | format 17.15 - mla r12, r6, r8, r12 ; r10 += x[i] * sin[ik%n] | format 17.15 + mla r9, r6, r7, r9 ; r9 += x[i] * cos[ik%n] | format 5.27 + mla r12, r6, r8, r12 ; r10 += x[i] * sin[ik%n] | format 5.27 add r5, r1 ; r5 = (i-1)k + k and r5, #N-1 ; r5 = r5 % 64 @@ -30,8 +30,8 @@ deb_somme ldrh r6, [r0, r4, LSL #1] ; r6 = x[i], LSL #1 pour faire x2 car chaqu ; etat des registres : r0 = x, r1 = k, r9 = Re, r10 = Im, autres libres - smull r2, r0, r9, r9 ; (r2,r0) = Re(k)² | format : 34.30 - smlal r2, r0, r12, r12 ; (r2,r0) = Re(k)² + Im(k)² | format : 34.30 + smull r2, r0, r9, r9 ; (r2,r0) = Re(k)² | format : 10.54 + smlal r2, r0, r12, r12 ; (r2,r0) = Re(k)² + Im(k)² | format : 10.54 -> r0 est en 10.22 pop {r4, r5, r6, r7, r8, r9} bx lr diff --git a/projet_keil/Src/principal.c b/projet_keil/Src/principal.c index 45ce2c5..8b2f332 100644 --- a/projet_keil/Src/principal.c +++ b/projet_keil/Src/principal.c @@ -1,9 +1,12 @@ #include "gassp72.h" #include "stdlib.h" - +#define NB_JOUEURS 6 +#define TYPE_SIGNAL 0x33 const int SYSTICK_PER = 5*72000; const int N = 64; +const int M2TIR = 985661; + // Fe = 320 kHz donc pasFreq = 5 kHz // F1 = 85 kHz -> k = 17 @@ -12,14 +15,14 @@ const int N = 64; // F4 = 100 kHz -> k = 20 // F5 = 115 kHz -> k = 23 // F6 = 120 kHz -> k = 24 -const int kFreq[6] = {17, 18, 19, 20, 23, 24}; +const int kFreq[NB_JOUEURS] = {17, 18, 19, 20, 23, 24}; int dft(unsigned short *sig, int k); unsigned short *bufferDMA; -int counters[6]; -int debug_result[6]; -const int M2TIR = 10000; +int counters[NB_JOUEURS]; +int debug_result[NB_JOUEURS]; +int scores[NB_JOUEURS]; int time = 0; @@ -29,11 +32,14 @@ void callbackTimer(void) { Start_DMA1(64); Wait_On_End_Of_DMA1(); Stop_DMA1; - for (int i = 0; i < 6; ++i) { + for (int i = 0; i < NB_JOUEURS; ++i) { int k = kFreq[i]; debug_result[i] = dft(bufferDMA, k); if (debug_result[i] > M2TIR) { ++counters[i]; + if (counters[i] == 3) { + ++scores[i]; + } } else { counters[i] = 0; } @@ -44,6 +50,10 @@ void callbackTimer(void) { int main(void) { bufferDMA = malloc(N * sizeof(short)); + for (int i = 0; i < NB_JOUEURS; ++i) { + counters[i] = 0; + scores[i] = 0; + } // activation de la PLL qui multiplie la fréquence du quartz par 9 CLOCK_Configure(); @@ -55,7 +65,7 @@ int main(void) { GPIO_Configure(GPIOB, 14, OUTPUT, OUTPUT_PPULL); // activation ADC, sampling time 1us - Init_TimingADC_ActiveADC_ff( ADC1, 72 ); + Init_TimingADC_ActiveADC_ff( ADC1, TYPE_SIGNAL ); Single_Channel_ADC( ADC1, 2 ); // Déclenchement ADC par timer2, periode (72MHz/320kHz)ticks Init_Conversion_On_Trig_Timer_ff( ADC1, TIM2_CC2, 225 );