5273|14

78

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

这是关于LM3S328的ADC实验,请问程序有问题么 [复制链接]

  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 编辑 ]

无标题.png (34.93 KB, 下载次数: 0)

软件仿真显示,ADC时钟为16.67MHz,符合要求

软件仿真显示,ADC时钟为16.67MHz,符合要求

最新回复

不错,谢谢,分享。   详情 回复 发表于 2019-7-9 10:06

点评

没有看到对 ADC 所在的 AIN 管脚进行配置的代码  详情 回复 发表于 2013-8-20 10:02
 
点赞 关注

回复
举报

1803

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

回复 楼主shmily53 的帖子

没有看到对 ADC 所在的 AIN 管脚进行配置的代码

点评

ADC0_ACTSS_R =0x00000000; //禁止所有采样序列 ADC0_SSPRI_R=0x00000000; //设置采样序列0为最高优先级 ADC0_EMUX_R=0x00000000; //采样序列0为处理器触发 ADC0_SSMUX0  详情 回复 发表于 2013-8-20 14:24
ADC0不是都已经配置好了么?加Q细聊759797452  详情 回复 发表于 2013-8-20 14:22
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发Study_Stellaris 的帖子

ADC0不是都已经配置好了么?加Q细聊759797452
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 沙发Study_Stellaris 的帖子

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

点评

你配置的是 ADC 模块,需要配置 GPIO 管脚工作在 AIN 模式. 比如 GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_7);  详情 回复 发表于 2013-8-20 16:29
 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

5
 

回复 4楼shmily53 的帖子

你配置的是 ADC 模块,需要配置 GPIO 管脚工作在 AIN 模式.
比如    GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_7);

点评

能具体用实现下么,看仿真图  详情 回复 发表于 2013-8-20 18:49
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

6
 
AIN模式是?这个库函数是把某个管脚配置成ADC功能吧?能不能更具图具体说一下?还是不太理解。(使用的是ADC0)

ADC1.png (35.5 KB, 下载次数: 0)

ADC1.png
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 5楼Study_Stellaris 的帖子

能具体用实现下么,看仿真图

点评

有 LM3S328 的数据手册吗? 你需要看一下 ADC0 到底是哪个 GPIO 管脚. 建议里用库函数吧,寄存器效率太低了,你本可将更多的时间用来学习其它的东西. [ 本帖最后由 Study_Stellaris 于 2013-8-21 11:57 编辑 ]  详情 回复 发表于 2013-8-21 08:42
 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

8
 

回复 7楼shmily53 的帖子

有 LM3S328 的数据手册吗?
你需要看一下 ADC0 到底是哪个 GPIO 管脚.
建议里用库函数吧,寄存器效率太低了,你本可将更多的时间用来学习其它的东西.

[ 本帖最后由 Study_Stellaris 于 2013-8-21 11:57 编辑 ]

点评

这个库函数我也看过,有数据手册啊,但是我找遍了数据手册也没有关于ADC0 到底是哪个 GPIO 管脚。只是介绍了是模拟量输入管脚  详情 回复 发表于 2013-8-21 10:57
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 8楼Study_Stellaris 的帖子

这个库函数我也看过,有数据手册啊,但是我找遍了数据手册也没有关于ADC0 到底是哪个 GPIO 管脚。只是介绍了是模拟量输入管脚
 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

10
 
不好意思,之前没看数据手册,我错了
这个型号的 ADC 就是默认的,不需要配置 GPIO.
不过我看数据手册上是 RCGC1 ,你的是 RCGC0
Enable the ADC clock by writing a value of 0x00010000 to the RCGC1 register in the System
Control module.

点评

嗯嗯,非常感谢!其他地方没问题吧  详情 回复 发表于 2013-8-21 20:04
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

11
 

回复 10楼Study_Stellaris 的帖子

嗯嗯,非常感谢!其他地方没问题吧
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

12
 
虽然数据手册是RCGC1,但lm3s328.h中RCGC1没有关于ADC的使能0x00010000.而且改成RCGC1后,protues仿真既然出错Access to register of unclocked peripheral at 0x40038000 cause BUS_FAULT

LM3S.png (31.48 KB, 下载次数: 0)

LM3S.png
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

13
 
ADC已经解决,共享给大家

ADC.zip

145.11 KB, 下载次数: 2

售价: 1 分芯积分  [记录]

点评

不错,谢谢,分享。  详情 回复 发表于 2019-7-9 10:06
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

14
 
shmily53 发表于 2013-8-21 20:25 虽然数据手册是RCGC1,但lm3s328.h中RCGC1没有关于ADC的使能0x00010000.而且改成RCGC1后,protues仿真既然 ...

能请问一下这个问题是怎么解决的嘛,谢谢

 
 
 

回复

2618

帖子

0

TA的资源

纯净的硅(高级)

15
 
shmily53 发表于 2013-9-6 13:01 ADC已经解决,共享给大家

不错,谢谢,分享。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表