📄 gpiodrv.c.bak
字号:
/*下面是一个简单的gpio跑马灯驱动,基于FS2410处理器:*/
#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif
#include <linux/fs.h>
#include <linux/iobuf.h>
#include <linux/major.h>
#include <asm/uaccess.h>
#include <asm/hardware.h>
#include <asm/arch/cpu_s3c2410.h>
#include <asm/io.h>
#include <linux/vmalloc.h>
#include <linux/config.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/delay.h>
MODULE_LICENSE("GPL");
#define IOPORT_MAJOR 220
int gpio_ctl_open(struct inode*, struct file*);
int gpio_ctl_ioctl(struct inode*, struct file*, unsigned int,unsigned long);
//int gpio_ctl_release(struct inode*, struct file*);
static struct file_operations gpio_ctl_fops={
ioctl: gpio_ctl_ioctl,
open: gpio_ctl_open,
// release: gpio_ctl_release,
};
int gpio_ctl_open(struct inode *inode,struct file *fllp)
{
GPFCON=0x5500;//0101 0101 0000 0000
GPFUP=0xFF;
printk("open gpio devices\n");
return 0;
}
int gpio_ctl_release(struct inode *inode, struct file *filp)
{
printk("release this device\n");
return 0;
}
int gpio_ctl_ioctl(struct inode *inode,struct file *flip,unsigned int command,unsigned long arg)
{
unsigned int led,p;
p=0xEF;
if(command==1)
{
while(arg--)
{
led=p;
GPFDAT=led;
led=(led<<1);
p=led;
mdelay(400);
if(!(p&0x9))
p=0xEF;
}
return 0;
}
else
printk( "Fail!\n" );
return(0);
}
//////////////////////////////////////////////////////////////////////
static int __init gpio_init(void)
{
int ret=0;
printk("gpio_init\n");
ret = register_chrdev(IOPORT_MAJOR, "gpio", &gpio_ctl_fops);
if(ret < 0)
{
printk("fail to register\n");
return -1;
}
printk("success to register\n");
return 0;
}
//////////////////////////////////////////////////////////////////////
void __exit gpio_release(void)
{
printk("quit gpio\n");
unregister_chrdev(IOPORT_MAJOR, "gpio");
}
module_init(gpio_init);
module_exit(gpio_release);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -