嵌入式课程设计_第1页
嵌入式课程设计_第2页
嵌入式课程设计_第3页
嵌入式课程设计_第4页
嵌入式课程设计_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上武汉华夏理工学院课 程 设 计课程名称 嵌入式技术与应用课程设计题 目 基于ARM9的数据采集程序设计专 业 自动化 班 级 自动化 1133 学 号 姓 名 成 绩 指导教师 2016年11 月14日专心-专注-专业课程设计任务书学生姓名: 专业班级: 自动化1133 指导教师: 工作单位:信息工程学院设计题目:基于ARM9的数据采集程序设计初始条件:1、硬件平台为博创经典UP-NETARM2410实验箱(S3C2410处理器)。2、软件平台为eclipse+keil+PUTTY(串口调试助手)。设计任务:(在规定的时间内完成下列任务)1、通过S3C2410X(AR

2、M9)的ADC采集实验箱三个电位器的值,旋转电位器时可在屏幕上看到当前采集值的变化。2、中断功能:按下中断按键触发中断,中断时三个LED灯闪烁一次,且屏幕上打印正在中断的提示。3、报警功能:设定一个临界值(如500),当采集的值超过此临界值时,灯闪烁报警,三个电位器与三个灯一一对应。时间安排:各时间段的任务可以交替进行课程设计安排在第10-11周,地点在532实验室,设计步骤及时间进度如下:时间阶段内容第一周星期一介绍题目,查找相关资料第一周星期二需求分析第一周星期三硬件总体设计、软件总体设计,画出硬件原理图和程序流程图第一周星期四星期五编写、调试、修改程序第二周星期一星期三软硬件联调第二周星

3、期四撰写设计报告第二周星期五检查、答辩后修改设计报告设计报告撰写格式要求:(按提供的设计报告统一格式撰写)报告内容应包括:(1)实现的功能 (2)软硬件平台(3)硬件原理分析及原理图(4)硬件驱动的实现步骤及分析(5)程序流程图代码及注释(6)工程树形结构截图(7)运行及调试的步骤(图文并茂) (8)总结体会指 导 教 师 签 名:2016年 11 月 7 日系主任(或责任教师)签名: 2016年 11月7日目录第1章 需求分析.1第2章硬件及驱动系统的实现.2 2.1原理图与引脚.2 2.1.1LED引脚.2 2.1.2 UART.22.1.3 中断开关INTKEY.2 2.1.4 ADC驱

4、动引脚.3 2.2配置.3 2.2.1 LED灯分析配置.32.2.2 UART分析 配置.32.2.3 中断分析配置.72.2.4 ADC及其驱动分析配置.10 2.3驱动.122.3.1 相关寄存器定义.142.3.2 实现驱动.152.3.3 编写main函数.172.3.4修改两个makefile.17第3章系统运行及调试.183.1启动串口调试助手.183.2启动H-JTAG.183.3运行eclipse工程.193.4添加文件到工程.193.5调试工程.193.6 实验现象.21第.23参考文献 .24附录 .25第1章需求分析1.1 考核要求1通过S3C2410X(ARM9)的A

5、DC采集实验箱三个电位器的值,旋转电位器时可在屏幕上看到当前采集值的变化。2中断功能:按下中断按键触发中断,中断时三个LED灯闪烁一次,且屏幕上打印正在中断的提示。3报警功能:设定一个临界值(如500),当采集的值超过此临界值时,灯闪烁报警,三个电位器可与三个灯一一对应,并且发出声音警报。1.2 软硬件平台1.2.1硬件平台 博创经典UP-NETARM2410实验箱(S3C2410处理器)。1.2.2软件平台eclipse+keil+PUTTY(串口调试助手)。第2章硬件及驱动系统的实现2.1原理图与引脚2.1.1 LED引脚1 LED灯及报警因为要实现三个LED灯闪烁,涉及到LED,通过搜索

6、Database第6章Device找到如图2所示的引脚图,找到了GPC5,GPC6,GPC7引脚。当中断开关按下时,LED闪烁一次,同时,LED作为报警器,当超过临界阻值时(实验中为500),灯闪烁报警。2.1.2 UART图2 RS232引脚定义因为要接收数据(电位器的阻值),所以必然涉及到串行数据传输接口。如上图所示,可以看到各个引脚的信息,由于只需要接收数据,实验时接RS232-0。 2.1.3中断开关INTKEY图3 INTKEY引脚原理图 因为要实现按下中断按键触发中断,所以通过搜索Database第6章Device找到如图2所示的引脚图,找到了EINT5引脚。2.1.4 ADC驱动

7、引脚图4 ADC驱动引脚原理图 因为是采集实验箱电位器的值,要把模拟信号转换成为数字信号,这其中涉及到AD/DA转换。所以通过搜索Database第10章AD/DA 找到图1的引脚图。首先实现是采集3个电位器的值,找到了AINT0,AINT1,AINT2引脚。2.2 具体配置 2.2.1 LED灯分析配置 (1)通过到第九章I/O搜索发现该引脚是多功能引脚,如下表,需要进行配置,即作如下配置: GPCCON11:10=0b01;GPCCON13:12=0b01;GPCCON15:14=0b01; 表1 Port C控制寄存器表2 PORT C控制寄存器表3 GPCDAT的描述 (2)无需用到时

8、钟,故无需分频。 (3)因为要控制灯的点亮和熄灭,故要对GPCDAT进行配置,配置见led程序。2.2.2 UART分析配置 (1)通过到第九章I/O搜索RXD0和TXD0,找到了该引脚,是多功能引脚。 (2)因需要接收更新的数据,uart没有时钟,故需要给它配置时钟。在CLOCK章搜索uart得到下表表4 CLK控制寄存器 由于使用的是uart0,故应作如下配置:CLKCON10=0b1,即设置PCLK到串口。 (3)其它参数配置与相关寄存器在uart一章搜索uart有:UART行控制寄存器(ULCONn),其功能及位描述如下表所示表5 uart行控制寄存器 UART控制寄存器(UCONn)

9、,其功能及位描述如下表所示表6 UART控制寄存器 UART FIFO控制寄存器(UFCONn),其功能及位描述如下表所示表7 UART FIFO控制寄存器 UART modem控制寄存器(UMCONn),其功能及位描述如下表所示表8 UART modem寄存器 UART TX/RX状态寄存器(UMCONn),其功能及位描述如下表所示 表9 UART TX/RX状态寄存器 此寄存器系统已经配置好,用来判断发送或者接收是否完成的寄存器。 UART 波特率因子寄存器(UBRDIVn),其功能及位描述如下表所示 表10 UART 波特率因子寄存器 2.2.3 中断配置 (1)到第九章I/O搜索发现E

10、INT5是多功能引脚,需要进行配置,即EXTINT022:20=0b01;即设置的是下降触发。表11 外部中断控制寄存器表12 外部中断挂起寄存器 即中断请求,清除外部中断请求。引脚设置见表13。表13 PORT F控制寄存器 (2)无需用到时钟,无需分频。 (3)参数配置与相关寄存器在第十四章Interrupt controller搜索EINT有: 表14为EINTMASK寄存器,其功能及位描述如下表所示 ,这是多功能管脚中断使能,即外部中断使能,使用时配置为EINTMASK5=0b0。表14 外部中断屏蔽寄存器 表15为SRCPND寄存器,其功能及位描述如下表所示,这是清除中部的中断源,使

11、用时配置为SRCPND4=0b1。表15 SRCPND(中断源挂起)寄存器 表16为INTMOD寄存器,其功能及位描述如下表所示,这是指示中断源为irq类型,使用时配置为INTMOD4=0b0。 表16 INTMOD(中断模式)寄存器 表17为INTMSK寄存器,其功能及位描述如下表所示,表内部中断使能,使用时配置为INTMSK4=0b0。表17 INTMSK(中断屏蔽)寄存器 表18为INTPND寄存器,其功能及位描述如下表所示。用来清除内部中断请求,使用时配置为INTPND4=0b1。表18 INTPND(中断挂起)寄存器 表19是中断偏移寄存器,指示IRQ中断源。表19 INTOFFSE

12、T(中断偏移)寄存器 2.2.4 ADC及其驱动分析配置 (1)通过到第9章I/O 一章搜索没找到,发现AINT0,AINT1,AINT2引脚并不是多功能引脚。 (2)因为要及时对数据进行更新且系统的频率过高,所以要对时钟进行分频,搜索CLOCK章表20 CLK控制寄存器表21 ADCCON 从表20和21中可以看出需要做如下配置:CLKCON15=1,以便把系统时钟给ADC;READ_START1=1,因为已经使用了READ_START,因而可不用ENABLE_START。 (3)参数配置与相关寄存器在ADC一章搜索表22 ADC控制寄存器位描述 在通道选择上,可通过SEL_MUX5:3进行

13、选择;通过配置PRSCVL13:6可进行分频,如PRSCVL13:6=1111 1111b表示256分频;配置A/D转换状态标志,ECFLG15=1。有关ADC启动延时寄存器如下表表23 ADCDLY 有关ADC转换数据寄存器如下表表24 ADC转换数据寄存器 对于普通的A/D转换,使用ADCDAT0来保存转换后的数据。其中XPDATA(正常ADC)是X位置的转换数据值,也是正常A/D转换的数据值,取值范围为03FF。2.3驱动 2.3.1相关寄存器的定义(1)工程-include-gpio-led.h,向其中添加如下代码图5 led.h(2)工程-include-uart-uart.h,向其

14、中添加如下代码图6 uart.h(3)工程-include-key-key.h,向其中添加如下代码图7 key.h(4)工程-include-adc-adc.h,向其中添加如下代码图8 adc.h2.3.2实现驱动(1)在工程中新建drivers文件夹,在其中新建gpio文件夹,在gpio中新建led.c文件,在 led.c中添加如下代码图9 led.c(2)在工程中新建drivers文件夹,在其中新建uart文件夹,在uart中新建uart.c文件,在 uart.c中添加如下代码图10 uart.c(3)在工程中新建drivers文件夹,在其中新建key文件夹,在key中新建key.c文件,

15、在 key.c中添加如下代码图11 key.c(4)在工程中新建drivers文件夹,在其中新建adc文件夹,在adc中新建adc.c文件,在 adc.c中添加如下代码图12 adc.c2.3.3编写main函数编写main.c:common-main.c,向其中添加图13 main.c2.3.4修改两个Makefile将common文件夹中的Makefile复制到drivers-adc中,找到 “COBJS:=”改为 COBJS:=adc.o找到 “LIB:=”改为 LIB:=libadc.a并在工程中的Makefile,LIB+=common/libcommon.a后面加LIB+=driv

16、ers/libadc.a;第三章系统运行及调试3.1启动串口调试首先连接串口线,一端连试验箱的RS232-0,另一端连电脑主机的串口。(1) 双击桌面的PUTTY.EXE,会出现如下界面,选中serial,将9600改为,图14 putty进入界面 (2)点中左边树形列表中的serial,将左边最后一项改为None 。图15 putty修改参数界面(3)点击open 按钮并拨动实验箱电源开关,使实验箱处于通电状态,若串口调试界面显示如下,表示串口通了,配置好了。按电脑任意键,光标停在vivi 处,等待eclipse 程序运行。图16 putty主界面3.2启动H-JTAG先确定实验箱电源打开,

17、并口线连接好,然后直接点击桌面上的H-JTAG图标(若没有可从开始菜单中搜索找到),可以自动检测到CPU的类型。图20 H-JMP3.3 运行eclipse 工程(1)创建eclipse 工程。点击桌面的eclipse 图标,直接点击OK进入eclipse(电脑默认为D盘下的eclipse中),单击File -New- C Project新建一个project_s3c2410 工程,然后点击 Finish 即可。如下图:(2)创建keil 工程。在eclipse 界面上,点击uvision-creat new project ,即出现如下界面:选择GCC 图21 创建keil工程(3) 点ne

18、xt ,选择S3C2410A设备,点击Finish按钮,这时会打开keil软件,关闭keil工程即可。3.4 添加文件到工程在之前新建的工程目录下粘贴已经写好的project_s3c2410文件夹,可直接替换原先的空文件夹。再在eclipse 下,刷新工程目录,最后,按之前的步骤添加程序。3.5 调试工程(1)在eclipse下点run -Debug Congigurations -uvision project(双击),出现如下界面图22 调试工程(2)分别点两个Browse,选择对应的project_s3c2410及project_s3c2410.uvproj。(3)点击Target Op

19、tions-output-Select Folder for objects然后返回上一级(红色标记处),出现如下界面图23 调试工程(4)点击OK后回到之前界面,再点Debug,会看到电脑默认的是H-JTAG。(5)点击OK-Debug ,开始调试程序,如下图图24debug(6)出现下面的对话框时点Yes,图25 调试成功界面绿色按表示“运行”,看现象;红色方块表示“停止”;点击右上角红色下划线可返回程序页面进行改进。图26运行3.6 实验现象按下中断按钮,显示打印doirq图27 结果显示界面 当三个电位器大于500时,灯会闪烁报警图28 报警led灯闪烁第4章总结与体会 通过此次的课程

20、设计,加深了ARM课程中所学到的基本理论知识,也加深了通过使用数据手册来查找相关信息。刚拿道题目时,觉得还比较简单,想想无非是课本上的知识,算一算就好了,可真正开始进行设计时便遇见了困难。课本上的知识都是在理想情况下求出的,且由于教材将的侧重点不同,并未给出明确的算法,经过很长时间的翻阅资料也为能找出明确的方案,最后根据自己新找到的资料再结合老师平时教授的知识,最后再回归到教材上进行总结。看似一个很简单的设计,如果自己没有亲自动手做,便永远不知道它是不是真的很简单。在做课程设计期间,我几乎天天跑图书馆,最后确定了设计方案。这次课程设计,我充分锻炼了自己的能力,包括查阅资料的能力,设计能力,与同

21、学相互探讨的能力。也从课程设计中体会到了书本的知识真的很局限,它只是老师将我们带进去的一门工具,真要达到了学以致用必须要不断的充实自己,学习各方面的知识,不要局限在一本书上,从而真正达到理论联系实际的目的参考文献1 沈文斌,嵌入式硬件系统设计与开发实例详解.北京:电子工业出版社,20052 张景璐,杜辉,吴友兰编著.ARM9嵌入式系统设计与应用案例. 北京:中国电力出版社.20083 熊茂华、杨震伦.ARM9嵌入式系统设计与开发应用.北京:清华大学出版社.20094 程克非,嵌入式系统设计.北京:机械工业出版社,20105 马忠梅等,嵌入式系统设计.北京:北京航空航天大学出版社,2007.6李

22、新峰、何广生。基于ARM9的嵌入式Linux开发技术。电子工业出版社,2008 7孙天泽。嵌入式Linux操作系统。人民邮电出版社。2009 8杨水清、张剑。ARM嵌入式Linux系统开发技术详解。电子工业出版社,2008 9俞建新、王健、宋健建。嵌入式系统基础教程。机械工业出版社,2009 设计者: 汤立争 日 期: 2016年 11 月 14 日附录Led.h:#ifndef _LED_H_#define _LED_H_void led_init(void);void led_on(void);void led_off(void);void led2_on(void);void led1_

23、on(void);void led0_on(void);void led0_off(void);void led1_off(void);void led2_off(void);#endif / _LED_H_Uart.h:#ifndef UART_H_#define UART_H_#endif /* UART_H_ */#define CLKCON (*(volatile unsigned int *)0x4C00000C)#define UCON0 (*(volatile unsigned int *)0x)#define UBRDIV0 (*(volatile unsigned int *

24、)0x)#define ULCON0 (*(volatile unsigned int *)0x)#define UMCON0 (*(volatile unsigned int *)0xC)#define UFCON0 (*(volatile unsigned int *)0x)#define UTRSTAT0 (*(volatile unsigned int *)0x)#define UTXH0 (*(volatile unsigned int *)0x)#define URXH0 (*(volatile unsigned int *)0x)#define GPHCON (*(volatil

25、e unsigned int *)0x)void uart_init(void);void putc(char c);void puts(const char *str);char getc(void);key.h:#ifndef KEY_H_#define KEY_H_#define SRCPND (*(volatile unsigned int *) 0X4A )#define INTMOD (*(volatile unsigned int *) 0X4A )#define INTMSK (*(volatile unsigned int *) 0X4A )#define INTPND (*

26、(volatile unsigned int *) 0X4A )#define INTOFFSET (*(volatile unsigned int *) 0X4A)#define GPFCON (*(volatile unsigned int *) 0x)#define EXTINT0 (*(volatile unsigned int *) 0x)#define EINTMASK (*(volatile unsigned int *) 0xA4)#define EINTPEND (*(volatile unsigned int *) 0xA8)void key_init(void);void

27、 key_isr(void);#endif /* KEY_H_ */adc.h:#ifndef adc_H_#define adc_H_#define CLKCON (*(volatile unsigned int *) 0x4C00000C )#define ADCCON (*(volatile unsigned int *) 0x )#define ADCDAT0 (*(volatile unsigned int *) 0xC )void adc_init0(void);void adc_init1(void);void adc_init2(void);int adc_read(void)

28、;#endif /* adc_H_ */led.c:#include gpio/led.hvoid led_init(void) / led1 *(volatile unsigned int *)0x) &= (0x3 10); *(volatile unsigned int *)0x) |= 0x1 10; / led2 *(volatile unsigned int *)0x) &= (0x3 12); *(volatile unsigned int *)0x) |= 0x1 12; / led3 *(volatile unsigned int *)0x) &= (0x3 14); *(v

29、olatile unsigned int *)0x) |= 0x1 14;void led0_off(void)/ led1 置1熄灭*(volatile unsigned int *)0x) |= 0x1 5;void led1_off(void)/ led2*(volatile unsigned int *)0x) |= 0x1 6;void led2_off(void)/ led3*(volatile unsigned int *)0x) |= 0x1 7;void led_off(void)/ led1 置1熄灭*(volatile unsigned int *)0x) |= 0x1

30、5;/ led2*(volatile unsigned int *)0x) |= 0x1 6;/ led3*(volatile unsigned int *)0x) |= 0x1 7;void led0_on(void)/ led1清0点亮*(volatile unsigned int *)0x) &= (0x1 5);void led1_on(void)/ led2*(volatile unsigned int *)0x) &= (0x1 6);void led2_on(void)/ led3*(volatile unsigned int *)0x) &= (0x1 7);void led_

31、on(void)/ led1清0点亮*(volatile unsigned int *)0x) &= (0x1 5);/ led2*(volatile unsigned int *)0x) &= (0x1 6);/ led3*(volatile unsigned int *)0x) &= (0x1 7);uart.c:#include uart/uart.hvoid putc(char c)UTXH0 = c;while (!(UTRSTAT0 & (1 1);char getc(void)while (!(UTRSTAT0 & 1);return URXH0 & 0xff;void puts

32、(const char *str)int i = 0;while (stri != 0) if (stri = n) putc(r);putc(stri);i += 1;void uart_init(void)/muxed,GPHCON5:4=10, GPHCON7:6=10 GPHCON&=(0x34); GPHCON|=(0x24); GPHCON&=(0x36); GPHCON|=(0x26);/时钟配置,搜索UART, CLKCON10 = 0b1(设置PCLK到串口) CLKCON|=(0x110);/设置数据位(5-8 bit),ULCON01:0 = 0b11(8位数据位) UL

33、CON0|=(0x3);/设置停止位,ULCON02 = 0b0(一位停止位) ULCON0&=(0x12);/设置校验位(奇/偶校验/不/强制0/1),ULCON05:3 = 0b000(不校验) ULCON0&=(0x73);/设置不为红外模式?(No Infrared),ULCON06 = 0b0 ULCON0&=(0x16);/接收模式设置?UCON01:0 = 0b01(polling轮询) UCON0&=(0x3); UCON0|=(0x1);/发送模式设置?UCON03:2 = 0b01(polling轮询) UCON0&=(0x32); UCON0|=(0x12);/设置loo

34、p-back回送,UCON05 = 0b0(非Loop-back模式) UCON0&=(0x15);/实现错误检测,UCON06 = 0b0(不产生错误报告) UCON0&=(0x16);/设置接收超时,UCON07 = 0b0(关闭超时) UCON0&=(0x17);/选择PCLK时钟,UCON010 = 0b0(选择PCLK为串口时钟) UCON0&=(0x110);/设置fifo,UFCON00 = 0b0(关闭,因用轮询而不是中断) UFCON0|=(0x1);/关闭发送请求RTS,不使用Modem,UMCON00 = 0b0 UMCON0|=(0x1);/设置自动流控,UMCON04

35、 = 0b0(关闭自动流控) UMCON0&=(0x14);/设置波特率,UBRDIV0 = / / 16 - 1 = 26 UBRDIV0 = 26; key.c:#include key/key.hvoid key_init(void) /muxed,GPFCON11:10=0x10 GPFCON&=(310);GPFCON|=(0x210);/下降沿触发EXTINT022:20=0b010EXTINT0&=(0x720);EXTINT0|=(0x220);/irq类型INTMOD4=0b0INTMOD&=(14);/外部中断使能 EINTMASK5=0b0EINTMASK&=(15);/ 内部中断使能INTMSK4INTMS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论