DM8168 GPIO驱动与測试程序
本次測试针对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驱动与測试程序的更多相关文章
- DM8168 PWM驱动与測试程序
昨天把DM8168的Timer设置给摸了一遍,为写PWM的底层驱动做好了准备,如今就要进入主题了. dm8168_pwm.c: #include <linux/module.h> #inc ...
- mini2440驱动奇谭——ADC驱动与測试(动态挂载驱动)
博客:http://blog.csdn.net/muyang_ren 实现功能:开发板动态载入adc驱动模块并能通过測试程序 系统:Ubuntu 14.04 驱动交叉编译内核:linux-2. ...
- DLL程序的创建步骤和測试程序
首先,创建DLL程序 然后,加入一个导出类 比如: //Test.h #pragma once class AFX_EXT_CLASS Test { public: Test(void); ~Te ...
- H264解码的一个測试程序
网上看到的一个H264视频格式的解码測试程序,能够用来參考其逻辑流程. 代码例如以下: Test_Display_H264(){ in_fd = open(H264_INPUT_FILE, ...
- spark0.9.1集群模式执行graphx測试程序(LiveJournalPageRank,新增Connected Components)
spark最新版公布了.之前的版本号就已经集成了graphx,这个版本号还改了一些bug. 我做了简单測试,只是网上关于集群模式执行spark资料太少了,仅仅有关于EC2(见參考资料1)的.可是还非常 ...
- 自己主动化測试程序之中的一个自己定义键盘的模拟測试程序(C语言)
一.測试程序编写说明 我们做的终端设备上运行的是QT应用程序.使用自己定义的键盘接口.经过測试人员长时间的人机交互測试,来确认系统的功能是否满足需求. 如今须要编写一个自己主动化的測试程序,能够依照预 ...
- S3C6410+FPGA+2*RTL8211 驱动 iperf測试
驱动也写的差点儿相同了,所以有必要測试下性能怎样?本次採用了iperf进行測试.而且对照了下s3c6410+ks8851的測试结果 1.iperf怎样交叉编译? https://iperf.fr/ 官 ...
- 一个Nodejs的简单计算測试程序
測试目的: 1 測试二维数组的使用 2 输出函数的使用 代码: var util = require('util'); a = 3; b = 4; c = a + b; a = []; for(i = ...
- Android JNI用于驱动測试
硬件平台:S3C6410 操作系统:Ubuntu.windows 板子系统:Android 开发工具:jdk.ndk,eclipse 本次測试从linux内核模块编译開始.以S3C6410的pwm驱动 ...
随机推荐
- InstallShield:自己备份
LIST listData;//声明listData listData = ListCreate(STRINGLIST);//创建一个空的实际字符串或数字列表. //参数都是在上个界面中赋值,然后在下 ...
- Apache 支持PHP
①加载PHP模块到Apache中: LoadModule php5_module "d:\php5\php5apache2_2.dll" ②加入识别扩展名为.php文件(也可以 ...
- php的一些数组用法
数组分割 array_chunk(); 比较数组 1. array_diff() array_diff_assoc() 2. array_filter(); functionodd($var){ re ...
- python学习随笔
1 高阶函数的使用: import math def add(x, y, f): return f(x) + f(y) sq = math.sqrt print add(25, 9,sq) 2. ma ...
- 【技术贴】解决127.0.0.1和http://localhost均被拦截跳转到另一个网页
很艰难的历程. 今天安装一个OA系统,要用到http://127.0.0.1输入完成之后,可以进入安装界面,but,我输入完了之后,自动跳到了129129垃圾网站,艹,我真TM服了,我把本地连接网线都 ...
- 转载百度百科上的强回复,关于spring的IOC和DI
IoC与DI 首先想说说IoC(Inversion of Control,控制倒转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命 ...
- quartz定时任务时间配置
quartz定时任务时间设置描述(2011-03-03 16:23:50)转载▼标签: quartz时间it 分类: 凌乱小记 这些星号由左到右按顺序代表 : * * * ...
- 【POJ】2503 Babelfish
字典树简单题. #include <cstdio> #include <cstring> #include <cstdlib> typedef struct Tri ...
- (转)ASP.NET MVC路由配置
一.命名参数规范+匿名对象 1 routes.MapRoute(name: "Default", 2 url: "{controller}/{action}/{id}&q ...
- 关于android屏幕适配
好吧 我承认被美工虐的够呛,而且美工他么是个男的!一点也不美, 废话不多说 急着赶路, 之前不怎么重视 直到遇见这个美工给我一套1080x1920的 图,没错 就一套 1dp=3px没错的啊 问题是就 ...