亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? can_sja1000_dev.c

?? s3c2410 arm實(shí)驗(yàn)箱關(guān)于Can總線的驅(qū)動(dòng)代碼。代碼條理清晰
?? C
字號(hào):
/*
****************************************Copyright (c)**************************************************
**                                  廣州致遠(yuǎn)電子有限公司
**                                        CAN開(kāi)發(fā)組 
**                                 http://www.zyinside.com
**
**
**--------------File Info-------------------------------------------------------------------------------
** File name:                   can_sja1000-dev.c
** Last modified Date:          2006-02-16
** Last Version:                V1.0
** Descriptions:                can_sja1000-dev.c, S3C2410 SJA1000 CAN 控制器設(shè)備驅(qū)動(dòng)程序
**                              can_sja1000-dev.c, S3C2410 SJA1000 CAN-bus controller driver
**------------------------------------------------------------------------------------------------------
** Created by:                  滕欣欣          Xingxing Teng
** Created date:                2006-02-16
** Version:                     V1.0
** Descriptions:                初始版本        The original version
**                                              
**------------------------------------------------------------------------------------------------------
** Modified by:                 
** Modified date:
** Version:                             
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by: 
** Modified date:
** Version:     
** Descriptions: 
**
********************************************************************************************************/
#include "config.h"
#include "Print_DEBUG.h"

#define SJA_ALE_PADR 0x20000008		//SJA1000鎖存器端口物理地址
#define SJA_DAT_PADR 0x20000004		//SJA1000數(shù)據(jù)端口物理地址
#define SJA_SRC_LEN	0x01			//SJA1000數(shù)據(jù)長(zhǎng)度,1字節(jié)

static int major = CAN_MAJOR_NR;
stcSJA1000_BufInfo SJA1000_RxBuf;
void *sja1000_ale;
void *sja1000_dat;
static DECLARE_WAIT_QUEUE_HEAD(can_wait);
EXPORT_SYMBOL(sja1000_ale);
EXPORT_SYMBOL(sja1000_dat);

static int can_init(void);
static void can_cleanup(void);

static int can_open(struct inode *p_inode, struct file *p_file);
static int can_release(struct inode *p_inode, struct file *p_flie);
static ssize_t can_read(struct file *p_flie, char *p_buf, size_t count, loff_t *f_pos);
static ssize_t can_write(struct file *p_flie, const char *p_buf, size_t count, loff_t *f_pos);
static int can_ioctl(struct inode *p_inode, struct file *p_flie, unsigned int cmd, unsigned long param);
static void can_interrupt(int irq , void* dev_id, struct pt_regs *regs);

MODULE_PARM(major, "i");
MODULE_DESCRIPTION("Guangzhou Zhiyuan Electronic Co.,LTD.\ngraduate school\nhttp://www.zyinside.com");
MODULE_SUPPORTED_DEVICE("Linux 2.4.18 & MagicARM2410");
MODULE_AUTHOR("Xinxin Teng");

#define  MAJOR_NR   major

struct file_operations sja1000_can_fops = 
{
	owner: THIS_MODULE,
	ioctl: can_ioctl,
	open : can_open,
	write: can_write,
	read:  can_read,
	release : can_release,
		
};
/*
********************************************************************************************************************
**函數(shù)原型		:  	int can_open(struct inode *p_inode, struct file *p_file)
**參數(shù)說(shuō)明		:	
**返回值		:	
**說(shuō)	明		:	CAN驅(qū)動(dòng)的
********************************************************************************************************************
*/
int can_open(struct inode *p_inode, struct file *p_file)
{
	uint8 num;
	int result;
	/* get the device minor and save into filp structure */
    num = MINOR(p_inode->i_rdev);                             
    //p_file->private_data = (void *)num;           		/* 取得次設(shè)備號(hào)并保存在filp結(jié)構(gòu)中 */
    //設(shè)備初始化
	if(TRUE != SJA1000Init(PELI_CAN,BTR_1000K,0x00000000,0xFFFFFFFF))
	{
		printk("<0>SJA1000Init Err!!.\n");
		return -ENODEV;
	}
	//申請(qǐng)中斷
	set_external_irq(IRQ_EINT5,EXT_FALLING_EDGE,GPIO_PULLUP_DIS);
	result = request_irq(IRQ_EINT5, can_interrupt, SA_INTERRUPT, "SJA1000", NULL);
	if(result == 0)
	{
		printk("<0> Interrupt Set OK!.\n");
	}
	else
	{
		printk("<0> Interrupt Set Err! ErrCose = %d.\n", result);
		return result;
	}
			
	MOD_INC_USE_COUNT;
	printk("<0>" DEVICE_NAME " Opened!.\n");
	return(0);
}
/*
********************************************************************************************************************
**函數(shù)原型		:  	int can_release(struct inode *p_inode, struct file *p_flie)
**參數(shù)說(shuō)明		:	
**返回值		:	
**說(shuō)	明		:	CAN驅(qū)動(dòng)的
********************************************************************************************************************
*/
int can_release(struct inode *p_inode, struct file *p_flie)
{
	MOD_DEC_USE_COUNT;
	free_irq(IRQ_EINT5,NULL);
	return(0);
}
/*
********************************************************************************************************************
**函數(shù)原型		:  	ssize_t can_read(struct file *p_flie, char *p_buf, size_t count, loff_t *f_pos)
**參數(shù)說(shuō)明		:	
**返回值		:	
**說(shuō)	明		:	CAN驅(qū)動(dòng)的
********************************************************************************************************************
*/
ssize_t can_read(struct file *p_flie, char *p_buf, size_t count, loff_t *f_pos)
{
	interruptible_sleep_on(&can_wait);
	if(count != sizeof(stcSJA1000_BufInfo))
	{
		return (-EINVAL);
	}
	if(copy_to_user(p_buf,(void*)(&SJA1000_RxBuf),sizeof(stcSJA1000_BufInfo)))
	{
		printk("Coyp to usr Err!.\n");
		return -EFAULT;
	}
	return(sizeof(SJA1000_RxBuf));
}
/*
********************************************************************************************************************
**函數(shù)原型		:  	ssize_t can_write(struct file *p_flie, const char *p_buf, size_t count, loff_t *f_pos)
**參數(shù)說(shuō)明		:	
**返回值		:	
**說(shuō)	明		:	CAN驅(qū)動(dòng)的
********************************************************************************************************************
*/
ssize_t can_write(struct file *p_flie, const char *p_buf, size_t count, loff_t *f_pos)
{
	stcSJA1000_BufInfo TxBuf;
	if(count != sizeof(stcSJA1000_BufInfo))
	{
		printk("count = %d not %d\n",count,sizeof(stcSJA1000_BufInfo));
		return (-EINVAL);
	}
	if(copy_from_user((void*)&TxBuf,(void*)p_buf,sizeof(stcSJA1000_BufInfo)))
	{
		printk("copy_from_user Err.\n");
		return -EFAULT;
	}
	SetTxBuf(&TxBuf);
	SetCommand(CMR_NOM_SD);
	return(sizeof(SJA1000_RxBuf));
}
/*
********************************************************************************************************************
**函數(shù)原型		:  	int can_ioctl(struct inode *p_inode, struct file *p_flie, unsigned int cmd, unsigned long param)
**參數(shù)說(shuō)明		:	
**返回值		:	
**說(shuō)	明		:	CAN驅(qū)動(dòng)的
********************************************************************************************************************
*/
int can_ioctl(struct inode *p_inode, struct file *p_flie, unsigned int cmd, unsigned long param)
{
	int val = 0;
	switch(cmd)
	{
		case IOCTL_BAUD:
			SJA_SoftRst(TRUE);
			if(TRUE != SetBaudRate((uint16)param))
			{
				val = -ENOTTY;
			}
			SJA_SoftRst(FALSE);
			break;
		case IOCTL_ACR:
			SJA_SoftRst(TRUE);
			if(TRUE != ACRCode(param))
			{
				val = -ENOTTY;
			}
			SJA_SoftRst(FALSE);
			break;
		case IOCTL_AMR:
			SJA_SoftRst(TRUE);
			if(TRUE != AMRCode(param))
			{
				val = -ENOTTY;
			}
			SJA_SoftRst(FALSE);
			break;
		default:
			val = -ENOTTY;
			break;
	}
	return(val);
}
/*
********************************************************************************************************************
**函數(shù)原型		:  	int can_init(void)
**參數(shù)說(shuō)明		:	NULL
**返回值		:	返回賦值表示調(diào)用出錯(cuò)
**說(shuō)	明		:	CAN驅(qū)動(dòng)的初始化函數(shù)函數(shù)
********************************************************************************************************************
*/
int can_init(void)
{
	int  i,result;
	PDEBUG("CAll init_module.\n");
	//映射IO
    sja1000_dat = ioremap(SJA_DAT_PADR,SJA_SRC_LEN);
    sja1000_ale = ioremap(SJA_ALE_PADR,SJA_SRC_LEN);
    //測(cè)試硬件連接
    for (i=0 ; i<0x8; i++)
    {
    	writeb(0x09,sja1000_ale);
		writeb(1<<i,sja1000_dat);
		writeb(0x09,sja1000_ale);
		if(readb(sja1000_dat) != 1<<i)
		{
			iounmap(sja1000_ale);
			iounmap(sja1000_dat);
			printk("SJA_1000 Hare Ware Connected Err!!");
			return -ENODEV;
		}
    }
    //注冊(cè)設(shè)備
    result = register_chrdev(MAJOR_NR, DEVICE_NAME, &sja1000_can_fops);
    if (result < 0)
    {
        printk("<0>" DEVICE_NAME ": Unable to get major %d\n", MAJOR_NR );
        return(result); 
    }
    //注冊(cè)中斷
    
    //中斷初始化
    
    if (MAJOR_NR == 0)
    {
        MAJOR_NR = result; /* dynamic */
    }

    printk(KERN_INFO DEVICE_NAME ": init OK\n");
    return(0);
}
/*
********************************************************************************************************************
**函數(shù)原型		:  	void can_cleanup(void)
**參數(shù)說(shuō)明		:	NULL
**返回值		:	NULL
**說(shuō)	明		:	CAN驅(qū)動(dòng)的清除函數(shù)
********************************************************************************************************************
*/
void can_cleanup(void)
{
	PDEBUG("CAll cleanup_module.\n");
	printk("\tUnloading S3C2410 CAN Device Controller Driver\n");
    //關(guān)閉CAN設(shè)備控制器     
    if(TRUE != SJA_SoftRst(TRUE))
	{
		printk("<0>" "SJA_SoftRst False!.\n");
	}   
    //取消IO映射
    iounmap(sja1000_ale);
	iounmap(sja1000_dat);
	//注銷設(shè)備
    unregister_chrdev(MAJOR_NR, DEVICE_NAME);
}


void can_interrupt(int irq , void* dev_id, struct pt_regs *regs)
{
	IntEnty();
	wake_up_interruptible(&can_wait);
}

module_init(can_init);
module_exit(can_cleanup);


/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕制服丝袜一区二区三区| 中文字幕 久热精品 视频在线| 91网站最新网址| 福利一区二区在线| 国产91对白在线观看九色| 国产一本一道久久香蕉| 国内外成人在线视频| 久久99久久99小草精品免视看| 蜜桃一区二区三区在线观看| 日本美女一区二区三区视频| 欧美aⅴ一区二区三区视频| 日韩精品一级二级 | 日日摸夜夜添夜夜添精品视频 | 全部av―极品视觉盛宴亚洲| 婷婷成人综合网| 视频精品一区二区| 免费成人小视频| 国产综合一区二区| 国产精品自在欧美一区| 国产91高潮流白浆在线麻豆| www.色综合.com| 色菇凉天天综合网| 欧美日韩精品免费观看视频| 91麻豆精品国产91久久久久久| 欧美一区二区啪啪| 久久欧美中文字幕| 中文字幕一区二区三区色视频| 亚洲另类中文字| 午夜精品视频在线观看| 九一九一国产精品| 高清视频一区二区| 在线视频你懂得一区二区三区| 欧美人xxxx| 精品日韩在线观看| 国产精品久久久久久户外露出| 亚洲欧美日韩国产综合| 石原莉奈在线亚洲二区| 国产精品系列在线播放| 一本一本大道香蕉久在线精品| 欧美精品三级在线观看| 久久婷婷国产综合国色天香| 亚洲欧美区自拍先锋| 蜜臀久久久久久久| 成人国产视频在线观看| 欧美美女bb生活片| 久久久国产午夜精品| 国产在线国偷精品产拍免费yy| 丁香网亚洲国际| 欧美四级电影网| 久久久久久一级片| 亚洲自拍都市欧美小说| 国产美女一区二区三区| 欧美日韩一区二区欧美激情| 久久美女高清视频| 亚洲福利一二三区| 丰满白嫩尤物一区二区| 欧美精品vⅰdeose4hd| 中文av一区特黄| 青娱乐精品视频在线| 91香蕉视频mp4| 精品精品欲导航| 夜色激情一区二区| 国产成人av资源| 欧美一区二区视频免费观看| 中文字幕一区二区三中文字幕| 美女视频一区在线观看| 色婷婷久久久综合中文字幕| 久久免费国产精品| 日韩国产精品91| 色婷婷亚洲综合| 欧美激情综合网| 蜜臀久久久久久久| 欧美亚洲一区三区| 国产精品灌醉下药二区| 国产一区欧美一区| 91精品国产乱| 亚洲大尺度视频在线观看| av午夜一区麻豆| 久久久午夜精品| 美女视频黄免费的久久| 欧美精品自拍偷拍| 一区二区三区四区国产精品| 不卡一区中文字幕| 久久久影视传媒| 另类小说图片综合网| 欧美军同video69gay| 亚洲精品高清视频在线观看| 成人av网站在线观看| 久久久久久久综合日本| 狠狠色丁香婷综合久久| 91精品国产免费| 91麻豆免费观看| 中文字幕乱码日本亚洲一区二区| 国产最新精品免费| 日韩一二在线观看| 日韩国产成人精品| 欧美高清一级片在线| 亚洲成av人片在线观看| 欧美性极品少妇| 亚洲国产精品嫩草影院| 欧美性色黄大片手机版| 亚洲香肠在线观看| 欧美性大战久久久| 亚洲夂夂婷婷色拍ww47| 在线影院国内精品| 亚洲一二三区视频在线观看| 欧美网站一区二区| 亚洲一级在线观看| 欧美久久久久久久久中文字幕| 亚洲成人资源在线| 91精品国产综合久久精品app| 日韩不卡免费视频| 欧美一级日韩一级| 韩国女主播成人在线| 国产丝袜欧美中文另类| 成人激情小说网站| 国产精品电影一区二区三区| 91麻豆福利精品推荐| 亚洲资源中文字幕| 日韩一区二区中文字幕| 精品伊人久久久久7777人| 久久久国产一区二区三区四区小说| 国产成人精品影视| 亚洲天堂a在线| 精品视频999| 麻豆成人91精品二区三区| 久久日韩粉嫩一区二区三区| 成人免费毛片高清视频| 亚洲精品乱码久久久久久黑人| 欧美日韩视频在线第一区 | 亚洲一卡二卡三卡四卡五卡| 成人免费一区二区三区视频| 91理论电影在线观看| 亚洲成人精品一区二区| 欧美一区二区三区视频在线观看| 精品一区二区综合| 中文字幕中文字幕中文字幕亚洲无线| 91成人在线观看喷潮| 久久精品国产秦先生| 国产精品乱码一区二区三区软件| 色欧美片视频在线观看在线视频| 日韩电影一区二区三区| 欧美韩国日本不卡| 欧美色倩网站大全免费| 国产自产高清不卡| 怡红院av一区二区三区| 日韩欧美久久久| av激情综合网| 日本aⅴ免费视频一区二区三区 | 久久夜色精品国产欧美乱极品| 成人午夜精品在线| 亚洲va在线va天堂| 国产日产精品1区| 欧美日韩免费观看一区二区三区 | 欧美一区二区精美| jlzzjlzz欧美大全| 久久av资源站| 亚洲激情av在线| 亚洲精品一区二区三区99| 色婷婷av一区二区三区大白胸| 经典一区二区三区| 夜夜嗨av一区二区三区四季av| 久久久久久一二三区| 欧美日韩国产综合视频在线观看| 国产乱码一区二区三区| 亚洲成人动漫av| 国产精品久久久久久久蜜臀 | 欧美精品一区二区不卡| 欧美亚洲综合久久| 国产成+人+日韩+欧美+亚洲| 日本欧美加勒比视频| 一区二区三区不卡视频| 中文乱码免费一区二区| 精品国偷自产国产一区| 欧美日韩国产美| 91免费版在线| 成人免费不卡视频| 国产乱码一区二区三区| 免费欧美日韩国产三级电影| 亚洲午夜一区二区三区| 中文字幕一区二区三区四区不卡| 精品国产91久久久久久久妲己| 欧美日韩国产乱码电影| 色综合久久天天| 成人福利视频网站| 国产毛片一区二区| 日韩福利视频导航| 亚洲国产日韩在线一区模特| 日韩一区有码在线| 国产精品午夜春色av| 久久精品免费在线观看| 精品国产三级a在线观看| 91精品国产美女浴室洗澡无遮挡| 欧美亚洲综合另类| 在线观看视频一区二区| 色噜噜狠狠色综合中国| 色哟哟日韩精品| 99国产精品久| 91香蕉国产在线观看软件| 97se亚洲国产综合自在线|