6896|2

88

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

新手问个简单的驱动程序如何调用的问题,还请不吝赐教 [复制链接]

我在做nios 2的外设驱动开发,nios 2的软件结构(hal)支持字符型设备,文件子系统等通用的设备模型。 最近分析了开发软件自带的一个简单的lcd(character lcd(16x2,optrex16207))驱动程序altera_avalon_lcd_16207.c和它相应的头文件。hal已经提供了一个文件系统,并且已经把lcd定义成了文件子系统设备,最后这一点我是看了它的测试程序之后才知道的,测试程序 ... lcd = fopen("/dev/lcd_display", "w"); //lcd_display是lcd名字 fprintf(lcd, "\nThis is the LCD Display.\n"); ... 尽管看懂了驱动程序,但是我现在还是一头雾水,仍然不明白如何以文件的方式来管理和操作它。比如fprintf(lcd, "\nThis is the LCD Display.\n");是如何跟驱动程序中的static void lcd_write_data(alt_LCD_16207_dev * dev, unsigned char data)建立关系并调用它来驱动lcd的,这中间都作了些什么工作。 我是学电子和通信的,对软件结构和编译原理不太懂,是不是要学一些计算机的课程才能搞动这个问题呢? 不知道我以上的提问是否把我的问题描述清楚了。 希望各位大哥大姐指点一下刚开始搞驱动程序的菜鸟,或者推荐一些书目有助于我搞明白这个问题,不胜感激!!!
此帖出自单片机论坛

最新回复

当然。上面说的缓存只是个形象的东西,每个设备驱动起来后,都会分配到地址和中断。系统是对这些进行操作的。  详情 回复 发表于 2007-10-22 10:56
点赞 关注
 

回复
举报

175

帖子

0

TA的资源

裸片初长成(初级)

沙发
 

回复:新手问个简单的驱动程序如何调用的问题,还请不吝赐教

设备驱动的作用就是把设备封装成文件或者字符型设备,提供统一的函数接口,供系统调用。 比如这个lcd。 当fopen的时候,驱动协议(姑且称为协议。)会通过某个固定的函数对设备进行初始化(或者是打开输入缓存等待输入数据)等等。 而fprintf的时候,同样会调用驱动协议,调用某个固定函数,把数据写入到显示缓存内。 这里的固定函数,并非你驱动程序内写的函数,而是封装成文件设备的时候,系统的函数。比如你做linux的时候,就是linux自带的函数。 这时候你肯定会有疑问,说硬件怎么会对这些东西做出反应呢? 这就是我刚才说的数据缓存的作用了。。 假设,lcd的工作过程是一直在刷新(事实也就是如此。只不过是lcm在做。)你的驱动程序函数的作用,是读取刚刚linux函数改动的那个缓存,写入到lcm中。实现lcd数据的刷新。 其实就是对固定东西的监视,类似于汇编中的函数参数传递。。没办法直接传,就改个寄存器。。。。 也不知道说明白没有。呵呵,其实我自己也是比较糨糊的。。。
此帖出自单片机论坛
 
个人签名谁想我?我想谁?
 

回复

175

帖子

0

TA的资源

裸片初长成(初级)

板凳
 

回复:新手问个简单的驱动程序如何调用的问题,还请不吝赐教

当然。上面说的缓存只是个形象的东西,每个设备驱动起来后,都会分配到地址和中断。系统是对这些进行操作的。
此帖出自单片机论坛
 
个人签名谁想我?我想谁?
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表