北京航空航天大学《嵌入式系统》课件_第7章_Linux驱动程序开发.pptVIP

北京航空航天大学《嵌入式系统》课件_第7章_Linux驱动程序开发.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * register_chrdev(242, DEVICE_NAME, led_fops) unregister_chrdev(242, DEVICE_NAME); Use count:记录使用本模块的进程数或模块数。 MOD_INC_USE_COUNT:增加use count MOD_DEC_USE_COUNT:减少use count MOD_IN_USE:检查use count是否是0 驱动程序的实现-驱动程序框架 open 提供给驱动程序初始化设备的能力,为后续的操作做准备 此外一般会递增使用计数,防止文件关闭前模块被卸载 通常情况下,open完成如下工作: 递增使用计数 检查特定设备错误 如果设备是首次打开,则对其进行初始化 识别次设备号,如有必要,则修改f_op指针 分配并填写filp-private_data中的数据 release 与open正好相反 释放由open分配的filp-private_data中的数据 在最后一次关闭操作时关闭设备 使用计数减一 驱动程序的实现-驱动程序框架 read和write read将数据从内核拷贝到应用程序空间,write则将数据从应用程序空间拷贝到内核。 由于用户空间和内核空间的内存映射方式不同,所以在内核和用户空间传输数据的时候需要使用如下的函数 unsigned long copy_to_user(void *to, const void* from, unsigned long count); unsigned long copy_from_user(void *to, const void *from, unsigned long count); 在阻塞型IO中,read和write调用可能会出现阻塞 read调用当前无数据可读,而又没有数据马上可读,这时会睡眠并且等待,write调用也会出现这样的情况 等待队列机制-wait_queue_head_t;(定义在linux/wait.h中) 如果声明了等待队列并完成初始化,进程就可以睡眠,可以调用sleep_on的不同变体来完成睡眠(函数声明位于linux/sched.h中) 大多数情况下应使用“可中断”的函数,如interruptible_sleep_on。 睡眠进程被唤醒并不一定代表有数据,也有可能是被其他的信号唤醒,所以醒来后需要测试condition. 7段(或8段)LED显示器 是由七个(或八个)发光二极管按一定的位置排列成“日”字形(对于8段LED显示器来说还有一个小数点段)。 a c b d e f g 7段LED a c b d e f h g 8段LED LED驱动程序 LED驱动程序 8段LED的显示 各段由数据线D0-D7控制(1:亮;0:灭)对应a-.位 计算要显示数字的段码(段码表),须考虑共阴/阳极 输出适当的段码,显示所需的字符 a c b d e f h g 8段LED 显示字符 代码 (共阴) 0 0x3F 1 0x06 2 0x5b 3 0x4f 4 0x66 LED驱动程序 LED连接原理图 LED显示驱动器 ZLG7290 I2C LED/键盘 驱动器 I2C 串行接口提供键盘中断信号方便与处理器接口 可驱动8 位共阴数码管或64 只独立LED 和64 个按键 可控扫描位数可控任一数码管闪烁 提供数据译码和循环移位段寻址等控制 8 个功能键可检测任一键的连击次数 无需外接元件即直接驱LED 可扩展驱动电流和驱动电压 详细资料参加课程网站上的: zlg7290.pdf LED显示驱动器功能框图 IIC基地址是0x70 有24个8位寄存器(0x0-0x17),通过IIC总线访问,必须是字节操作 主要寄存器 SystemReg 0x0 FlashOnOff 0x0c ScanNum 0x0d DpRam0~7 0x10-0x17 CmdBuf0~1 0x7-0x8 两种控制方式: -寄存器映象控制 -命令解释控制 ZLG7290芯片控制命令简介 LED实验 用于在指定位置显示数字的复合指令 其中A3~A0 为显示缓存编号范围为0000B~0111B 对应DpRam0 ~DpRam7 无效的编号不会产生任何作用;DP=1 时点亮该位小数点,Flash=1 时该位闪烁显示,Flash=0 时该位正常显示,D4~D0 为要显示的数据 译码规则按ZLG7290芯片资料的表述进行,如下表所示 ZLG7290芯片控制命令简介 LED驱动程序的主要函数 static int led_write(struct file* filp, const char* buffer, size_t count

文档评论(0)

012luyin + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档