1203150139谷晓波 嵌入式_嵌入式开发零基础起步

2020-02-28 其他范文 下载本文

1203150139谷晓波 嵌入式由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“嵌入式开发零基础起步”。

嵌入式系统设计

嵌入式技术设计作业

——ADC数据采集系统设计

名:谷晓波

别:信息工程系

号:1203150139

级:物联网应用技术

指导教师:张华

2014年11月

嵌入式系统设计

目录

1.设计目的..................................................................................................................1 2.设计内容..................................................................................................................1 3.设计要求..................................................................................................................1 4.设计原理..................................................................................................................1 5.裸机下实现对电压值的采集...................................................................................2

5.1设计步骤...........................................................................................................2 5.2程序设计...........................................................................................................2 6.硬件设计..................................................................................................................2 7.软件程序设计..........................................................................................................5

7.1主程序流程图及其程序...................................................................................5 8.实验步骤...................................................................................................................11 心得体会......................................................................................................................12 参考文献......................................................................................................................13

嵌入式系统设计

1.设计目的本设计包括确定控制任务、系统总体设计、硬件系统设计、软件程序的设计等,使我们进一步学习理解计算机控制系统的组成原理、接口电路与应用程序,巩固与综合专业基础知识和相关专业课程知识,提高学生运用理论知识解决实际问题的实践技能。

2.设计内容

把一个电位计输出电压到S3C2440A 的AIN0管脚,电路图如下图所示。应用ADC,编写程序得到其电压值。

(1).使用S3C2440实验箱的ADC采集模块;(2).设计相关的程序并加注释;(3).实现对电压值的采集及显示。

3.设计要求

(1)裸机下实现对电压值的采集及显示。(2)在Linux下实现对电压值的采集及显示。

4.设计原理

A/D转换的基本原理:

A/D(模/数)转换是指通过一定的电路将模拟量转变为数字量。

在实现A/D转换时,主要涉及以下几个参数:分辨率、精度、转换时间等 模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。

A/D转换后,输出的数字信号可以有8位、10位、12位和16位等。

嵌入式系统设计

5.裸机下实现对电压值的采集

5.1设计步骤

(1)单片机采集某一电压值,即经过AD转换,将电压值转换成二进制数的数字量。

(2)经过标度变换,将AD转换成二进制数的数字量变换成带有单位(伏特)的实际电压值。

(3)将计算出的实际电压值送人lcd上显示

5.2程序设计

汇编程序:

AREA INIT,CODE,READONLY

ENTRY

CODE32

LDR R0,=0x53000000

MOV R1,#0

STR R1,[R0]

LDR SP,=1024*4

IMPORT Main

B Main

END 6.硬件设计

(1)S3C2440介绍

S3C2440具有8通道模拟输入的10位CMOS工艺制作的ADC(模数转换器)。2.5MHz转换时钟下最大的转换率在500KSPS。AD转换器支持片上采样和保持功能。

3C2440的内核 ARM920T由ARM9TDMI、存储管理单元(MMU)和高速缓存三部分组成。它采用了新的总线架构Advanced Micro controller Bus Architecture(AMBA)。其低功耗、精简、高效,满足对成本和功率要求比较高的产品开发。下图是ARM920T的结构图,以及其系统组成部分的对应功能。

嵌入式系统设计

S3C2440A的A/D转换器和触摸屏接口电路

(2)S3C2440特征

1)手持设备和通用嵌入式应用的集成系统

2)16/32-位RISC架构和以ARM920T CPU为核心的强大的指令集 3)增强ARM架构的MMU支持WinCE,EPOC32和Linux 4)指令缓存,数据缓存,写缓冲和物理地址TAG RAM性能,以减少主内存带宽和 延迟的效果(3)A/D转换程序流程图

A/D 转换过程:将8路模拟量持续输入ADC0809模拟量输入端IN01T、7『。首先将 OE,START,ALE。A,B,C都置0,然后ALK置 1再清零.进

嵌入式系统设计

行转换通道地址的锁存.即选择转换通道打开。将START置1再清零,发送一启动脉冲,即启动A/D转换。此时转换结束信号EOC变为低电平。查看EOC是否为高电平。为高电平则表示MD转换完毕。等待MD转换完毕后将输出允许信号输入端(0E)置高电平,此时就可将转换的一路数据输入到单片机某一存储空间中。将OE置低电平,即停止ADC0809。

A/D转换程序流程图

(4)A/D转换器的选取

转换速度是指完成一次A/D转换所需时间的倒数,是一个很重要的指标。A/D转换器型号不同,转换速度差别很大。通常,8位逐次比较式ADC的转换时间为100us左右。由于本系统的控制时间允许,可选8位逐次比较式A/D转换器。

(5)ADC 控制寄存器特征

ADC 控制寄存器(ADCCON)是可读/写状态,地址为0x58000000,复位后的值为0x3FC4。

ADC 转换数据寄存器0(ADCDAT0)是可读/写状态,地址为0x5800000C,嵌入式系统设计

复位后的值不确定

(6)ADC驱动程序设计流程

7.软件程序设计

系统的软件的设计采用的是c语言,对单片机进行编程实现各种功能。

程序是在linux环境下采用keil软件编写的,可以实现对八路数据的采集与处理,能实现对数据、地址的显示.7.1主程序流程图及其程序

主程序流程图

测试程序:adc_test.c #include #include #include #include

嵌入式系统设计

int main(void){

} 主程序: adc.c #include

/*module_init()*/ #include /* printk()*/ #include

/* __init __exit */ int fd,err;int data;fd=open(“/dev/s3c2410_adc”,O_RDONLY);//打开设备 if(fd

} while(1){

} if(read(fd,&data,2))//读ad转换的值 printf(“adc is %dn”,data);printf(“Can't open s3c2410_adc!n”);return 0;sleep(1);#include /* file_operation */ #include

/* copy_to_user, copy_from_user */ #include /*cla ,cla_create ,device_create 等*/ #include /* Error number */ #include /* mdelay ,ndelay*/ #include

/* udelay */ #include

// S3C2410_ADCCON #include #include

//ioremap()

//clk_get(), clk_enable()

嵌入式系统设计

#define DRIVER_NAME “s3c2410_adc” static void __iomem

*regs_adc;#define ADCCON

(*(volatile unsigned long *)(regs_adc + S3C2410_ADCCON))//ADC control #define ADCDLY

(*(volatile unsigned long *)(regs_adc + S3C2410_ADCDLY))//ADC start or Interval Delay #define ADCDAT0(*(volatile unsigned long *)(regs_adc + S3C2410_ADCDAT0))static int MAJOR_NR = 233;static int MINOR_NR = 0;struct cla *my_cla;

/* Driver Major Number */ //次设备起始号

//========================================== //名称:static void initADIO(void)//功能:初始化ADC,配置IO口 //参数: 无 //返回值: 无

//========================================== static void initADIO(void){ } //=========================================== //名称:static int GetAD_Enable(void)//功能:采用置位使能方式启动AD转换 //参数: 无 //返回值: 无

//=========================================== static int GetAD_Enable(void){ int i;int val=0;

ADCCON =(0

嵌入式系统设计

} for(i=0;i

} val = val/16;return val;

//计算ADC平均转换值 ADCCON |= 0x1;

//使能ADC 转换

while(ADCCON & 0x1);//判断是否使能ADC转换

//判断ADC转换是否结束 while(!(ADCCON & 0x8000));val +=(ADCDAT0 &0x03ff);udelay(10);

//取出ADC转换值

/* Driver Operation Functions */ static int s3c2410_ADC_open(struct inode *inode, struct file *filp){

struct clk *adc_clk;printk(“myDriver open called!n”);adc_clk = clk_get(NULL, “adc”);

clk_enable(adc_clk);

} static ize_t s3c2410_ADC_read(struct file *filp, char *buf, size_t count, loff_t *f_pos){ volatile int value=0;volatile int voltage=0;

//S3C2410_PA_ADC是ADC控制器的基地址0x58000000,//定义在mach-s3c2410/include/mach/map.h中

//0x20是虚拟地址长度大小(总寄存器占地址空间长度)regs_adc = ioremap(S3C2410_PA_ADC, 0x20);//得到虚地址偏移量 initADIO();return 0;

嵌入式系统设计

volatile unsigned char temp[2];value = GetAD_Enable();voltage =

//voltage/3.3

=

330*value/1023;value/1023=>voltage=(3.3*value)/1023)*100(为了方便计算放大100倍)

temp[0] = voltage&0xff;temp[1] =(voltage>>8)&0xff;copy_to_user(buf, &temp, 2);

return 1;} static int s3c2410_ADC_release(struct inode *inode, struct file *filp){ printk(“myDriver release called!n”);/*释放虚拟地址映射空间*/

iounmap(regs_adc);} /* Driver Operation structure */ static struct file_operations myDriver_ADC_fops = {

};static int __init myModule_init(void){

int re=-1;re= register_chrdev(MAJOR_NR, DRIVER_NAME, &myDriver_ADC_fops);if(re

return 0;.owner = THIS_MODULE,.read = s3c2410_ADC_read,.open = s3c2410_ADC_open,.release = s3c2410_ADC_release,嵌入式系统设计

} return 0;my_cla=cla_create(THIS_MODULE,DRIVER_NAME);device_create(my_cla,NULL,MKDEV(MAJOR_NR,MINOR_NR), NULL,DRIVER_NAME);

} static void __exit myModule_exit(void){

} module_init(myModule_init);module_exit(myModule_exit);MODULE_LICENSE(“GPL”);文件:Makefile ifneq($(KERNELRELEASE),)obj-m := adc.o

unregister_chrdev(MAJOR_NR, DRIVER_NAME);device_destroy(my_cla,MKDEV(MAJOR_NR, MINOR_NR));cla_destroy(my_cla);printk(“register myDriver OK!Major = %dn”, MAJOR_NR);return 0;else KERNELDIR ?=/home/linux-2.6.29 PWD := $(shell pwd)modules: $(MAKE)-C $(KERNELDIR)M=$(PWD)modules clean: rm-rf *.o *~ core.depend.*.cmd *.ko *.mod.c.tmp_versions.PHONY: clean Endif

嵌入式系统设计

8.实验步骤

(1)编写驱动程序adc.c(2)编写Makefile文件(3)编写应用程序test.c(4)在home目录下建立linuxadc目录,并将adc.c、Makefile、test.c拷贝到该目录下。

(5)将XP系统中的D:ARMARM实验箱配套光盘Source中的linux-2.6.29.tar.bz2拷贝到Linux的home目录下,并解压,解压后重命名为linux-2.6.29(6)进入linux-2.6.29目录,修改sapp-config文件为.config,再执行make menuconfig命令,不做任何修改,直接保存退出。(7)执行make zImage命令。

(8)进入linuxadc目录,执行make命令生成adc.ko文件(9)执行arm-linux-gcc test.c –o test命令生成test文件

(10)在XP系统下建立超级终端,点击传送—发送文件,将生成的adc.ko文件和test文件发送到实验箱中。

(11)在超级终端中执行insmod adc.ko命令,加载模块。(12)在超级终端中执行chmod 777 test命令,添加可执行权限。(13)./test,运行应用程序。

嵌入式系统设计

心得体会

回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。

此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。

嵌入式系统设计

参考文献

[1]江力主编《单片机原理与应用技术》清华大学出版社2006年第1版

[2]李萍主编《AT89C51单片机原理开发与实例应用》中国电力出版社2008年第1版

[3]林高主编《单片机应用实例开发》西安电子科技大学出版社 2009年第1版

[4] 李全利编《单片机原理及应用(第一版)》北京:北京清华大学出版社,2006

《1203150139谷晓波 嵌入式.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
1203150139谷晓波 嵌入式
点击下载文档
相关专题 嵌入式开发零基础起步 嵌入式 晓波 嵌入式开发零基础起步 嵌入式 晓波
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文