【lpc11u34 ADC读取的值总是0x3ff】

2019-03-25 20:24发布

我使用ZLG提供的实例代码去调试ADC,PIO0_11引脚接可调电源,通过可调电源来改变模拟电压值,但是,不管我怎么改变电压值,读取出来的AD转换值总是0x3ff,IC的VDD为固定3.3V。
代码如下:

uint32_t  ulADCBuf;
uint32_t  ADCFlag;
char     GcRcvBuf[20];                                                  /* AD采集到的数据               */
#define BURST   0                                                       /* AD BURST模式选择             */


void ADCInit( void )
{
    LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 16);  
    LPC_IOCON->R_PIO0_11 &= ~0xBF;                                     /* 配置PIO0_11为模拟输入模式     */
    LPC_IOCON->R_PIO0_11 |=  0x02;                                     /* PIO0_11模拟输入通道0          */
    LPC_SYSCON->PDRUNCFG &= ~(0x01 << 4);                               /* ADC模块上电                   */
    LPC_SYSCON->SYSAHBCLKCTRL |=  (0x01 << 13);                         /* 使能ADC模块时钟               */
    LPC_ADC->CR = ( 0x01 << 0 ) |                                       /* SEL=1,选择ADC0                */
                  (( SystemFrequency / 1000000 - 1 ) << 8 ) |           /* 转换时钟1MHz                  */
                  ( 0 << 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 << 0);                                          /* 通道0中断使能                 */
}


void ADC_IRQHandler(void)
{
    ulADCBuf = LPC_ADC->DR[0];                                          /* 读取通道0的值                */
    ulADCBuf = (ulADCBuf >> 6) & 0x3FF;
    printf("ulADCBuf  = %x", ulADCBuf );//此处打印值一直为0x3ff
    ADCFlag  = 1;                                                       /* 置标志位                     */
}

int main(void)
{
    uint32_t  i = 0;
    uint32_t  ulADCData;
    SystemInit();                                                       /* 系统初始化                   */
    uartInit();                                                         /* 串口初始化                   */
    ADCInit();                                                          /* ADC模块初始化                */
    ADCFlag   = 0;
#if BURST
        LPC_ADC->CR   |= 1<<16;
#else
        LPC_ADC->CR |= 1 << 24;
#endif
     while (1) {
        if (ADCFlag == 1) {
            ADCFlag   = 0;                                                /* 清零标志                     */
            i++;
            ulADCData += ulADCBuf;
            if(i == 10) {
                i = 0;
                ulADCData = (ulADCData / 10);                            /* 取10次采样的平均值           */
                ulADCData = (ulADCData * 3300) / 1024;                           
                printf("ulADCData  = %x", ulADCData );//此处打印值一直为0xce0
                ulADCData = 0;
                myDelay(10);
            }
#if BURST == 0
                LPC_ADC->CR |= 1 << 24;
#endif
        }
      }  
}

各位有碰到过类似的情况吗? 此帖出自小平头技术问答
0条回答

一周热门 更多>