这是关于LM3S328的ADC实验,请问程序有问题么

2019-03-24 12:15发布

  1. #include
  2. void PLLSet()
  3. {
  4.         unsigned long ulRCC,ulDelay;
  5.         ulRCC=SYSCTL_RCC_R;               //读取当前RCC寄存器的值
  6.         ulRCC|=1<<11;                     //旁路PLL
  7.         ulRCC&=~(1<<22);                  //不使用系统分频器
  8.         SYSCTL_RCC_R=ulRCC;
  9.         ulRCC=SYSCTL_RCC_R;
  10.         ulRCC&=~(3<<4);              //选择主振荡器做时钟
  11.         ulRCC&=~(0xf<<6);  //设置晶振频率
  12.         ulRCC|=SYSCTL_RCC_XTAL_6MHZ;   
  13.         ulRCC&=~(0xf<<23);    //设置分频系数
  14.         ulRCC&=~(1<<13);   //PLL上电
  15.         ulRCC&=~(1<<12);        //PLL使能输出
  16.         SYSCTL_RCC_R=ulRCC;    //写RCC寄存器
  17.         for(ulDelay=32768;ulDelay>0;ulDelay--)
  18.         {
  19.                 if(SYSCTL_RIS_R&(1<<6))
  20.                 {
  21.                         SYSCTL_MISC_R=1<<6;   //清PLL锁定位
  22.                         break;
  23.                 }
  24.         }
  25.         SYSCTL_RCC_R|=1<<22;         //使用系统分频器
  26.         SYSCTL_RCC_R&=~(1<<11);      //PLL输出到系统时钟        
  27. }
  28. int main()
  29. {
  30.          long ulData;
  31.         PLLSet();
  32.         SYSCTL_RCGC0_R|=SYSCTL_RCGC0_ADC;  //0x00010000使能ADC模块的时钟
  33.         SYSCTL_RCGC0_R|=SYSCTL_RCGC0_ADCSPD125K ; //0x00000000;125Kbps采样率
  34.         
  35.         SYSCTL_RCGC2_R |=SYSCTL_RCGC2_GPIOD;   //1.使能LED所在管脚时钟
  36.         GPIO_PORTD_DIR_R |= 0x01;             //2.设置LED所在管脚为输出
  37.         GPIO_PORTD_DEN_R |=0x01;              //3.LED所在管脚数字使能*/
  38.         
  39.         ADC0_ACTSS_R =0x00000000;     //禁止所有采样序列
  40.         ADC0_SSPRI_R=0x00000000;      //设置采样序列0为最高优先级
  41.         ADC0_EMUX_R=0x00000000;       //采样序列0为处理器触发
  42.         ADC0_SSMUX0_R =0x00000000;     //采样序列0的第0步使用ADC0
  43.         ADC0_SSCTL0_R =0x00000002;     //采样序列0采样完第0步后结束
  44.         ADC0_ACTSS_R |=0x00000001;    //使能采样序列0
  45.         while(1)
  46.         {
  47.                 ADC0_PSSI_R |=0x00000001;    //处理器触发采样序列0
  48.                
  49.                 while(ADC0_SSFSTAT0_R&0x00000100); //等待FIFO 0为非空,
  50.                 ulData=ADC0_SSFIFO0_R;   //读出10位转换结果
  51.                 ulData=(ulData*1000*3)/1024;  //换算成真实电压值
  52.                 if(ulData>2)
  53.                         GPIO_PORTD_DATA_R=0X01;    //如果电压大于2,PD0输出高电平点亮LED
  54.         }
  55. }
复制代码请各位帮我看看程序有没有问题,谢谢

[ 本帖最后由 shmily53 于 2013-8-19 22:20 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
Study_Stellaris
2019-03-25 19:02
不好意思,之前没看数据手册,我错了
这个型号的 ADC 就是默认的,不需要配置 GPIO.
不过我看数据手册上是 RCGC1 ,你的是 RCGC0
Enable the ADC clock by writing a value of 0x00010000 to the RCGC1 register in the System
Control module.

一周热门 更多>

相关问题

    相关文章