欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    嵌入式GPIO课程设计报告.doc

    • 资源ID:2392856       资源大小:21KB        全文页数:4页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    嵌入式GPIO课程设计报告.doc

    嵌入式课程设计报告一, 设计要求(1) GPIO15,实现对GPIO的操作,重点介绍驱动程序框架的设计,以及在嵌入式系统中调试驱动程序的流程。(2) 基于轮询的UART驱动设计,用户空间和内核空间的数据互传。二, 设计实现(1) GPIO的驱动设计主要包括以下四个函数的设计:·加载本驱动是执行init_module函数,以注册本驱动,同时系统为本驱动分配一对唯一的主设备号和从设备号;·卸载驱动时执行cleanup_module函数,系统回收已分配的主设备号和从设备号;·打开驱动程序文件时执行gpio_open函数,通过调用GPIO_init初始化GPIO15,设置其为输出端口,通过调用GPIO_hig使GPIO15引脚输出高电平,并将驱动程序的引用计数加1;·关闭驱动程序文件时执行gpio_release函数,并调用GPIO_low使GPIO15引脚输出低电平,并将驱动程序的引用计数减1. 在驱动程序设计中,由于linux运行事使用的是虚拟内存,因此在驱动程序中访问处理器的特殊功能寄存器时,需要将相应的特殊功能寄存器的物理地址转化成虚拟地址。本例中,就是包含<asm/hardware.h>头文件,通过hardware.h中进一步引用定义了PXA270处理器特殊功能寄存器虚拟地址的头文件includeasm-asmarch-pxapxa-regs.h。其中定义了控制GPIO所需的三个寄存器:#define GPDRO _REG(0x40E0000C)/*GPIO方向寄存器*/#define GPSRO _REG(0X40E00018)/*GPIO输出置为寄存器*/#define GPCRO _REG(0x40E00024)/*GPIO输出复位寄存器*/ 其中_REG宏调用了物理地址到虚拟地址的转换函数io_p2v(x)。 #define io_p2v(x)(x丨0xbe000000)(x)>>1)&0x06000000) #define_REG(x)_REGP(io_p2v(x) GPIO驱动程序部分源代码如下: #ifndef MODULE #define MODULE #endif #ifndef_KERNEL_ #define_KERNEL_ #endif #if CONFIG_MODVERSIONS=1 #define MODVERSIONS #include<linux/modversions.h> #endif #include<linux/kernel.h> #include<linux/module.h> #include<linux/init.h> #include<linux/fs.h> #include<linux/errno.h> #include<linux/uaccess.h> #include<asm/uaccess> #include<asm/segment.h> #include<asm/hardware.h> /#include<asm/xsbase270.h> #include<linux/mm.h> #include<asm/io.h> #ifndef KERNEL_WERSIONS (2) 所谓轮询方式,是指内核定期对设备的状态进行查询,然后作出相应的处理。基于轮询的UART驱动程序,其主要函数的功能如下:Init_module()函数用来初始化串口模块,加载串口设备驱动。Uart_open()函数用来打开一个串口设备节点,当一个设备节点被打开时,计数器MOD_INC_USE_COUNT加1.Uart_release()函数用来关闭一个设备节点,当一个设备节点被关闭时,MOD_DEC_USE_COUNT减1.uart_write()函数首先调用copy_from_user()函数将用户空间的数据复制到内核空间,然后通过蓝牙串口BTuart发送出去,在该函数中调用了SerialOutputByte()函数。uart_read()函数中,首先读BTRBR寄存器,将接收到的数据读到内核空间,然后通过copy_to_user()函数将接收数据复制到用户空间。Cleanup_module()函数将BTuart设备驱动卸载。Uart_init(void)函数主要来配置串口的波特率、数据位、停止位和奇偶校验位。SerialOutputByte(const char c)函数是串口发送函数,将字符C通过串口发送出去。SerialoutputByte(void)函数是串口接收数据函数。基于轮询的UART驱动程序的部分源代码如下:#include<linux/kernel.h>#include<linux/module.h>#if CONFIG_MODVERSIONS=1#define MODVERSIONS#include<linux/modversions.h>待添加的隐藏文字内容3#endif#include<linux/fs.h>#include<linux/wrapper.h>#include<linux/types.h>#include<linux/init.h>#include<linux/delay.h>#include<asm/hardware.h>#include<asm/irq.h>#ifndef KERNEL_VERSIONS#define KERNEL_VERSIONS(a,b,c)(a)*65536+(b)*256+(c)#endif#if linux_VERSION_CODE>KERNEL_VERSION(2,2,0)#include<asm/uaccess.h>#endif#define DEVICE_NAME”uart_test”#define setuartband三, 设计总结设备驱动程序,他直接与相应设备打交道,并且向上层提供一组访问接口,内核常常使用设备类型、主设备号和次设备号来标识一个具体的设备,在设备管理中用户可以像访问普通文件一样访问外部设备。在linux中所有的硬件设备均被当作特殊的设备文件处理,可以使用标准的文件操作,对于字符设备和块设备,其设备文件用mknod命令创建,用主设备号和次设备号来标识,同一个设备驱动程序控制的所有设备具有相同的主设备号,并用不同的次设备号加以区别,然后,对设备进行操作的系统调用和对文件操作类似,最后通过内核将系统调用转换成对物理设备的操作。驱动的实现就是编写一组被系统调用的函数,然后加载到系统中,这些函数能够实现对硬件的操作,能够通过和系统的接口与上层应用程序交互信息。设备驱动在加载时首先需要调用入口函数init_module(),该函数完成驱动的初始化工作,比如寄存器置位、结构体赋值等一系列的工作,其中一个最重要的工作就是向内核注册该设备,字符设备调用函数register_chrdve()完成注册,注册成功后,该设备获得了系统分配或向系统申请的主设备号、自定义的次设备号,并建立起与设备文件的关联,设备驱动在卸载时需要回收相应的资源,将设备的响应寄存器值复位并从系统中注销该设备的操作过程,设备驱动程序可以分为三个主要的部分:一自动配置和初始化子程序。负责检测所需驱动的硬件设备是否存在以及是否能够正常工作,这部分驱动只在初始化时被调用一次。二服务I/O就是请求子程序,这部分是系统调用的结果。三中断服务程序又称驱动程序的下半部分,设备在I/O请求结束或其他状态改变时产生中断,因为设备驱动程序支持同一类型的若干设备,所以调用中断服务子程序时都带有一个或多个参数以唯一标识请求服务的设备。内核模块是linux内核的重要组成部分,内核模块能在linux系统启动之后动态进行装载和卸载,因此不需对内核进行重新编译或重启系统就可以将内核的一部分替换掉,linux内核的所有设备驱动、文件系统、网络协议等可做成模块的形式来提供。在所有模块中需记录编译的内核版本信息,并与当前执行的内核版本一致,即模块具有版本依赖性。

    注意事项

    本文(嵌入式GPIO课程设计报告.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开