dm6441的 gpio驱动

这是我进入嵌入式行业进公司做的第一个驱动,
平台:Ti   dm6441     linu2.6.18

GPIO是嵌入式系统最简单、最常用的资源了,比如点亮LED,控制蜂鸣器,输出高低电平,检测按键,等等。
由于硬件资源的原因,DM6441并不是GPIO管脚就是纯粹的GPIO脚,GPIO管脚和其他一些标准接口复用相同的引脚,
比如SPI和GPIO复用,I2C和GPIO复用等,到底是使用GPIO还是其他接口,在初始化的时候,都需要对PINMUX0和PINMUX1
两个寄存器进行设置(见DM6441的芯片p72),而软件设置则在Montavista linux-2.6.18_pro500/arch/arm/mach-davinci
目录下mux_cfg.c和对应的include/asm/arch-davinci/mux.h里。由数据手册知道gpio5,6,7默认是gpio功能。

对mux_cfg.c的分析

对MUX_CFG()的参数解释
   第一个是描述(和数据手册p72上要对应),第二个是pinmux0还是1,第三个是寄存器偏移。最后一个和调试有关的,
   倒数第二个就是你需要给pinmux寄存器相应位设置的值,倒数第三个就是pinmux相应位全为1的值(掩码值),
   倒数第四个就是pinmux相应位偏移值。如果你要改变引脚的模式,把对应引脚设置成0,再把其他功能设为1。
  (这是我的理解,参考下面的I2C和GPIO43_44设置)。
#include <linux/module.h>
#include <linux/init.h>

#include <asm/hardware.h>

#include <asm/arch/cpu.h>
#include <asm/arch/mux.h>

#ifdef CONFIG_DAVINCI_MUX

struct pin_config __initdata_or_module davinci_dm644x_pins[] = {
/*
 *  description  mux  mode   mode  mux  dbg
 *    reg  offset mask  mode
 */
MUX_CFG("HDIREN",   0,   16,    1,   1,  1)
MUX_CFG("ATAEN",   0,   17,    1,   1,  1)

MUX_CFG("MSTK",    1,   9,     1,   0,  0)

MUX_CFG("I2C",    1,   7,     1,   1,  0)

MUX_CFG("MCBSP",   1,   10,    1,   1,  0)

MUX_CFG("PWM0",    1,   4,     1,   1,  0)

MUX_CFG("PWM1",    1,   5,     1,   1,  0)

MUX_CFG("PWM2",    1,   6,     1,   1,  0)

MUX_CFG("VLINQEN",   0,   15,    1,   1,  0)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值