本次測试针对GPIO1进行,挑选了GP1[31],引脚的复用默认的就是GPIO

还是老规矩,贴上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 GPIO驱动与測试程序的更多相关文章

  1. DM8168 PWM驱动与測试程序

    昨天把DM8168的Timer设置给摸了一遍,为写PWM的底层驱动做好了准备,如今就要进入主题了. dm8168_pwm.c: #include <linux/module.h> #inc ...

  2. mini2440驱动奇谭——ADC驱动与測试(动态挂载驱动)

    博客:http://blog.csdn.net/muyang_ren 实现功能:开发板动态载入adc驱动模块并能通过測试程序 系统:Ubuntu 14.04     驱动交叉编译内核:linux-2. ...

  3. DLL程序的创建步骤和測试程序

    首先,创建DLL程序 然后,加入一个导出类 比如: //Test.h #pragma once class AFX_EXT_CLASS Test { public:  Test(void);  ~Te ...

  4. H264解码的一个測试程序

    网上看到的一个H264视频格式的解码測试程序,能够用来參考其逻辑流程. 代码例如以下: Test_Display_H264(){      in_fd = open(H264_INPUT_FILE, ...

  5. spark0.9.1集群模式执行graphx測试程序(LiveJournalPageRank,新增Connected Components)

    spark最新版公布了.之前的版本号就已经集成了graphx,这个版本号还改了一些bug. 我做了简单測试,只是网上关于集群模式执行spark资料太少了,仅仅有关于EC2(见參考资料1)的.可是还非常 ...

  6. 自己主动化測试程序之中的一个自己定义键盘的模拟測试程序(C语言)

    一.測试程序编写说明 我们做的终端设备上运行的是QT应用程序.使用自己定义的键盘接口.经过測试人员长时间的人机交互測试,来确认系统的功能是否满足需求. 如今须要编写一个自己主动化的測试程序,能够依照预 ...

  7. S3C6410+FPGA+2*RTL8211 驱动 iperf測试

    驱动也写的差点儿相同了,所以有必要測试下性能怎样?本次採用了iperf进行測试.而且对照了下s3c6410+ks8851的測试结果 1.iperf怎样交叉编译? https://iperf.fr/ 官 ...

  8. 一个Nodejs的简单计算測试程序

    測试目的: 1 測试二维数组的使用 2 输出函数的使用 代码: var util = require('util'); a = 3; b = 4; c = a + b; a = []; for(i = ...

  9. Android JNI用于驱动測试

    硬件平台:S3C6410 操作系统:Ubuntu.windows 板子系统:Android 开发工具:jdk.ndk,eclipse 本次測试从linux内核模块编译開始.以S3C6410的pwm驱动 ...

随机推荐

  1. node.Js学习-- 创建服务器简要步骤

    1.创建项目目录 mkdir ningha(文件夹名)npm init 初始化项目  获得package.json 2..在node.Js命令行操作进入到文件所在目录 3.输入browser-sync ...

  2. php邮箱找回密码功能

    原理很简单: 用户找回密码的时候,填写用户名,程序得到用户名便可以去数据库取出用户对应的密码以及当时填写的邮箱, 根据用户名和密码生成一个key=md5(username+password),然后$s ...

  3. http://src.chromium.org/svn/ 定制chrome浏览器教程及源码

    chromium 官网登不进去,最近在学习chrome插件制作,网上教程很多大多没有源码 其实作为开源软件 官方提供了全部源码地址:http://src.chromium.org/svn/ PRESU ...

  4. sublime支持显示中文

    Sublime Text 2是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦.不过Sublime Package Control所以供的插件可以让Subli ...

  5. 2016022610 - redis列表命令集合

    参考网址:http://www.yiibai.com/redis/redis_lists.html Redis列表是简单的字符串列表,排序插入顺序.您可以在头部或列表的尾部Redis的列表添加元素.列 ...

  6. sql如果存在就修改不存在就新增

    FROM 表名 WHERE 条件) UPDATE 表名 SET 字段=值 WHERE 条件 ELSE INSERT INTO 表名(字段) VALUES(值) 真实使用举例: from [UserRu ...

  7. PHP之路——Redis安装

    windows: redis下载链接:https://github.com/ServiceStack/redis-windows 然后编辑redis.windows.conf文件,我看网上有的教程说编 ...

  8. 抓取天涯文章的蜘蛛代码,刚经过更新(因为天涯页面HTML代码变化)

    #_*_coding:utf-8-*- import urllib2 import traceback import codecs from BeautifulSoup import Beautifu ...

  9. golang_protobuf环境搭建

    搭建golang使用rotobuf使用环境 一 安装protobuf: 1 下载protobuf源码:https://github.com/google/protobuf 2 进入源码目录: ./au ...

  10. struts2 拦截器1

    action invoke前会调用,invoke后会调用 public class FirstInterceptor extends AbstractInterceptor{ @Override pu ...