DM8168 GPIO驱动与测试程序
2014-06-13 23:06
513 查看
本次测试针对GPIO1进行,挑选了GP1[31],引脚的复用默认的就是GPIO
还是老规矩,贴上driver.c,Makefile,test.c:
dm8168_gpio.c:
Makefile:
gpio_test:
测试 :
模块编译后加载:insmod dm8168_gpio.ko
交叉编译测试程序:arm-none-linux-gnueabi-gcc -o gpio_test gpio_test.c
运行:./gpio_test 1
GP1[31]为3.3V
运行:./gpio_test 0
GP1[31]为0V
还是老规矩,贴上driver.c,Makefile,test.c:
dm8168_gpio.c:
#include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/uaccess.h> /* copy_to_user,copy_from_user */ #include <linux/miscdevice.h> #include <linux/device.h> #include <asm/io.h> static struct class *gpio_class; volatile unsigned long *DIR; volatile unsigned long *DAT; int gpio_open (struct inode *inode,struct file *filp) { *DIR = 0x0; //output return 0; } ssize_t gpio_read (struct file *filp, char __user *buf, size_t count,loff_t *f_pos) { return 0; } ssize_t gpio_write (struct file *filp, const char __user *buf, size_t count,loff_t *f_pos) { char val_buf[2]; int ret; ret = copy_from_user(val_buf,buf,count); switch(val_buf[0]) { case 0x31 : *DAT = 0xf0000000; //gp1[31] break; case 0x30 : *DAT = 0x0; //gp1[31] break; default : break; } return count; } struct file_operations gpio_fops = { .owner = THIS_MODULE, .open = gpio_open, .read = gpio_read, .write = gpio_write, } ; int major; int gpio_init (void) { major = register_chrdev(0,"DM8168_gpio",&gpio_fops); gpio_class = class_create(THIS_MODULE, "DM8168_gpio"); device_create(gpio_class,NULL,MKDEV(major,0),NULL,"gpio"); DIR = (volatile unsigned long *)ioremap(0x4804C134,4); DAT = (volatile unsigned long *)ioremap(0x4804C13C,4); printk ("gpio is ready\n"); return 0; } void gpio_exit (void) { unregister_chrdev(major,"DM8168_gpio"); device_destroy(gpio_class,MKDEV(major,0)); class_destroy(gpio_class); iounmap(DIR); iounmap(DAT); printk ("module exit\n"); return ; } MODULE_LICENSE("GPL"); module_init(gpio_init); module_exit(gpio_exit);
Makefile:
obj-m:= dm8168_gpio.o CROSSCOMPILE := /opt/codesourcery/arm-2009q1/bin/arm-none-linux-gnueabi- CC := $(CROSSCOMPILE)gcc KDIR:=/home/***/ti-ezsdk_dm816x-evm_5_03_01_15/board-support/linux-2.6.37-psp04.00.01.13.patch2 PWD :=$(shell pwd) default: $(MAKE) -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- clean: rm -rf *.ko *.o .*cmd *.mod.c .tmp_versions
gpio_test:
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> int main(int argc, char *argv[]) { int fd; int val=0; fd=open("/dev/gpio",O_RDWR); if(fd<0) { printf("open device failed !\n"); exit(1); } else { printf("open success ! \n"); } write(fd,argv[1],1); close(fd); return 0; }
测试 :
模块编译后加载:insmod dm8168_gpio.ko
交叉编译测试程序:arm-none-linux-gnueabi-gcc -o gpio_test gpio_test.c
运行:./gpio_test 1
GP1[31]为3.3V
运行:./gpio_test 0
GP1[31]为0V
相关文章推荐
- DM8168 PWM驱动与测试程序
- GPIO(led灯)驱动和测试程序
- DM8168 GPIO驱动与測试程序
- 6410上的GPIO驱动及用户测试程序
- DM8168 PWM驱动与测试程序
- TQ2440 GPIO驱动及测试程序
- 【Tiny6410 And Linux】—(6.2)—LCD 驱动测试程序(BMP 显示位图)——原理
- UVC驱动测试程序
- S5PV210 Android camera驱动测试程序
- Android S5PV210 camera驱动测试程序
- 【Tiny6410 And Linux】—(6.2)—LCD 驱动测试程序(BMP 显示位图)——代码
- 从驱动测试程序到apk整个过程的编写
- MINI2440开发板PWM驱动与测试程序简要分析
- 6410led驱动模块及测试程序(独立控制四个led)
- Android环境 驱动测试程序
- 【嵌入式linux】(第六步):使用eclipse集成开发环境开发第一个嵌入式Linux程序,并测试LED驱动
- TQ2440按键驱动及测试程序
- s3c2410多通道adc驱动及测试程序
- V4L2 camera 驱动 capture测试程序
- S3c2440 I2C驱动与测试程序追踪交叉分析