void ADCInit( void )//初始化
{
LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 16); /* 允許I/O配置模塊的時鐘 */
LPC_IOCON->PIO1_10 &= ~0xBF; /* 配置PIO1_10為模擬輸入模式 */
LPC_IOCON->PIO1_10 |= 0x01; /* PIO1_10模擬輸入通道6 */
LPC_IOCON->PIO1_11 &= ~0xBF; /* 配置PIO1_1 為模擬輸入模式 */
LPC_IOCON->PIO1_11 |= 0x01; /* PIO1_1 模擬輸入通道7 */
LPC_SYSCON->PDRUNCFG &= ~(0x01 << 4); /* ADC模塊上電 */
LPC_SYSCON->SYSAHBCLKCTRL |= (0x01 << 13); /* 使能ADC模塊時鐘 */
LPC_ADC->CR = ( 0x01 << 6 ) | /* SEL=6,選擇ADC6 */
( 0x01 << 7 ) | /* SEL=7,選擇ADC7 */
(( SystemFrequency / ADCFrequency - 1 ) << 8 ) | /* 轉換時鐘1MHz */
( 1 << 16 ) | /* BURST=1,使用Burst模式 */
( 0 << 17 ) | /* 使用11 clocks轉換 */
( 0 << 24 ) | /* ADC轉換停止 */
( 0 << 27 ); /* 直接啟動ADC轉換,此位無效 */
NVIC_EnableIRQ(ADC_IRQn); /* 使能ADC中斷,並配置優先級 */
NVIC_SetPriority(ADC_IRQn, 2);
LPC_ADC->INTEN = (1 << 6); /* 通道6 中斷使能 */
LPC_ADC->INTEN = (1 << 7); /* 通道7 中斷使能 */
}
void ADC_IRQHandler(void)//中斷過程
{
bAdcFlag = 1;
Channel_1 = ( (LPC_ADC->DR[6]) >> 6) & 0x3FF;/* Channel_1 讀取通道6的值*/
Channel_2 = ( (LPC_ADC->DR[7]) >> 6) & 0x3FF;/* Channel_2 讀取通道7的值*/
}
INT16U sTreatmentADC(INT16U wAdcChannel)//處理過程
{
............
if(bAdcFlag == 1){
bAdcFlag = 0; /* 清零標誌*/
...........
}