//ISR del T5 //void _ISR _T5Interrupt(void){ void __attribute__((__interrupt__, auto_psv)) _T5Interrupt(void){ //printf("ISR T5\n"); unsigned long i; int sens1, sens2; //convert ADC_SCAN_AN11 ConvertADC10(); for(i=0;i<0x0000000F;i++){} //convert ADC_SCAN_AN13 ConvertADC10(); for(i=0;i<0x0000000F;i++){} sens2=ReadADC10(0); sens1=ReadADC10(1); #if (_FISICA_VERBOSE_ISR_T5>=2) printf("sens1 = %d\n", sens1); printf("sens2 = %d\n", sens2); #endif sens_buff[sens_buff_ind]=sens1; sens_buff_ind++; sens_buff[sens_buff_ind]=sens2; sens_buff_ind++; #if (_FISICA_VERBOSE_ISR_T5>=2) printf("sens_buff_ind=%d\n", sens_buff_ind); #endif if(sens_buff_ind>=(FIS_SENS_BUFF_LEN)){ #if (_FISICA_VERBOSE_ISR_T5>=2) con_printf("ISR T5: sens_buff_ind == FIS_SENS_BUFF_LENGTH\r\n"); #endif fis_stop_expFis(); //fis_save_sens_buff(); } T5_Clear_Intr_Status_Bit; }
UINT16 read_adc(UINT8 channel) { if (channel == A1) AD1CHS = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN4; else if (channel == A0) AD1CHS = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN2; else return 0; int i; for (i = 0; i < 10; i++); // small delay (may not be needed but w/e) AcquireADC10(); for (i = 0; i < 100; i++); // Wait for sampling to complete ConvertADC10(); while(!BusyADC10()); //AcquireADC10(); return ReadADC10(0); }
CPU_INT16U ADC_GetVal (CPU_INT08U channel_to_convert) { CPU_INT08U buffer; CPU_INT32U config; switch (channel_to_convert) { case 0: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN0; break; case 1: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN1; break; case 2: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN2; break; case 3: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN3; break; case 4: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN4; break; case 5: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN5; break; case 6: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN6; break; case 7: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN7; break; case 8: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN8; break; case 9: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN9; break; case 10: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN10; break; case 11: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN11; break; case 12: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN12; break; case 13: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN13; break; case 14: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN14; break; case 15: config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN15; break; config = ADC_CH0_NEG_SAMPLEA_NVREF | ADC_CH0_POS_SAMPLEA_AN0; } SetChanADC10(config); //pour le changement de voie en entrée de l'adc, il faudra prévoir un temps pour que la tension se //stabilise entre la comutation et l'échantillonnage. Le top se serait de changer de voie à la fin de la conversion précédente. //Ce qui laisse du temps avant la conversion suivante. CBE OSTimeDlyHMSM(0, 0, 0, 5); ConvertADC10(); while (!BusyADC10()); // timeout ?? !! buffer = 8 * (~ReadActiveBufferADC10() & 0x1); /* Select non active buffer */ return (ReadADC10(buffer)); /* Return ADC reading */ }