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

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

?? can_sja1000_dev.c

?? 在samsung2410處理器上can實(shí)現(xiàn)通信的源碼
?? 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);
	//注銷(xiāo)設(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一区二区三区免费野_久草精品视频
国产成人精品免费看| 欧美午夜影院一区| 亚洲综合色区另类av| 欧美成人精品二区三区99精品| av福利精品导航| 国产资源精品在线观看| 夜夜嗨av一区二区三区中文字幕| 2欧美一区二区三区在线观看视频| 欧美亚洲自拍偷拍| 99九九99九九九视频精品| 久久精品国产秦先生| 五月婷婷久久综合| 亚洲日本va午夜在线影院| 国产亚洲欧美中文| 亚洲精品一线二线三线无人区| 欧美系列亚洲系列| 一本到不卡免费一区二区| 国产成人一区二区精品非洲| 精品一区二区av| 奇米精品一区二区三区四区| 一区二区三区高清不卡| 亚洲欧美综合网| 中文字幕一区免费在线观看 | 大胆亚洲人体视频| 狠狠色2019综合网| 精品一区二区三区在线播放 | 国产性天天综合网| 2022国产精品视频| 欧美电视剧免费全集观看| 欧美精品黑人性xxxx| 欧美日韩在线一区二区| 日本高清不卡视频| 色婷婷综合中文久久一本| 99久久精品一区| 99在线热播精品免费| 粉嫩欧美一区二区三区高清影视 | 自拍偷拍国产精品| 国产精品进线69影院| 国产精品久久久久久久浪潮网站| 久久蜜桃av一区二区天堂| 久久久久国产精品人| 久久影院视频免费| 国产午夜精品久久久久久免费视| 久久久99精品久久| 欧美极品美女视频| 国产精品天干天干在线综合| 国产精品天干天干在线综合| 中文字幕一区视频| 亚洲国产日韩在线一区模特| 午夜精品影院在线观看| 免费一级欧美片在线观看| 九一久久久久久| 国产传媒欧美日韩成人| 成人午夜精品在线| 色一情一伦一子一伦一区| 欧美乱妇20p| 日韩欧美一区二区在线视频| 久久久亚洲精品一区二区三区 | 爽好多水快深点欧美视频| 免费三级欧美电影| 国产精品 欧美精品| 91在线看国产| 欧美精品1区2区| 精品国产乱码久久久久久蜜臀| 国产亚洲1区2区3区| 国产精品国产三级国产aⅴ中文| 亚洲激情中文1区| 蜜桃精品视频在线| 成人免费视频app| 欧美日韩免费视频| xnxx国产精品| 一区二区三区在线观看欧美 | 国产一区在线观看视频| 97久久精品人人澡人人爽| 欧美色中文字幕| 久久综合狠狠综合久久综合88 | 亚洲欧美精品午睡沙发| 亚洲一区二区三区视频在线播放| 久久精品二区亚洲w码| 成人一级黄色片| 欧美精品777| 欧美激情一区二区三区在线| 亚洲成av人在线观看| 国产精品 日产精品 欧美精品| 91久久国产最好的精华液| 精品国产一区二区三区av性色 | 欧美一区二区三区视频免费| 亚洲国产精品99久久久久久久久 | 国产精品的网站| 日本欧美在线观看| 99精品视频一区| 精品国产91久久久久久久妲己| 一区二区三区**美女毛片| 国产一区视频导航| 欧美一区二区视频在线观看2022| 日本一二三不卡| 久久99国产精品麻豆| 欧美性猛交xxxx乱大交退制版| 国产视频一区在线播放| 日韩成人一级片| 欧美在线视频全部完| 国产欧美一区视频| 毛片av一区二区| 欧美日韩在线直播| 亚洲猫色日本管| 成人黄页在线观看| 精品久久五月天| 天堂成人免费av电影一区| 色婷婷av一区二区| ●精品国产综合乱码久久久久 | 91色porny蝌蚪| 国产欧美日韩视频在线观看| 久久av中文字幕片| 欧美高清视频一二三区 | 色噜噜偷拍精品综合在线| 久久九九国产精品| 黄色小说综合网站| 日韩欧美在线1卡| 日一区二区三区| 欧美视频中文字幕| 一区二区三区日韩精品| 91蝌蚪porny| 国产精品久久精品日日| 成人高清伦理免费影院在线观看| 国产亚洲精久久久久久| 韩国三级中文字幕hd久久精品| 日韩欧美一区在线观看| 蜜臀久久99精品久久久画质超高清| 欧美无人高清视频在线观看| 一区二区日韩av| 欧美日韩一区视频| 性欧美疯狂xxxxbbbb| 欧美卡1卡2卡| 日本va欧美va精品| 精品久久久网站| 国产麻豆精品95视频| 国产亲近乱来精品视频 | av一区二区三区四区| 国产精品久久久久久久午夜片| 成人激情开心网| 亚洲精品免费播放| 欧美日韩一二区| 美国av一区二区| 精品国产伦一区二区三区观看体验 | 成人av高清在线| 中文字幕欧美一区| 色婷婷综合久久久| 亚洲福利一区二区| 在线不卡欧美精品一区二区三区| 午夜精品久久久久久久99樱桃| 91精品国产一区二区人妖| 精品在线一区二区| 国产女人aaa级久久久级 | 亚洲日本va午夜在线电影| 在线观看免费一区| 日本大胆欧美人术艺术动态| 精品久久久久久综合日本欧美| 国产精品资源在线| 亚洲女子a中天字幕| 欧美色爱综合网| 极品少妇xxxx精品少妇| 国产精品不卡视频| 欧美人与禽zozo性伦| 精品一区二区三区在线观看国产| 欧美激情在线一区二区三区| 在线日韩av片| 精品一区二区免费视频| 中文字幕一区二区三区精华液| 欧美日精品一区视频| 精品一区二区三区在线观看国产| 亚洲欧洲日韩综合一区二区| 欧美视频完全免费看| 国产精品影音先锋| 亚洲精品福利视频网站| 精品少妇一区二区三区在线播放| 成人av资源站| 日韩中文字幕区一区有砖一区| 久久久精品天堂| 欧美视频一区在线| 国产精品亚洲第一区在线暖暖韩国 | 在线视频综合导航| 国产激情一区二区三区桃花岛亚洲| 亚洲欧美日韩小说| 欧美精品一区二| 欧美性高清videossexo| 国产剧情一区二区| 亚洲国产乱码最新视频 | 国产在线国偷精品免费看| 伊人色综合久久天天人手人婷| 精品少妇一区二区三区免费观看 | 欧美一区二区在线观看| 91在线一区二区| 国产一区二区不卡在线| 午夜精品福利一区二区三区蜜桃| 国产精品伦一区| 26uuu亚洲综合色| 欧美一区二区三区四区五区| 91麻豆免费观看| 国产成人在线视频免费播放| 蜜桃视频在线一区|