⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1111leddrv.c

📁 at91ar9200 A/D驱动源码
💻 C
字号:
/**************************************************************** Institue of Automation,Chinese Academy of Sciences* File Name: leddrv.c* Description: Light leds on h9200 board* Author: Wei An***************************************************************/#ifdef MODULE#include <linux/module.h>//#include <linux/version.h>#else//
#define MOD_INC_USE_COUNT//
#define MOD_DEC_USE_COUNT
#endif
#define __KERNEL__
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/poll.h>
#include <linux/slab.h>
#include <linux/ioport.h>
#include <asm/uaccess.h>
#include <asm/io.h>
#include <linux/fcntl.h>
#include <asm/arch/AT91RM9200_SYS.h>
#define IOPMOD            (*(volatile unsigned *)0x03FF5000) //IO port data register
#define GET_DATA 0x4800
static int led_write(struct file *,const char *,int,loff_t *);
static int led_ioctl(struct inode *,struct file *,int,unsigned long);
static void Delay(int);
static unsigned int major =0;
static struct file_operations led_fops=
{      write	:(void(*))led_write,      ioctl	:(void(*))led_ioctl,};
char led_name[]="leddrv";           
 static int __init leddrv_init_module(void)
{      int retv;      retv=register_chrdev(major,led_name,&led_fops);      
if(retv<0)   
   {         printk("<1>Register Fail!\n");        
 return retv;      } 
    if(major==0)        major=retv;
          printk("<1>Led device OK!\n");  
   return 0;}
static void __exit leddrv_cleanup(void)
{      int retv;      retv=unregister_chrdev(major,led_name);   
   if(retv<0)   
   {        printk("<1>UnRegister Fail!\n");        return;      }      printk("<1>LEDDRV:GOOD-bye!\n");}
static int led_write(struct file *led_file, const char *buf,int len,loff_t *loff)
{       unsigned int iopdata;       
AT91PS_SYS sys = (AT91PS_SYS) AT91C_VA_BASE_SYS;         
sys->PIOC_PER=(unsigned int)(1<<14)|(unsigned int)(1<<15);      
 sys->PIOC_OER=(unsigned int)(1<<14)|(unsigned int)(1<<15);           
 if(copy_from_user((char*)&iopdata,buf,len))         return -EFAULT;      
 sys->PIOC_SODR=iopdata;       
 Delay(100);      
 AT91_SYS->PIOC_CODR=iopdata;       
 return len;}
static int led_ioctl(struct inode * s_node,struct file * s_file,int cmd,unsigned long arg)
{             int retv;       switch(cmd)      
     {        case GET_DATA:             retv=copy_to_user((void*)arg,(char*)&IOPMOD,sizeof(int));            
 if(retv<0)                
return -1;           
  printk("<1>get timer0 flag ok\n");           
  break;       
default:             break;       }     
 return 0;}
static void Delay(int x)
{	int i,j,k;	for(i=0;i<x;i++)		
for(j=0;j<0xff;j++)			
for(k=0;k<0xff;k++);}
module_init(leddrv_init_module);
module_exit(leddrv_cleanup);//MODULE_LICENSE("GPL");//MODULE_AUTHOR("Wei An");//MODULE_DESCRIPTION("Led driver for H9200 board");//MODULE_PARM(debug, "i");/*end of leddrv.c*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -