#include "gassp72.h" int module(int k, unsigned short *); unsigned short dma_buf[64]; int occurences[6]; int score[6]; int SYSTICK_PER=360000; #define M2TIR 0x2AFCFF //3C268D est la valeur calculée pour 50 mV int mod[64]; void sys_callback(){ GPIO_Set(GPIOB, 1); // Démarrage DMA pour 64 points Start_DMA1(64); Wait_On_End_Of_DMA1(); Stop_DMA1; for (int k=0; k<64; k++){ mod[k]=module(k,dma_buf); if (mod[k] > M2TIR){ // incrémenté chaque fois que M2(k) dépasse le seuil fixé M2TIR switch(k){ case 17: occurences[0]++; //tir à 85kHz break; case 18: occurences[1]++; //tir à 90kHz break; case 19: occurences[2]++; // tir à 95kHz break ; case 20: occurences[3]++; // tir à 100kHz break; case 23: occurences[4]++; // tir à 115kHz break; case 24: occurences[5]++; // tir à 120kHz break; }} else { switch(k){ //remise à zéro case 17: occurences[0]=0; //tir à 85kHz break; case 18: occurences[1]=0; //tir à 90kHz break; case 19: occurences[2]=0; // tir à 95kHz break ; case 20: occurences[3]=0; // tir à 100kHz break; case 23: occurences[4]=0; // tir à 115kHz break; case 24: occurences[5]=0; // tir à 120kHz break; } } GPIO_Clear(GPIOB, 1); } for(int i=0;i<6;i++) { if(occurences[i]==3) { score[i]++; } } } int main(void) { // 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) { } }