- #include
- void PLLSet()
- {
- unsigned long ulRCC,ulDelay;
- ulRCC=SYSCTL_RCC_R; //读取当前RCC寄存器的值
- ulRCC|=1<<11; //旁路PLL
- ulRCC&=~(1<<22); //不使用系统分频器
- SYSCTL_RCC_R=ulRCC;
- ulRCC=SYSCTL_RCC_R;
- ulRCC&=~(3<<4); //选择主振荡器做时钟
- ulRCC&=~(0xf<<6); //设置晶振频率
- ulRCC|=SYSCTL_RCC_XTAL_6MHZ;
- ulRCC&=~(0xf<<23); //设置分频系数
- ulRCC&=~(1<<13); //PLL上电
- ulRCC&=~(1<<12); //PLL使能输出
- SYSCTL_RCC_R=ulRCC; //写RCC寄存器
- for(ulDelay=32768;ulDelay>0;ulDelay--)
- {
- if(SYSCTL_RIS_R&(1<<6))
- {
- SYSCTL_MISC_R=1<<6; //清PLL锁定位
- break;
- }
- }
- SYSCTL_RCC_R|=1<<22; //使用系统分频器
- SYSCTL_RCC_R&=~(1<<11); //PLL输出到系统时钟
- }
- int main()
- {
- long ulData;
- PLLSet();
- SYSCTL_RCGC0_R|=SYSCTL_RCGC0_ADC; //0x00010000使能ADC模块的时钟
- SYSCTL_RCGC0_R|=SYSCTL_RCGC0_ADCSPD125K ; //0x00000000;125Kbps采样率
-
- SYSCTL_RCGC2_R |=SYSCTL_RCGC2_GPIOD; //1.使能LED所在管脚时钟
- GPIO_PORTD_DIR_R |= 0x01; //2.设置LED所在管脚为输出
- GPIO_PORTD_DEN_R |=0x01; //3.LED所在管脚数字使能*/
-
- ADC0_ACTSS_R =0x00000000; //禁止所有采样序列
- ADC0_SSPRI_R=0x00000000; //设置采样序列0为最高优先级
- ADC0_EMUX_R=0x00000000; //采样序列0为处理器触发
- ADC0_SSMUX0_R =0x00000000; //采样序列0的第0步使用ADC0
- ADC0_SSCTL0_R =0x00000002; //采样序列0采样完第0步后结束
- ADC0_ACTSS_R |=0x00000001; //使能采样序列0
- while(1)
- {
- ADC0_PSSI_R |=0x00000001; //处理器触发采样序列0
-
- while(ADC0_SSFSTAT0_R&0x00000100); //等待FIFO 0为非空,
- ulData=ADC0_SSFIFO0_R; //读出10位转换结果
- ulData=(ulData*1000*3)/1024; //换算成真实电压值
- if(ulData>2)
- GPIO_PORTD_DATA_R=0X01; //如果电压大于2,PD0输出高电平点亮LED
- }
- }
复制代码请各位帮我看看程序有没有问题,谢谢
[
本帖最后由 shmily53 于 2013-8-19 22:20 编辑 ]
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这个型号的 ADC 就是默认的,不需要配置 GPIO.
不过我看数据手册上是 RCGC1 ,你的是 RCGC0
Enable the ADC clock by writing a value of 0x00010000 to the RCGC1 register in the System
Control module.
一周热门 更多>