基于ARM的数据采集程序设计嵌入式系统应用II课程设计.docx
《基于ARM的数据采集程序设计嵌入式系统应用II课程设计.docx》由会员分享,可在线阅读,更多相关《基于ARM的数据采集程序设计嵌入式系统应用II课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
基于ARM的数据采集程序设计嵌入式系统应用II课程设计
理工学院
设计报告
课程名称嵌入式系统应用II
题目基于ARM9的数据采集程序设计
专业计算机科学与技术
班级计算机
学号
姓名
成绩__________________
《嵌入式系统应用II》考核要求
考核班级:
考核方式:
本课程为考查课,由于这门课程是理论与实践相结合且实践性很强的课程,学习目标是培养学生嵌入式开发的基本能力,考核方式拟采用学生独立编写一个嵌入式应用程序的方式,以设计文档的形式提交。
考核题目:
基于ARM9的数据采集程序设计
通过S3C2410X(ARM9)的ADC采集实验箱三个电位器的值,旋转电位器时可在屏幕上看到当前采集值的变化。
考核要求:
Ø硬件平台为博创经典UP-NETARM2410实验箱(S3C2410处理器)。
Ø软件平台为eclipse+keil+PUTTY(串口调试助手)。
Ø一人一份纸质报告,报告内容不能雷同,雷同者全部以0分记载。
报告内容包括:
●实现的功能
●软硬件平台
●硬件原理分析及原理图
●硬件驱动的实现步骤及分析
●代码设计:
所有需要编写的代码(如adc.c、adc.h、main.c、Makefile等)、代码的注释,及整个工程树形结构的截图。
●运行及调试的步骤:
需要图文并茂,图必须是自己设计过程中的截图。
●总结体会:
具体学到了什么知识、在学习过程中的经验、体会。
成绩评定:
平时成绩50%+期末成绩50%
作品具体评分标准如下:
评定项目
评分成绩
1.实现三个电位器的数据采集功能,有运行结果图(含学号或姓名)。
30分
2.问题分析正确、硬件驱动的实现步骤详细。
20分
3.代码设计正确、注释完整。
20分
4.运行及调试的步骤正确、详细、图文并茂。
20分
5.报告格式规范、条理清晰、语句通顺。
10分
总分
100分
第一章.设计背景
由于Linux系统是开源系统,其内核和各种开发工具都可以从网络上轻易获取,使其在嵌入式系统的开发中得到了越来越广泛的应用。
但Linux系统本身并没有对种类繁多的硬件设备都提供现成的驱动程序,特别是由于工程应用中的灵活性,其驱动程序更是难以统一,这时就需开发一套适合于自己产品的设备驱动。
这使得Linux设备驱动程序的开发在整个嵌入式系统开发工作中占有很重要的地位。
本文针对现在非常流行的一款三星公司生产的ARM9嵌入式微处理器S3C2410,在Linux操作系统下实现了多路AD转换的驱动,通过该驱动程序实例,介绍在Linux系统下驱动程序编写的一般方法,包括驱动程序和测试程序的编写。
本次设计采用的实验器材有:
1.硬件平台为博创经典UP-NETARM2410实验箱(S3C2410处理器)。
2.软件平台为eclipse+keil+PUTTY(串口调试助手)。
第二章.设计目的
2.1设计目的:
1.熟悉基于ARM微处理器的嵌入式系统开发的过程;
2.掌握嵌入式系统开发的A/D接口原理;
3.掌握S3C2410的AD相关寄存器的配置及编程应用方法;
4.掌握eclipse+keil的开发流程;
5.锻炼实践动手能力和团队协作能力。
2.2实现功能:
通过S3C2410X(ARM9)的ADC采集实验箱电位器的值,旋转电位器时可在屏幕上看到当前采集值的变化。
中断功能:
按下中断按键触发中断,中断时三个LED灯闪烁一次,且屏幕上打印正在中断的提示。
报警功能:
设定一个临界值(如500),当采集的值超过此临界值时,灯闪烁报警,三个电位器可与三个灯一一对应。
第三章.设计原理
3.1ARM9实验箱简介
ARM9采用哈佛体系结构,指令和数据分属不同的总线,可以并行处理。
在流水线上,ARM7是三级流水线,ARM9是五级流水线。
由于结构不同,ARM7的执行效率低于ARM9。
平时所说的ARM7、ARM9实际上指的是ARM7TDMI、ARM9TDMI软核,这种处理器软核并不带有MMU和cache,不能够运行诸如linux这样的嵌入式操作系统。
而ARM公司对这种架构进行了扩展,所以有了ARM710T、ARM720T、ARM920T、ARM922T等带有MMU和cache的处理器内核。
基于arm9内核的处理器,是具有低功耗,高效率的开发平台。
广泛用于各种嵌入式产品。
它主要应用于音频技术以及高档工业级产品,可以跑linux以及wince等高级嵌入式系统,可以进行界面设计,做出人性化的人机互动界面,像一些网络产品和手机产品,如图1:
图1ARM9原理图
3.2A/D接口原理
A/D转换器是模拟信号和CPU之间联系的接口,它将连续变化的模拟信号转换为数字信号,以供计算机和数字系统进行分析、处理、存储、控制和显示。
与A/D转换相关的寄存器
(1)ADC控制寄存器(ADCCON)
(2)ADC触摸屏控制寄存器(ADCTSC)
(3)ADC启动延时寄存器(ADCDLY)
(4)ADC转换数据寄存器(ADCDATn)
ADC支持14位模数转换,包含一个多路转换器,8个可独立配置的通道、一个参考电压发生器。
特点:
1、可选的抽取率(采样频率);
2、8个独立输入通道,可接受单端或差分信号;
3、参考电压可选内部单端、外部单端、外部差分或AVDD5;
4、转换结束可触发中断;
5、转换结束可触发DMA;
6、片上温度传感器输入;
7、电池测量功能;
其基本原理图如图2所示:
图2ADC原理图
S3C2410的ADC是8路复用的,开发平台上的3个ADC电位器对应AIN0-2,触摸屏电路使用AIN5和AIN7。
ADC电路的参考电压VERF固定为3.3V电压,输入电压范围是0到3.3V。
A/D转换器是模拟信号和CPU之间联系的接口,它将连续变化的模拟信号转换为数字信号,以供计算机和数字系统进行分析、处理、存储、控制和显示。
第四章.详细设计
4.1muxed引脚判断
在IO一章搜索AIN0,没有,不是多功能引脚。
4.2clk配置
4.2.1开启时钟
在07-clockpowermanagement一章中找到如图3:
图3时钟clk状态表
将ADC设置为使能状态,CLKCON[15]=0b1。
4.2.2时钟分屏
在16-ADC&touchscreen一章中的寄存器中配置找到如图4图表:
图4时钟分屏配置图
设置A/D转换器预分频器:
ADCCON[14]=0b1。
设置A/D转换器预分频器:
ADCCON[13:
6]=0xFF。
256分频,并使能分频。
4.3参数设置
查看图4-2可知:
1.ADC通道选择为AIN2:
ADCCON[5:
3]=0b010
2.模式选择为正常模式:
ADCCON[2]=0b0
3.设置启动AD转换的方式为读启动:
ADCCON[1]=0b1
4.启动AD转换:
ADCCON[0]=0b1
第五章.具体代码实现
5.1实现驱动
在工程中新建drivers文件夹,在drivers中新建adc文件夹,在adc中新建adc.c文件,在adc.c中添加如图5和图6代码:
图5adc.h代码图
图6adc.h代码图续
5.2相关寄存器定义
参考数据手册图7:
图7寄存器定义图
工程->include文件夹->adc文件夹->adc.h,在adc.h中添加如图8的代码:
图8adc.h代码图
5.3编写main.c
common文件夹->main.c,在main.c中添加如图9和图10的代码:
图9main.c代码图
图10main.c代码图续
5.4修改两个Makefile文件
复制工程中common文件夹中的Makefile文件到drivers->adc中,在drivers->adc下的Makefile中
1.找到:
“COBJS:
=”
改为:
COBJS:
=adc.o//即将adc.c编译成adc.o
2.找到“LIB=”
改为:
LIB=libadc.a//将adc.o生成库文件libadc.a
3.找到工程中的Makefile文件,在其中添加:
LIBS+=drivers/adc/libadc.a//将libadc.a链接到工程中
完成后的结果如图11:
图11Makefaile代码图
最后工程结构树状图如图12:
图12工程结构树状图
第六章实验运行步骤
6.1启动串口调试
首先连接串口线,一端连实验箱的RS232-0,另一端连电脑主机的串口。
1、双击桌面的
,选中Serial,将“9600”改为“115200”,点击左边树形列表中的“Serial”,将右边最后一项改为“None”,点击“Open”按钮,出现如下串口调试界面:
图13串口调试界面图
表示串口通了,配置好了。
按电脑键盘的任意键,光标停在vivi处,等待eclipse程序运行。
6.2启动H-JTAG
先确定实验箱电源打开,并口线连接好,然后单击“开始-->所有程-->H-JTAG-->H-JTAG”
可以自动检测到CPU类型,如下图14:
图14H-JTAG检测图
6.3运行Eclipse工程
1.创建Eclipse工程
双击桌面的eclipse选择工作空间(存放源代码及工程文件的地方),点击OK按钮,进入主界面后,单击File->New->CProject菜单项,Eclipse将打开一个标准对话框。
输入project_s3c2410(新建工程的名字,后面的示例图中的工程名不是project_s3c2410,是led)单击Finish即可创建一个新的工程,建议对每个新建工程使用独立的文件夹。
2.创建Keil工程
点击μVision->Create/UpdateμVisionProject,进入μVisionProject界面,将Compiler设置为GCC,点击Next->S3C2410A->Finish,这时会打开Keil软件,关闭Keila工程。
3.添加文件到工程
到D:
\eclipse_projects_cyg\工程目录下删除project_s3c2410文件夹,然后拷贝上次实验的工程文件夹“project_s3c2410”到D:
\eclipse_projects_cyg\下。
再到Eclipse软件下,按F5刷新工程目录,再按照上课讲的新建文件夹和文件,添加程序,按ctrl+s保存,按ctrl+b编译工程。
4.调试工程
点击RUN-->DebugConfigurations…,出现DebugConfigurations界面,右键单击μVisionProject,点击New,单击Browse-->protect_s3c2410-->OK;单击File的Browse,选中protect_s3c2410.uvproj-->OK,点击TargetOptions按钮,选择Output-->SelectFolderforObjects按钮,点击向上按钮,然后点击OK按钮;
点击Debug标签,选择H-JTAGARM,然后点击OK按钮,点击Debug按钮,开始调试程序。
再弹出几个请求确认界面点击Yes就好。
调试成功后出现Debug界面,点击绿色按钮击开始运行。
观察试验箱以及串口调试界面变化。
图15Debug调试图
第七章.实验现象&结果分析
7.1实验现象
点击绿色三角按钮运行后,PUTTY界面连续读取并显示AIN0,AIN1,AIN2的数值,分别旋转3个电位器,串口调试助手屏幕上显示的数值也回发生变化。
按下中断按键触发中断,中断时三个LED灯闪烁一次,且屏幕上打印正在中断的提示,并停止继续读取。
再过一定的延时时间后,会继续读取并显示数值于屏幕上,如图16。
图16采集及中断现象图
7.2总结体会
这次大作业让我更加熟悉了eclipse运行过程和程序代码的编写。
因前几次实验的操作,对eclipse的步骤已经轻车熟路,C代码的编写还有些陌生,在编译时也出现了很多格式错误,通过修改一一排除。
这次试验让自己收获挺多的,不仅复习了之前已经做过了的IO口、中断和串口实验的内容,也因为自己动手查的ADC的数据手册,让自己对ADC的知识有了更多的了解。
同时在这次实验中我不仅学到很多ARM9系统各方面的知识,更重要的是增进了和其他同学之间的交流,同学们坐在一起畅所欲言,互相讨论,交流,把自己不理解,不明白的地方提出来,让老师来帮助解决,这样使得相互之间都得到了学习,巩固知识的机会,提高了学习的效率,这一学期的嵌入式课程让人受益匪浅。