您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 基于ARM9的数据采集程序设计完整版
武汉理工大学华夏学院设计报告课程名称嵌入式技术题目基于ARM9的数据采集程序设计专业班级学号姓名成绩___________________2015__年____月____日(注:为设计报告完成的日期)目录第1章功能及原理............................................................11.1实现的功能............................................................11.2软件硬件平台..........................................................11.3硬件原理分析及原理图..................................................11.4硬件驱动的实现步骤及分析..............................................1第2章代码设计..............................................................42.1相关寄存器定义........................................................42.2实现驱动..............................................................42.3编写驱动..............................................................52.4修改两个Makefile......................................................6第3章实验运行步骤..........................................................83.1启动串口调试..........................................................83.2运行H-JTAG...........................................................83.3运行Eclipse工程.......................................................93.4调试工程..............................................................9第4章调试及结果分析........................................................114.1实验现象.............................................................114.2总结体会.............................................................121第1章功能及原理1.1实现的功能通过S3C2410X(ARM9)的ADC采集实验箱电位器的值,旋转电位器时可在屏幕上看到当前采集值的变化。中断功能:按下中断按键触发中断,中断时三个LED灯闪烁一次,且屏幕上打印正在中断的提示。报警功能:设定一个临界值(如500),当采集的值超过此临界值时,灯闪烁报警,三个电位器可与三个灯一一对应。1.2软件硬件平台硬件平台为博创经典UP-NETARM2410实验箱(S3C2410处理器)。软件平台为eclipse+keil+PUTTY(串口调试助手)。1.3硬件原理分析及原理图由底板文件夹中第10章10-AD-DA-CAN文件中可得电位器原理图如下:图1硬件原理图S3C2410的ADC是8路复用的,开发平台上的3个ADC电位器对应AIN0-2,触摸屏电路使用AIN5和AIN7。ADC电路的参考电压VERF固定为3.3V电压,输入电压范围是0到3.3V。A/D转换器是模拟信号和CPU之间联系的接口,它将连续变化的模拟信号转换为数字信号,以供计算机和数字系统进行分析、处理、存储、控制和显示。1.4硬件驱动的实现步骤及分析1.4.1muxed通过在09章IOports章节搜索AIN0、AIN1、AIN2,没有找到,因此,不是多功能引2脚。1.4.2clk开启时钟在07-clockpowermanagement一章中搜索ADC,发现:表1clockpowermanagement设置使能设置为使能状态,CLKCON[15]=0b1。时钟分频在16-ADC&touchscreen一章中的寄存器中配置,发现:表2ADC&touchscreen寄存器配置A/D转换器预分频器使能ADCCON[14]=0b1。A/D转换器预分频器数值为256分频ADCCON[13:6]=0xFF。1.4.3参数设置查看表2可知:ADC通道选择:输入通道选择AIN2,ADCCON[5:3]=0b010。模式选择:模式选择为正常模式,ADCCON[2]=0b0。设置启动AD转换的方式:读启动,ADCCON[1]=0b1。3启动AD转换:ADCCON[0]=0b1。1.4.4功能判断采样转换完成:if(ADCCON[15]==0b1)则转换完成,可读取采样值,否则继续等。读取采样值(整数):data=ADCDAT0[0:11]。启动ADC:tmp=ADCDAT0[0:11]。4第2章代码设计2.1相关寄存器定义在工程中新建include文件夹,在include文件夹中新建tao(adc)文件夹,在tao文件夹中新建tao.h文件,在tao.h中添加如下代码:#defineTAOCON(*((volatileunsignedint*)0x58000000))//TAO控制寄存器#defineTAOTSC(*((volatileunsignedint*)0x58000004))//TAO触摸屏控制寄存器#defineTAODLY(*((volatileunsignedint*)0x58000008))//TAO启动延时寄存器#defineTAODAT0(*((volatileunsignedint*)0x5800000C))//TAO转换数据寄存器0#defineTAODAT1(*((volatileunsignedint*)0x58000010))//TAO转换数据寄存器1#defineCLKCON(*((volatileunsignedint*)0x4C00000C))//时钟寄存器inttao_read(void);voidtao_init01(void);voidtao_init02(void);voidtao_init03(void);表3相关寄存器定义2.2实现驱动在工程中新建drivers文件夹,在drivers文件夹中新建tao文件夹,在tao文件夹中新建tao.c文件,在tao.c中添加如下代码:#includetao/tao.hvoidtao_init01(void){CLKCON|=0x115;//时钟配置,CLKCON[15]=0b1,表示使能TAOCON|=0x114;TAOCON|=0xFF6;//时钟分频TAOCON[14]=0b1,TAOCON[13:6]=0xFF;TAOCON&=~(0x73);//通道选择,选择通道0,TAOCON[5:3]=010;TAOCON&=~(0x12);//模式选择:选择正常模式TAOCON[2]=0;TAOCON&=~(0x11);//设置启动AD转换的方式:读启动TAOCON|=0X1;//启动AD转换5}voidtao_init02(void){CLKCON|=0x115;//时钟配置,CLKCON[15]=0b1,表示使能TAOCON|=0x114;TAOCON|=0xFF6;//时钟分频TAOCON[14]=0b1,TAOCON[13:6]=0xFF;TAOCON&=~(0x73);TAOCON|=0x34;//通道选择,选择通道1,TAOCON[5:3]=010;TAOCON&=~(0x12);//模式选择:选择正常模式TAOCON[2]=0;TAOCON&=~(0x11);//设置启动AD转换的方式:读启动TAOCON|=0X1;//启动AD转换}voidtao_init03(void){CLKCON|=0x115;//时钟配置,CLKCON[15]=0b1,表示使能TAOCON|=0x114;TAOCON|=0xFF6;//时钟分频TAOCON[14]=0b1TAOCON[13:6]=0xFF;TAOCON&=~(0x73);TAOCON|=0x14;//通道选择,选择通道2,TAOCON[5:3]=010;TAOCON&=~(0x12);//模式选择:选择正常模式TAOCON[2]=0;TAOCON&=~(0x11);//设置启动AD转换的方式:读启动TAOCON|=0X1;//启动AD转换}inttao_read(void){intdata;TAOCON|=0X1;//启动AD转换while(!(TAOCON&(115)));//判断采样转换完成data=TAODAT0&0xFFF;TAOCON|=0X1;//启动AD转换returndata;}2.3编写驱动common文件夹-main.c,在main.c中添加:6#includetao/tao.h#includeuart/uart.h#includekey/key.h#includegpio/led.hintmain(void){uart_init();//屏幕打印驱动led_init();//led灯驱动key_init();//中断驱动intt1,t2,t3;while(1)//读写采样值{tao_init01();t1=tao_read();if(t1500){*((volatileunsignedint*)0x56000024)|=0x15;//灯0灭for(i=0;i1000000;i++);*((volatileunsignedint*)0x56000024)&=~(0x15);//灯0亮for(i=0;i1000000;i++);}tao_init02();t2=tao_read();if(t2500){*((volatileunsignedint*)0x56000024)|=0x16;//灯1灭for(i=0;i1000000;i++);*((volatileunsignedint*)0x56000024)&=~(0x16);//灯1亮for(i=0;i1000000;i++);}tao_init03();t3=tao_read();if(t3500)7{*((volatileunsignedint*)0x56000024)|=0x17;//灯2灭for(i=0;i1000000;i++);*((volatileunsignedint*)0x56000024)&=~(0x17);//灯2亮for(i=0;i1000000;i++);}printf(t1=%4d,t2=%4d,t3=%4d\n,t1,t2,t3);}return0;}voiddo_irq(void)//中断采样值部分{intsrc=INTOFFSET;inti;printf(do_irqtao\n);//打印中断switch(src){case4:Key_isr();led_off();for(i=0;i1000000;i++);led_on();for(i=0;i1000000;i++);break;}INTPND|=1src;}2.4修改两个M
本文标题:基于ARM9的数据采集程序设计完整版
链接地址:https://www.777doc.com/doc-3261057 .html