




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统编程实验报告 嵌入式AD接口实验 系 别 电子科学与技术 专业班级 电子0802 学生姓名 陈进 指导教师 曹计昌 黄向宇 提交日期 2011年11 月 7 日 1、 实验目的 1学习 A D转换原理2掌握 AD转换芯片的使用方法3掌握不带有 AD 的 CPU 扩展 D/A 功能的主要方法4了解AD 驱动程序加入内核的方法二、实验内容学习 AD 接口原理,了解实现 AD 系统对于系统的软件和硬件要求。阅读 芯片文档,掌握其使用方法。三、实验环境硬件:UP-TECH S2410/P270 DVP 嵌入式实验平台、PC 机 Pentium 500 以上, 硬盘 10G 以上。 软件:PC 机操作系统 REDHAT LINUX 9.0MINICOMARM-LINUX 开发环境4、 实验原理GPIO驱动分析Write,read,open,release四个函数与前边相同,只有基本操作和调试信息。Ioctl函数为GPIO口的控制函数,其代码如下:ssize_t SIMPLE_GPIO_LED_ioctl (struct inode * inode ,struct file * file, unsigned int cmd, long ADta)#ifdef OURS_GPIO_LED_DEBUG printk (SIMPLE_GPIO_LED_ioctl -kernel-n); /调试信息 #endifswitch (cmd) /io控制,cmd为输入的命令 case LED_ON : GPCR3 |= 0x1;break;/通过修改寄存器控制GPIO口电平case LED_OFF: GPSR3 |= 0x1;break; default : printk (lcd control : no cmd run -kernel- n); return (-EINVAL); /非法命令 return 0;操作结构体:struct file_operations GPIO_LED_ctl_ops =open:SIMPLE_GPIO_LED_open,read:SIMPLE_GPIO_LED_read,write:SIMPLE_GPIO_LED_write,ioctl:SIMPLE_GPIO_LED_ioctl,release:SIMPLE_GPIO_LED_release,;建立操作映射,注册借口函数。为应用层提供统一的接口。驱动模块必须具备两个函数,就是初始化函数和卸载函数,其声明为如下两句:module_init(pxa270_GPIO_LED_CTL_init);/加载模块时,系统调用 pxa270_GPIO_LED_CTL_init函数初始化模块module_exit(cleanup_GPIO_LED_ctl);/系统将调用该函数来卸载模块这是linux驱动模块必备的。初始化函数如下:static int _init pxa270_GPIO_LED_CTL_init(void) int ret = -ENODEV; /初始化失败将返回次错误信息/调试信息#ifdef OURS_GPIO_LED_DEBUG printk (pxa270_GPIO_LED_CTL_init -kernel-n); #endif/调用HW_GPIO_LED_CTL_init函数完成初始化ret = HW_GPIO_LED_CTL_init(); if (ret) return ret; return 0;该函数通过调用HW_GPIO_LED_CTL_init函数实现初始化,该函数代码如下:static int _init HW_GPIO_LED_CTL_init(void) int ret = -ENODEV;printk(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhnn);showversion(); /显示版本信息/ init GPIO/初始化输出端口GPDR3 |= 0x00000001; / 设置输出端口模式GPSR3 |= 0x00000001; / 关闭led灯/调试信息,显示寄存器信息#ifdef OURS_GPIO_LED_DEBUG printk ( GPLR3=%x n,GPLR3);printk ( GPDR3=%x n,GPDR3); #endif/注册设备ret = devfs_register_chrdev(SIMPLE_GPIO_LED_MAJOR/主设备号 ,gpio_led_ctl, &GPIO_LED_ctl_ops/函数映射结构体); if( ret 0 )printk ( pxa270: init_module failed with %dn -kernel-, ret);return ret;elseprintk( pxa270 gpio_led_driver register success! -kernel-n);return ret;模块卸载函数为cleanup_GPIO_LED_ctl,其代码实现如下:static void _exit cleanup_GPIO_LED_ctl(void)#ifdef OURS_GPIO_LED_DEBUG printk (cleanup_GPIO_LED_ctl -kernel-n); #endif/注销主设备号,释放设备devfs_unregister_chrdev (SIMPLE_GPIO_LED_MAJOR, gpio_led_ctl );测试函数:通过调用ioctl函数实现对led灯的控制。主函数实现如下:int main(void) int fd;int ret;char *i; printf(nstart gpio_led_driver testnn); fd = open(DEVICE_NAME, O_RDWR); /系统通过函数映射调用SIMPLE_GPIO_LED_open函数打开设备printf(fd = %dn,fd); if (fd = -1) printf(open device %s errorn,DEVICE_NAME); else /通过调用SIMPLE_GPIO_LED_ioctl函数控制led灯/主循环while(1)ioctl(fd,LED_OFF);sleep(1); / 修改sleep时间即可改变led灯点亮的时间,如sleep(7)即灭7秒ioctl(fd,LED_ON);sleep(1);/ sleep(5) 亮5秒 / close ret = close(fd); /printf (ret=%dn,ret);printf (close gpio_led_driver testn); return 0;/ end main通过该实验基本掌握了驱动模块的结构和一些函数的实现,如ioctl函数。5、 实验步骤AD驱动实验该模块需要ad模块的支持,所以初始化函数会相对比较复杂。不过初始化函数的结构依旧没有改变,同样是pxa270_AD_CTL_init函数通过调用HW_AD_CTL_init函数完成AD模块的初始化。static int _init HW_AD_CTL_init(void)int ret = -ENODEV;showversion();ad_ucb = ucb1x00_get();/获取AD模块的地址/注册主设备号ret = devfs_register_chrdev(ADCTL_MAJOR, adctl,&adctl_ops);if(ret0)printk(adctl init_module failed with %dn -kernel-,ret);return ret;elseprintk(adctl int_driver register success! -kernel-n);/注册AD模块,设定为字符模块adctl_dev_handle = devfs_register( NULL, ad_ctl, DEVFS_FL_DEFAULT,ADCTL_MAJOR, 0, S_IFCHR, &adctl_ops, NULL); return ret;同理,卸载模块时就要同时注销主设备号和AD模块。所以,卸载函数改为:static void _exit cleanup_AD_ctl(void) devfs_unregister( adctl_dev_handle );/注销AD模块devfs_unregister_chrdev (ADCTL_MAJOR, ad_ctl );/注销主设备号AD模块的控制由adctl_ioctl函数实现:ssize_t adctl_ioctl (struct inode * inode ,struct file * file, unsigned int cmd, unsigned long arg) int val;#ifdef OURS_HELLO_DEBUG/ printk (SIMPLE_HELLO_ioctl -kernel-n); #endif ucb0x00_adc_enable(ad_ucb);/使能AD转换/读取AD转换后的数据,其中cmd指定转换通道 val = ucb0x00_adc_read(ad_ucb,cmd,0); ucb0x00_adc_disable(ad_ucb);/停止AD转换 return UCB_ADC_ADT(val);/返回转换的数据使用时调用ioctl函数便可以实现数据采集。可以得到,测试文件的核心部分:int val0,val1;char *i;ioctl(fd);/通过函数映射调用adctl_ioctl函数/*for(i=0;i50;i+)val = ioctl(fd,UCB_ADC_INP_AD0,0);printf(val = %xn, val);usleep(200000);*/for(i=0;i50;i+) /通过函数映射调用adctl_ioctl函数读取通道1 val0 = ioctl(fd,UCB_ADC_INP_AD1,0);usleep(100);/等待操作完成/通过函数映射调用adctl_ioctl函数读取通道0val1 = ioctl(fd,UCB_ADC_INP_AD0,0); printf(val0 = %dtval1=%dn, val0,val1); usleep(500000); 测试函数其他部分与其他的测试文件相同6、 实验结果与分析1、阅读理解源码进入/arm2410cl/exp/basic/05_AD目录,使用 vi 编辑器或其他编辑器阅读理解源代码2、编译应用程序运行 make 产生 AD可执行文件 AD_mainrootzxt /# cd /arm2410cl/exp/basic/05_AD/ rootzxt 05_AD# makearmv4l-unknown-linux-gcc-c -o AD_main.o AD_main.c armv4l-unknown-linux-gcc AD_main.o -o AD_main rootzxt 05_AD# lsAD_main AD_main.c AD_main.o doc drivers Makefile s3c44b0-spi.h3、下载调试切换到 minicom 终端窗口,使用 NFS mount 开发主机的/arm2410cl 到/host 目录,然后进入/host/exp/05_AD/drivers 目录,用 insmod s3c2410-exio.o 命令插入A D驱动,并用 lsmod命令查看是否已经插入。/mnt/yaffscd /host/exp/basic/05_AD/host/exp/bas/host/exp/basic/05_AD/driversinsmod s3c2410-exio.o Using s3c2410-exio.o /host/exp/basic/05_AD/driverslsmodModuleSize Used byNot taintedS3c2410-exio23840 (unused)i2c-tops2141040 (unused)注意:卸载模块可以使用 rmmod 命令,以本实验为例,卸载方法如下:/host/exp/basic/05_ADrmmod s3c2410-exio进入/host/exp/basic/05_AD目录,运行./AD_main,观察运行结果的正确性。在输 入 ./AD_main 后会出现下面的提示信息。/host/exp/basic/05_AD./A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 应急救护知识大赛题库及答案(共50题)
- 2025年福建省南平市社会工作者职业资格社会工作法规与政策预测试题含答案
- 2025乡卫生院突发公共卫生事件应急预案
- 2024年全民科学(防灾减灾)知识题库与答案
- 大专工程专业毕业论文
- 毕业论文里专业名词
- 化工专业本科生毕业论文
- 2025年电子浆料金浆、银浆、银铂浆合作协议书
- 感恩父母的演讲稿五多篇1
- 2024年爱婴医院管理知识考核试题含答案
- 枣庄学院《图学基础与计算机绘图》2024-2025学年第一学期期末试卷
- GB 46031-2025可燃粉尘工艺系统防爆技术规范
- 2025至2030年中国纳米抛光浆料行业发展监测及发展趋势预测报告
- 养老护理员培训班课件
- 2025-2030城市矿产开发利用政策支持与商业模式创新报告
- 隔爆水棚替换自动隔爆装置方案及安全技术措施
- 产品线库存管理与补货预测系统
- 2025年高考(山东卷)历史真题及答案
- 医学减重管理体系
- 民宿管理运营标准化手册
- 咯血与呕血的护理
评论
0/150
提交评论