平台:Ti
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()的参数解释
#include
#include
#include
#include
#include
#ifdef CONFIG_DAVINCI_MUX
struct pin_config __initdata_or_module davinci_dm644x_pins[] = {
MUX_CFG("HDIREN",
MUX_CFG("ATAEN",
MUX_CFG("MSTK",
MUX_CFG("I2C",
MUX_CFG("MCBSP",
MUX_CFG("PWM0",
MUX_CFG("PWM1",
MUX_CFG("PWM2",
MUX_CFG("VLINQEN",
MUX_CFG("VLINQWD",
MUX_CFG("EMACEN",
MUX_CFG("GPIO3V",
MUX_CFG("GPIO0",
MUX_CFG("GPIO3",
MUX_CFG("GPIO43_44",
MUX_CFG("GPIO46_47",
MUX_CFG("RGB666",
MUX_CFG("LOEEN",
MUX_CFG("LFLDEN",
};
内核里提供的接口在linux-2.6.18_pro500/arch/arm/mach-davinci目录下的gpio.c,这个是寄存器级的驱动。对这个文件的相关操作
见http://blog.csdn.net/langxing0508/archive/2008/12/25/3604043.aspx
说得不错,这里表示感谢。
下面是我的gpio驱动程序
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
#define DEVICE_NAME "dm644x_gpios"
#define GPIO_MAJOR 199
#define ZX_GPIO5
#define ZX_GPIO6
#define ZX_GPIO7
static int davinci_dm644x_gpio_open(struct inode *inode, struct file *file)
{
//
//
//
//
}
static int gpio_release(struct inode *inode,struct file *filp)
{
}
[page]
static int davinci_dm644x_gpio_ioctl (struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
{
}
static const struct file_operations davinci_dm644x_gpio_fileops = {
};
static int __init davinci_dm644x_gpio_init(void)
{
}
static void __exit davinci_dm644x_gpio_exit(void)
{
}
module_init(davinci_dm644x_gpio_init);
module_exit(davinci_dm644x_gpio_exit);
MODULE_AUTHOR("xxx <>");
MODULE_DESCRIPTION("Davinci DM644x gpio driver");
MODULE_LICENSE("GPL");
下面是应用程序
#include
#include
#include
#include
#define
#define
int main(void)
{
}
下面是Makefile
#
# Makefile for the skeleton device drivers.
#
KDIR=/root/work/linux-2.6.18_pro500
PWD := $(shell pwd)
ifeq ($(KERNELRELEASE), )
modules:
modules_install:
clean:
.PHONY: modules modules_install clean
else
endif
直接make 就行了
超级终端操作:
insmod
mknod
./gpio_test
上一篇:S3C2440 RTC 裸机程序
下一篇:ARM搭建FTP服务器