我这里有一些以前写的ADC的代码,给你参考吧
// ADC ISR<br />__arm void Adc_CompleteISR_Handler (void)<br />{<br /> rI_ISPC = BIT_ADC; // clear pending bit of adc<br /> wAdcResult[wAdcPos] = rADCDAT;<br /> wAdcPos++;<br /> if(wAdcPos < MAX_ADC_BUFFLEN){<br /> BSP_ADC_StartChannel(wAdcCh);<br /> }else{<br /> OSSemPost(pSemAdc); // signal sampling over<br /> }<br />}<br />/*<br /> Initialize the ADC, dwAdcRate is in Hz<br /> the larger the PSR is, the lower the input current will be<br /> so lower ADC rate can lead to more accurate AD result<br />*/<br />void BSP_ADC_Init(INT32U dwAdcRate)<br />{<br /> rADCPSR = MCLK/(32*dwAdcRate)-1;<br /> rADCCON = 0; // activate ADC clock, no operation, CH0<br /> pISR_ADC = (unsigned) Adc_CompleteISR_Handler; // set ISR vector<br /> rINTMSK &= ~BIT_ADC; // enable inperrupt<br />}<br />// switch to sepcified channel, and start conversion<br />// uiChannel must be within 0 to 7<br />void BSP_ADC_SwitchChannel(INT16U wChannel)<br />{<br /> wAdcPos = 0;<br /> wAdcCh = wChannel;<br /> rADCCON = 0x01 | (wChannel << 2); // start conversion<br />}<br />// start ADC on specified channel<br />// uiChannel must be within 0 to 7<br />void BSP_ADC_StartChannel(INT16U wChannel)<br />{<br /> rADCCON = 0x01 | (wChannel << 2);<br />}<br />
|
|