设计报告课程名称嵌入式技术I题目基于ARM9的数据采集应用程序设计专业电子信息工程班级学号姓名成绩2014年06月24日(注:为设计报告完成的日期)目录第一章实验设计要求……………………………………………….1第二章实验分析………………………………………………………2第三章实验步骤以及相关程序设计…………………………………4第四章课题总结和体会………………………………………………81第一章实验设计要求考核题目:基于ARM9的数据采集应用程序设计通过S3C2410X(ARM9)的ADC采集实验箱电位器的值,旋转电位器时可在屏幕上看到当前采集值的变化。实验箱有三个电位器,学生可自选一个或多个。可增功能:(1)中断功能:按下中断按键触发中断,中断时三个LED灯闪烁一次,且屏幕上打印正在中断的提示。(2)报警功能:设定一个临界值(如500),当采集的值超过此临界值时,灯闪烁报警,三个电位器可与三个灯一一对应。考核要求:硬件平台为博创经典UP-NETARM2410实验箱(S3C2410处理器)。软件平台为eclipse+keil+PUTTY(串口调试助手)。报告内容包括:实现的功能软硬件平台硬件原理分析及原理图硬件驱动的实现步骤及分析代码设计:所有需要编写的代码(如adc.c、adc.h、main.c、Makefile等)、代码的注释。运行及调试的步骤总结体会:具体学到了什么知识、在学习过程中的经验、体会。2第二章实验分析A/D转换器是模拟信号和CPU之间联系的接口,它将连续变化的模拟信号转换为数字信号,以供计算机和数字系统进行分析、处理、存储、控制和显示。在编写驱动是可以通过查找数据手册:2.1.选择通道(通过底板AD-DA-CAN图可知三个ADC电位器对应AINO2,所以选择通道2)ADCCON[5:3]=010;ADCCON&=~(0x73);ADCCON|=0x14;2.2.时钟配置与分频(如图2-1和图2-2)ADC控制寄存器(ADCCON)地址为0x58000000图2-1时钟配置,CLKCON[15]=0b1,表示使能CLKCON|=0x115;时钟分频图2-2A/D转换器当预定标器值N,预定数据值是(N+1),初始状态是0xffADCCON[14]=0b1,ADCCON[13:6]=0xFF;ADCCON|=0x114;ADCCON|=0xFF6;2.3.选择模式(如图2-3)图2-3模式选择:选择正常模式ADCCON[2]=0;ADCCON&=~(0x12);2.4.设置启动设置启动AD转换的方式:读启动ADCCON&=~(0x11);3启动AD转换ADCCON|=0X1;2.5.实现功能判断采样转换完成以及读取while(!(ADCCON&(115)));data=ADCDAT0&0xFFF;2.6.相关寄存器定义(如图2-4)图2-4ADC触摸屏控制寄存器(ADCTSC)地址为0x58000004ADC启动延时寄存器(ADCDLY)地址为0x58000008ADC转换数据寄存器(ADCDAT0)地址为0x5800000CADC转换数据寄存器(ADCDAT1)地址为0x58000010时钟寄存器(CLKCON)地址为0x4C00000C4第三章实验步骤以及相关程序设计3.1、启动串口调试首先连接串口线,一端连实验箱的RS232-0,另一端连电脑主机的串口。打开putty,exe。将Serial中Serialline的9600修改为115200,并将将右边最后一项改为“None”,点击“Open”按钮,出现串口调试界面,拨动实验箱电源开关,若串口调试界面中显示vivi,表示串口通了,配置好了.3.2、启动H-JTAG实验箱电源打开,并口线连接好,然后打开H-JTAG,确认连接。3.3、运行Eclipse工程以及编写相关程序3.3.1.打开软件,新建一个cproject工程,将第三次试验(I/O口,串口,中断)的文件复制到该工程,并删除创建的工程,刷新界面,获取之前的实验目录。3.3.2.相关寄存器定义工程-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.3.3.实现驱动在工程中新建drivers文件夹,在drivers中新建adc文件夹,在adc中新建adc.c文件,在adc.c中添加如下代码:#includeadc/adc.hvoidadc_init(void){//时钟配置,CLKCON[15]=0b1,表示使能CLKCON|=0x115;//时钟分频ADCCON[14]=0b1,ADCCON[13:6]=0xFF;5ADCCON|=0x114;ADCCON|=0xFF6;//通道选择,选择通道2,ADCCON[5:3]=010;ADCCON&=~(0x73);ADCCON|=0x14;//模式选择:选择正常模式ADCCON[2]=0;ADCCON&=~(0x12);//设置启动AD转换的方式:读启动ADCCON&=~(0x11);//启动AD转换ADCCON|=0X1;}intadc_read(void){intdata;//启动AD转换ADCCON|=0X1;//判断采样转换完成while(!(ADCCON&(115)));data=ADCDAT0&0xFFF;//启动AD转换ADCCON|=0X1;returndata;}3.3.4.编写main.ccommon文件夹-main.c,在main.c中添加:#includeadc/adc.h#includeuart/uart.h#includekey/key.h#includegpio/led.hintmain(void){uart_init();led_init();6key_init();adc_init();while(1)//读写采样值{intch,i=0,j=0;ch=adc_read();printf(%d\n,ch);}return0;}voiddo_irq(void)//中断采样值部分{intsrc=INTOFFSET;inti;printf(中断操作中:doirq\n);//打印中断switch(src){case4:key_isr();led_off();for(i=0;i1000000;i++);led_on();for(i=0;i1000000;i++);break;}INTPND|=1src;}3.3.5.修改两个Makefile复制工程中common文件夹中的Makefile文件到drivers-key中,在drivers-adc下的Makefile中找到:“COBJS:=”改为:COBJS:=adc.o//即将adc.c编译成adc.o找到“LIB=”改为:7LIB=libadc.a//将adc.o生成库文件libadc.a找到工程中的Makefile文件,在其中添加:LIBS+=drivers/adc/libadc.a//将libadc.a链接到工程中3.3.6保存文件并编译3.4.创建Keil工程打开eclipse中run-debugconfigurations,右击μVisionproject创建NewBrowse选中adc,点击TargetOptions,打开output中SelectFolderforObjects.点击向上按钮后ok.接着点击debug选择H-JTAGARM,最后点击Debug按钮,开始调试程序。调试完成后运行。附:8第四章课题总结和体会为期一周的设计终于完成,实验是巩固ARM课程中所学的基本理论知识,在本次试验中运用到了之前所学的I/O口,串行以及中断实验的相关程序.在学习的过程中难免会遇到各种困难,在实验的过程中也是如此,但只要肯虚心请教,问题终会解决。在这次试验编写程序时我学会了如何使用数据手册来查找相关信息,实验调试时,一直未出现在屏幕上看到当前采集值的变化,在其他同学的帮助下,逐步解决了问题,最终实现了其基础功能以及中断功能,报警功能部分没有实现是一大遗憾,但通过本次课程,使我对ARM9嵌入式开发有了一定的掌握和理解,加深了前三次实验(I/O口,串行通信,中断)的了解,并且学习了adc相关知识.9