be_chti/projet_keil/Src/principal.c
2020-05-11 11:02:58 +02:00

84 lines
2.1 KiB
C

#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
// F2 = 90 kHz -> k = 18
// F3 = 95 kHz -> k = 19
// F4 = 100 kHz -> k = 20
// F5 = 115 kHz -> k = 23
// F6 = 120 kHz -> k = 24
const int kFreq[NB_JOUEURS] = {17, 18, 19, 20, 23, 24};
int dft(unsigned short *sig, int k);
unsigned short *bufferDMA;
int counters[NB_JOUEURS];
int debug_result[NB_JOUEURS];
int scores[NB_JOUEURS];
int time = 0;
void callbackTimer(void) {
// Démarrage DMA pour 64 points
Start_DMA1(64);
Wait_On_End_Of_DMA1();
Stop_DMA1;
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;
}
}
time += 5;
}
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();
// PA2 (ADC voie 2) = entrée analog
GPIO_Configure(GPIOA, 2, INPUT, ANALOG);
// PB1 = sortie pour profilage à l'oscillo
GPIO_Configure(GPIOB, 1, OUTPUT, OUTPUT_PPULL);
// PB14 = sortie pour LED
GPIO_Configure(GPIOB, 14, OUTPUT, OUTPUT_PPULL);
// activation ADC, sampling time 1us
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 );
// Config DMA pour utilisation du buffer dma_buf (a créér)
Init_ADC1_DMA1( 0, bufferDMA );
// Config Timer, période exprimée en périodes horloge CPU (72 MHz)
Systick_Period_ff( SYSTICK_PER );
// enregistrement de la fonction de traitement de l'interruption timer
// ici le 3 est la priorité, sys_callback est l'adresse de cette fonction, a créér en C
Systick_Prio_IT( 3, callbackTimer );
SysTick_On;
SysTick_Enable_IT;
while(1){}
}