GPIO控制一个外部接口驱动

来源:互联网 发布:机房的网络结构示意图 编辑:程序博客网 时间:2024/05/16 07:12

GPIO控制一个外部接口驱动

1.电路图


实现UART_EN高电平导通


上图为链接UART_EN链接P1A43.


由电路图可知,UART_EN链接的是6410处理器的GPH0接口。

2.驱动程序为:

#include <linux/miscdevice.h>   #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/init.h>   #include <linux/fs.h>   #include <linux/pci.h>  #include <linux/gpio.h>    #define DEVICE_NAME "uart_en"static int uart_en_ioctl(struct file *file,unsigned int cmd){switch(cmd){case 0:gpio_direction_output(S3C64XX_GPH(0),0);printk("down~~~~~~~~~~~~ 0\n");return 0;break;case 1:gpio_direction_output(S3C64XX_GPH(0),1);printk("up~~~~~~~~~~~~~~ 1\n");return 0;break;default:return -EINVAL;}}static struct file_operations dev_fops = {.owner = THIS_MODULE,.unlocked_ioctl = uart_en_ioctl,};static struct miscdevice misc = {.minor = MISC_DYNAMIC_MINOR,.name  = DEVICE_NAME,.fops  = &dev_fops,};static int __init dev_init(void){int ret;gpio_request(S3C64XX_GPH(0),"gpio_uart_en");gpio_direction_output(S3C64XX_GPH(0),0);ret = misc_register(&misc);printk(DEVICE_NAME "\tinitialized\n");return ret;}static void __exit dev_exit(void){misc_deregister(&misc);}module_init(dev_init);module_exit(dev_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("BQL");
驱动Makefile:

obj-m:=uart_en.oCURRENT_PATH:=$(shell pwd)ARM_LINUX_KERNEL:=/opt/中控硬件驱动/source/linux-2.6.38all:$(MAKE) -C $(ARM_LINUX_KERNEL) SUBDIRS=$(CURRENT_PATH) modulesclean:rm -rf *.cmd *.o *.ko *.mod.c *.symvers *.order

3.测试程序为:

#include <stdio.h>#include <stdlib.h>#define UART_EN "/dev/uart_en"int main(int argc,char **argv){int fd;fd = open(UART_EN,0);if(fd<0){printf("can't open /dev/uart_en!");exit(0);}if(!(strcmp(argv[1],"up"))){ioctl(fd,1);}else if(!(strcmp(argv[1],"down"))){ioctl(fd,0);}else{exit(0);}exit(0);}

测试Makefile:

all:arm-linux-gcc test_uart_en.c -o test_uart_enclean:rm -rf *.o test_uart_en


挂接在/proc上的GPIO控制一个外部接口驱动

http://blog.csdn.net/taozi343805436/article/details/8478343





原创粉丝点击