// AFONSO Perrine LARTIGUE Auriane #include "gassp72.h" #define SYSTICK_PER 360000 // 72 MHz * 5ms extern void timer_callback(void); unsigned short dma_buf[64]; // buffer de 64 short ints pour le DMA int compteur[6]; //compteur d'occurence en fonction de M2(k) et M2TIR int point[6]; // contient les points des 6 joueurs int CalculM(int,unsigned short *); int M2[64]; void sys_callback(){ GPIO_Set(GPIOB, 1); // pour mesurer la durée réelle du traitement DMA+DFT+compteurs. // Démarrage DMA pour 64 points Start_DMA1(64); Wait_On_End_Of_DMA1(); Stop_DMA1; int M2TIR=0x267F13 ; //seuil à calculer for (int k=0; k<64; k++){ M2[k]=CalculM(k,dma_buf); if (M2[k] > M2TIR){ // incrémenté chaque fois que M2(k) dépasse le seuil fixé M2TIR switch(k){ case 17: compteur[0]++; //tir à 85kHz break; case 18: compteur[1]++; //tir à 90kHz break; case 19: compteur[2]++; // tir à 95kHz break ; case 20: compteur[3]++; // tir à 100kHz break; case 23: compteur[4]++; // tir à 115kHz break; case 24: compteur[5]++; // tir à 120kHz break; }} else { switch(k){ //remise à zéro case 17: compteur[0]=0; //tir à 85kHz break; case 18: compteur[1]=0; //tir à 90kHz break; case 19: compteur[2]=0; // tir à 95kHz break ; case 20: compteur[3]=0; // tir à 100kHz break; case 23: compteur[4]=0; // tir à 115kHz break; case 24: compteur[5]=0; // tir à 120kHz break; } } GPIO_Clear(GPIOB, 1); } for (int j = 0 ; j < 6 ; j++){ if(compteur[j]==3){ point[j]++; // on incremente le score du joueur j } } } int main(){ // 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, 0x52 ); 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, dma_buf ); // 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, sys_callback ); SysTick_On; SysTick_Enable_IT; while(1){} }