韦东山Linux嵌入式课程社区
直播中

向可嘉

7年用户 208经验值
私信 关注

为什么我写的ADC裸机程序一直在转换?

写了一个ADC的裸机程序,烧入开发板,发现不能用,一直在转换,而导致无法读取转换后的值下面标红色的那句一直在串口打印,PCLK=50MHZ

int ReadAdc()
{
   /*开始AD转换*/
   ADCCON |= 0x1;
   Uart_SendString("ADC--startn");         
   while(ADCCON & 0x1);
/*检查转换是否结束*/
   while(!(ADCCON & 0x8000))
           Uart_SendString("A/D conversion in processn");     
   Uart_SendString("ADC--endn");               
   return ( (int)ADCDAT0 & 0x3ff );
}

下面我把ADC初始化代码也贴一下
void adc_init(void)
{
        //选择输入通道,AIN0,对应开发板上W1可调电阻
        int channel=0;
        /*设置分频时钟*/
        preScaler = ADC_FREQ;
        preScaler = 50000000/ADC_FREQ - 1; //PCLK=50M
        
        /*AD转换频率设置,最大频率为2.5MHz*/
        ADCCON = (1<<14)|(preScaler<<6)|(channel<<3);        //setup channel
        delay(1000);               
}

我索性把整个代码,贴一下吧,各位帮帮我吧。。。。。。。

回帖(4)

张健

2019-7-18 09:16:06
不知道你是怎么测试的?
可以在启动ADC之前打印ADCCON的值──我怀疑ADC的总时钟没有打开
举报

杨火亭

2019-7-18 09:29:11
回复 2楼thisway.diy的帖子

老师你好,谢谢您的回复,ADC的总时钟 不是CLKCON的第十五位吗?它默认是开启的啊



老师我还想问下,在程序中除了 1.关闭看门狗 2.设置栈 3.设置时钟  4.初始化串口(用于输出信息)5.设置ADCCON,之外不用设置其他的东西吧,我直接下到Nand Flash 的0地址的。
举报

王璨

2019-7-18 09:45:47
回复 2楼thisway.diy的帖子

希望老师回答一下,谢谢了。。。。
举报

范召琳

2019-7-18 09:56:58
有没有尝试打印ADCCON的值?
实在没时间下载代码来看,你就贴关键部分或是提出问题点
举报

更多回帖

发帖
×
20
完善资料,
赚取积分