嵌入式大作业报告.docx
《嵌入式大作业报告.docx》由会员分享,可在线阅读,更多相关《嵌入式大作业报告.docx(29页珍藏版)》请在冰豆网上搜索。
嵌入式大作业报告
武汉理工大学华夏学院
设计报告
课程名称嵌入式应用系统设计与实践
题目基于ARM9的数据采集程序设计
专业计算机科学与技术
班级1121班
学号10210412121
姓名刘明
成绩__________________
2015年6月18日
《嵌入式应用系统设计与实践》考核要求
考核班级:
计算机1121
考核方式:
本课程在教学计划中定为考查课,由于这门课程是理论与实践相结合且实践性很强的课程,该课程的学习目标是培养学生嵌入式开发的基本能力,考核方式拟采用学生独立编写一个嵌入式应用程序的方式,以设计文档的形式提交。
考核题目:
基于ARM9的数据采集程序设计
通过S3C2410X(ARM9)的ADC采集实验箱电位器的值,旋转电位器时可在屏幕上看到当前采集值的变化。
可增功能:
(1)中断功能:
按下中断按键触发中断,中断时三个LED灯闪烁一次,且屏幕上打印正在中断的提示。
(2)报警功能:
设定一个临界值(如500),当采集的值超过此临界值时,灯闪烁报警,三个电位器可与三个灯一一对应。
考核要求:
Ø硬件平台为博创经典UP-NETARM2410实验箱(S3C2410处理器)。
Ø软件平台为eclipse+keil+PUTTY(串口调试助手)。
Ø一人一份纸质报告,报告内容不能雷同,雷同者全部以0分记载。
报告内容包括:
●实现的功能
●软硬件平台
●硬件原理分析及原理图
●硬件驱动的实现步骤及分析
●代码设计:
所有需要编写的代码(如adc.c、adc.h、main.c、Makefile等)、代码的注释,及整个工程树形结构的截图。
●运行及调试的步骤:
需要图文并茂,图必须是自己设计过程中的截图。
●总结体会:
具体学到了什么知识、在学习过程中的经验、体会。
第1章
1.1实验设计题目
基于ARM9的数据采集程序设计。
1.2设计目的
巩固、实践本课程所学理论知识,由于这门课程是理论与实践相结合且实践性很强的课程,该课程的学习目标是培养学生嵌入式开发的基本能力,通过实验设计培养学生查阅、合理运用参考资料的能力。
1.3实验平台
硬件平台:
博创经典UP-NETARM2410实验箱(S3C2410处理器)。
软件平台:
eclipse+keil+PUTTY(串口调试助手)。
1.4设计任务及要求
1.4.1设计任务
通过S3C2410X(ARM9)的ADC采集实验箱电位器的值,旋转电位器时可在屏幕上看到当前采集值的变化。
可增功能:
(1)中断功能:
按下中断按键触发中断,中断时三个LED灯闪烁一次,且屏幕上打印正在中断的提示。
(2)报警功能:
设定一个临界值(如500),当采集的值超过此临界值时,灯闪烁报警,三个电位器可与三个灯一一对应。
1.4.2报告要求
(1)实现的功能
(2)软硬件平台
(3)硬件原理分析及原理图
(4)硬件驱动的实现步骤及分析
(5)代码设计:
所有需要编写的代码。
(如lm.c、lm.h、main.c、Makefile等、代码的注释)
(6)运行及调试的步骤
(7)心得体会
第2章
2.1硬件原理
硬件原理图如图1所示:
图1硬件原理图
2.2设计原理
由硬件原理图可知AD和DA转化与AIN0,AIN1,AIN2三个引脚有关,在gpio一章中查找可知这三个引脚均不是多功能引脚。
在AD和DA转化时也不需要用到时钟信号。
A/D转换器是模拟信号和CPU之间联系的接口,它将连续变化的模拟信号转换为数字信号,以供计算机和数字系统进行分析、处理、存储、控制和显示。
2.3选择通道
通过底板AD-DA-CAN图可知三个ADC电位器对应AINO2,所以选择通道2。
ADCCON[5:
3]=010;
ADCCON&=~(0x7<<3);
ADCCON|=0x1<<4;
2.4时钟配置与分频
ADC控制寄存器(ADCCON)地址为0x58000000。
时钟配置,CLKCON[15]=0b1,表示使能CLKCON|=0x1<<15;
A/D转换器当预定标器值N,预定数据值是(N+1),初始状态是0XFF
ADCCON[14]=0b1,ADCCON[13:
6]=0xFF;
ADCCON|=0x1<<14;
ADCCON|=0xFF<<6;
2.5选择模式
模式选择:
选择正常模式:
ADCCON[2]=0;
ADCCON&=~(0x1<<2);
2.6设置启动
设置启动AD转换的方式:
读启动
ADCCON&=~(0x1<<1);
启动AD转换
ADCCON|=0X1;
2.7实现功能
判断采样转换完成以及读取
while(!
(ADCCON&(1<<15)));
data=ADCDAT0&0xFFF;
2.8相关寄存器定义
ADC控制寄存器(ADCCON)地址为:
0x58000000
ADC触摸屏控制寄存器(ADCTSC)地址为:
0x58000004
ADC启动延时寄存器(ADCDLY)地址为:
0x58000008
ADC转换数据寄存器(ADCDAT1)地址为:
0x58000010
第3章
3.1启动串口调试
首先连接串口线,一端连实验箱的RS232-0,另一端连电脑主机的串口。
3.1.1双击桌面的
,出现下图界面:
3.1.2选中Serial,如下图所示:
3.1.3将“9600”改为“115200”,如下图所示:
3.1.4点击左边树形列表中的“Serial”:
3.1.5将右边最后一项改为“None”
3.1.6点击“Open”按钮,出现如下串口调试界面:
3.1.7拨动实验箱电源开关,若串口调试界面中有如下显示,表示串口通了,配置好了:
按电脑键盘的任意键,光标停在vivi处,等待eclipse程序运行.
3.2启动H-JTAG
先确定实验箱电源打开,并口线连接好,然后单击“开始-->所有程序-->H-JTAG-->H-JTAG”
可以自动检测到CPU类型,如下:
3.3运行Eclipse工程
3.3.1创建Eclipse工程
双击桌面的eclipse
选择工作空间(存放源代码及工程文件的地方),点击OK按钮,打开如下界面:
进入主界面后,单击File->New->CProject菜单项,Eclipse将打开一个标准对话框。
输入project_s3c2410,单击Finish即可创建一个新的工程,建议对每个新建工程使用独立的文件夹。
3.3.2创建Keil工程
点击如下菜单:
进入如下界面:
点击Next按钮,如下图
选择S3C2410A设备,点击Finish按钮,这时会打开keil软件,关闭keil工程。
3.3.3添加文件到工程
到D:
\eclipse_projects_cyg\工程目录下删除project_s3c2410文件夹,然后拷贝老师发的工程文件夹“project_s3c2410空”到D:
\eclipse_projects_cyg\下,把“空”删掉。
再到Eclipse软件下,按F5刷新工程目录,再按照上课讲的新建文件夹和文件,添加程序,按ctrl+s保存,按ctrl+b编译工程。
3.3.4调试工程
点击下图菜单:
右键单击,下面红颜色部分:
出现如下菜单:
点击New菜单,出现如下界面:
点击Browse....,出现下面界面:
选中led,点击OK按钮,出现如下界面:
点击Browse....,出现下面界面:
选中led.uvproj,然后点击OK按钮,出现如下界面:
点击TargetOptions按钮,出现如下界面:
选择Output标签,界面如下:
点击SelectFolderforObjects按钮,出现如下界面:
点击向上按钮,如下图:
点击OK按钮,出现如下界面:
点击Debug标签,出现如下界面:
选择H-JTAGARM,然后点击OK按钮,出现如下界面:
点击Debug按钮,开始调试程序,如下图:
出现下图的对话框时,点“Yes”。
调试成功时出现下图的界面:
点击绿色三角“运行”按钮,看电脑屏幕上的运行效果。
点击红色方块“停止”按钮,停止运行。
若想退回程序编写页面修改程序,点击“C/C++”标签。
3.4打开软件Eclipse
新建一个cproject工程,将第三次试验(I/O口,串口,中断)的文件复制到该工程,并删除创建的工程,刷新界面,获取之前的实验目录。
3.5相关寄存器定义
工程->include文件夹->adc文件夹->adc.h,在adc.h中添加:
#defineADCCON(*((volatileunsignedint*)0X58000000))//ADC控制寄存器
#defineADCTSC(*((volatileunsignedint*)0X58000004))//ADC触摸屏控制寄存器
#defineADCDLY(*((volatileunsignedint*)0X58000008))//ADC启动延时寄存器
#defineADCDAT0(*((volatileunsignedint*)0X5800000C))//ADC转换数据寄存器0
#defineADCDAT1(*((volatileunsignedint*)0X58000010))//ADC转换数据寄存器1
#defineCLKCON(*((volatileunsignedint*)0x4C00000C))//时钟寄存器
intadc_read(void);
voidadc_init(void);
3.6实现驱动
在工程中新建drivers文件夹,在drivers中新建adc文件夹,在adc中新建adc.c文件,在adc.c中添加如下代码:
#include"adc/adc.h"
voidadc_init(void)
{
//时钟配置,CLKCON[15]=0b1,表示使能
CLKCON|=0x1<<15;
//时钟分频ADCCON[14]=0b1,ADCCON[13:
6]=0xFF;
ADCCON|=0x1<<14;
ADCCON|=0xFF<<6;
//通道选择,选择通道2,ADCCON[5:
3]=010;
ADCCON&=~(0x7<<3);
ADCCON|=0x1<<4;
//模式选择:
选择正常模式ADCCON[2]=0;
ADCCON&=~(0x1<<2);
//设置启动AD转换的方式:
读启动
ADCCON&=~(0x1<<1);
//启动AD转换
ADCCON|=0X1;
}
intadc_read(void)
{
intdata;
//启动AD转换
ADCCON|=0X1;
//判断采样转换完成
while(!
(ADCCON&(1<<15)));
data=ADCDAT0&0xFFF;
//启动AD转换
ADCCON|=0X1;
returndata;
}
3.7编写main.c
common文件夹->main.c,在main.c中添加:
#include"lm/lm.h"
#include"gpio/led.h"
#include"uart/uart.h"
#include"key/key.h"
intmain(void)
{
uart_init();
led_init();
key_init();
//读写采样值
while
(1)
{inta,b=0,c=0;
lg_init01();
a=lg_read();
lg_init02();
b=lg_read();
lg_init03();
c=lg_read();
printf("%d\t%d\t%d\n",a,b,c);
}
return0;
}
voiddo_irq(void)
{
intsrc=INTOFFSET;
inti;
puts("刘明21号学渣来袭,还不中断?
Baby!
");
switch(src){
case4:
key_isr();
led_off();
for(i=0;i<1000000;i++);
led_on();
for(i=0;i<1000000;i++);
break;
}
}
3.8修改两个Makefile
复制工程中common文件夹中的Makefile文件到drivers->key中,在drivers->adc下的Makefile中
找到:
“COBJS:
=”
改为:
COBJS:
=adc.o//即将adc.c编译成adc.o
找到“LIB=”
改为:
LIB=libadc.a//将adc.o生成库文件libadc.a
找到工程中的Makefile文件,在其中添加:
LIBS+=drivers/adc/libadc.a//将libadc.a链接到工程中
3.9创建Keil工程
打开eclipse中run->debugconfigurations,右击μVisionproject创建NewBrowse选中adc,点击TargetOptions,打开output中SelectFolderforObjects.点击向上按钮后ok.接着点击debug选择H-JTAGARM,最后点击Debug按钮,开始调试程序,调试完成后运行。
3.10课设截图
3.10.1程序运行截图如图1--图3:
图1随机数值
图2最小数值
图3最大数值
3.10.2文件夹以及文件截图如图4
图4文件夹以及文件截图
第4章
通过本次实验设计,我的实际操作能力和设计能力都得到了一定的提高,但理论与实践之间永远是存在着一定差距的,要把理论知识充分灵活地运用于实践是需要一定的实践经验和牢固的理论基础,希望以后能有更多这样的实践的机会。
经过这次作业让我们对嵌入式Linux应用程序开发的理解更加的清楚了,嵌入式系统是面向用户、面向产品、面向应用的,它必须与具体应用相结合才会具有生命力、才更具有优势。
因此可以这样理解上述三个面向的含义,即嵌入式系统是与应用紧密结合的,它具有很强的专用性。
我所学习的主要是Linux嵌入式系统,其中包括Linux的快速入门、Linux的基础命令、Linux下的编程基础、嵌入式Linux开发环境的搭建、进程控制开发等等。
让我们更加的理解透彻了我们学习的Linux嵌入式系统。
能够让我们学习的东西和书本教材上学到的东西相互的印证,让我们能够更好的对嵌入式Linux系统理解