快速业务通道

Davinci DM6446开发攻略——LINUX GPIO驱动源码移植

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-16

一、 DM6446 GPIO的介绍

说到LINUX 驱动移植,没有移植过的朋友,或刚刚进入LINUX领域的朋友,最好去看看《LINUX 设备驱动程序》第三版,有个理论或感性的认识.该版本是基于2.6.10的基础上描述的,经典读物,网上有电子版,但是建议花几十元买本书是值得的. GPIO是嵌入式系统最简单、最常用的资源了,比如点亮LED,控制蜂鸣器,输出高低电平,检测按键,等等.GPIO分输入和输出,在Montavista linux-2.6.18中,有关GPIO的最底层的寄存器驱动,是在linux-2.6.18_pro500\arch\arm\mach-davinci目录下的gpio.c,这个是寄存器级的驱动,搞过单片机MCU的朋友应该比较熟悉寄存器级的驱动.根据DM6446的芯片DATASHEET,DM6446的GPIO分为3组BANK,BANK01组包括GPIO0~GPIO31,BANK23组包括GPIO32~GPIO63,BANK45组包括GPIO64~GPIO70,硬件资源的原因,DM6446并不是GPIO管脚就是纯粹的GPIO脚,GPIO管脚和其他一些标准接口复用相同的引脚,比如SPI和GPIO复用,I2C和GPIO复用等,到底是使用GPIO还是其他接口,在初始化的时候,都需要对PINMUX0和PINMUX1两个寄存器进行设置(见DM6446的芯片DATASHEET第3章),而软件设置则在Montavista linux-2.6.18_pro500\arch\arm\mach-davinci目录下mux_cfg.c和对应的mux.h里.本人这里使用GPIO10、GPIO12、GPIO28,分别对应控制BUZZER、LED1、LED0,不需要对mux_cfg.c和mux.h进行修改.我们把这些GPIO应用归入linux字符设备来移植. 二、GPIO源码移植分析 /* drivers/char/davinci_dm644x_gpios.c*/ #include <linux/device.h> #include <linux/fs.h> #include <linux/module.h> #include <linux/errno.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/platform_device.h> #include <linux/types.h> #include <linux/cdev.h> #include <asm/uaccess.h> #include <asm/io.h> #include <asm/arch/hardware.h> #include <asm/arch/gpio.h> #define DEVICE_NAME "dm644x_gpios" /*定义设备驱动的名字,或设备节点名称*/ #define GPIO_MAJOR 199 /*使用 cat /proc/devices查看不要和存在的char节点重复*/ /*my app gpio define*/ #define DM644X_GPIO_BUZZER 10 /*GPIO10*/ #define DM644X_GPIO_LED1 12 /*GPIO10*/ #define DM644X_GPIO_LED0 28 /*GPIO10*/ static int davinci_dm644x_gpio_open(struct inode *inode, struct file *file) { return 0;/*该函数可以什么都不做,也可以加入类似初始化的设置*/ } static int davinci_dm644x_gpio_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { switch(cmd) /*cmd 表示应用程序传入的led动作,是on 还是off*/ { case 0: //gpio = 0 if(0==arg) /*arg由自己硬件电路决定使用那些GPIO*/ { gpio_direction_output(DM644X_GPIO_LED0, 0);/*调用TI linux-2.6.18寄存器驱动*/ } else if(1==arg) { gpio_direction_output(DM644X_GPIO_LED1, 0); } else if(2==arg) { gpio_direction_output(DM644X_GPIO_BUZZER, 0); } else { return -EINVAL; } break;

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号