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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? can.c

?? arm+linux下can控制器驅動,已經在arm9上調試通過
?? C
字號:
#include <linux/module.h>
#include <linux/init.h>
#include <linux/input.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/arch-s3c2410/irqs.h>
#include <asm/signal.h>
#include <asm/hardware.h>
#include <asm/uaccess.h>
#include <asm/arch/regs-gpio.h>
#include <asm/arch/regs-irq.h>
#include <asm/dma.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/fcntl.h>
#include <linux/cdev.h>
#include <linux/version.h>
#include <linux/vmalloc.h>
#include <linux/ctype.h>
#include <linux/pagemap.h>
#include <linux/poll.h>

#include "demo.h"#define MCP2510_CS_OUT  _raw_writel((_raw_readl(S3C2410_GPGCON)&(~(3<<4)))|(1<<4),S3C2410_GPGCON)
#define MCP2510_CS_H    _raw_writel(_raw_readl(S3C2410_GPGDAT)|(1<<2),S3C2410_GPGDAT)
#define MCP2510_CS_L    _raw_writel(_raw_readl(S3C2410_GPGDAT)&(~(1<<2)),S3C2410_GPGDAT)
#define MCP2510_SI_OUT  _raw_writel((_raw_readl(S3C2410_GPECON)&(~(3<<24)))|(1<<24),S3C2410_GPECON)
#define MCP2510_SI_H		_raw_writel(_raw_readl(S3C2410_GPEDAT)|(1<<12),S3C2410_GPEDAT)
#define MCP2510_SI_L		_raw_writel(_raw_readl(S3C2410_GPEDAT)&(~(1<<12)),S3C2410_GPEDAT)
#define MCP2510_SCK_OUT _raw_writel((_raw_readl(S3C2410_GPECON)&(~(3<<26)))|(1<<26),S3C2410_GPECON)
#define MCP2510_SCK_H   _raw_writel(_raw_readl(S3C2410_GPEDAT)|(1<<13),S3C2410_GPEDAT)
#define MCP2510_SCK_L	_raw_writel(_raw_readl(S3C2410_GPEDAT)&(~(1<<13)),S3C2410_GPEDAT)
#define MCP2510_SO_IN	_raw_writel((_raw_readl(S3C2410_GPECON)&(~(3<<22)))|(0<<22),S3C2410_GPECON)
#define MCP2510_SO_GET	(_raw_writel(S3C2410_GPEDAT)&(1<<11))>>11
#define MCP2510_SO_PULLUP	_raw_writel(_raw_readl(S3C2410_GPEUP)&(~(1<<11)),S3C2410_GPEUP)
#define MCP2510_SO_DISPULLUP	_raw_writel(_raw_readl(S3C2410_GPEUP)|(1<<11),S3C2410_GPEUP)
#define MCP2510_INT_IN	_raw_writel((_raw_readl(S3C2410_GPGCON)&(~(3<<0)))|(1<<1),S3C2410_GPGCON)

void MCP2510_RW_Start(viod)  //start SPI read and write
{
	MCP2510_SI_L;
	MCP2510_SCK_L;
	ndelay(400);
    MCP2510_CS_L;
	ndelay(400);
}
void Spi_Write(unsigned char Date)  //SPI write data
{
	unsigned char m;
	for(m=0;m<8;m++)
	{
		if(Data&0x80)==0x80)
			MCP2510_SI_H;
		else
            MCP2510_SI_L;
			ndelay(400);
            MCP2510_SCK_H;
			Data=Data<<1;
            MCP2510_SCK_L;
            ndelay(400);
	}
}
unsigned char Spi_Read(void)
{
	unsigned char m;
	unsigned char data=0;
	for(m=0;m<8;m++)
	{
		MCP2510_SCK_H;
        ndelay(400);
        data=data<<1;
		if(MCP2510_SO_GET!=0)
			data|=0x01;
		else
			data&=0xfe;
		ndelay(400);
		MCP2510_SCK_L;
		ndelay(400);
	}
	return (data);
}
void MCP2510_Write(unsigned char address,unsigned char value)
{
	MCP2510_RW_Start();
	Spi_Write(MCP2510INSTR_WRITE);
	Spi_Write(address);
	Spi_Write(value);
	MCP2510_CS_H;
}
unsigned char MCP2510_Read(unsigned char address)
{
	unsigned char result;
	MCP2510_RW_Start();
	Spi_Write(MCP2510INSTR_READ);
	Spi_Write(address);
	result=Spi_Read();
	MCP2510_CS_H;
	return result;
}
if(request_irq(IRQ_EINT8,&MCPCAN_interrupt,SA_INTERRUPT,"MCPCAN",NULL))
{
	printk("request MCPCAN irq failed!\n");
	return -1;
}
static irqreturn_t MCPCAN_interrupt(int irq,void *dummy,struct pt_regs *fp)
{
	unsigned char byte;
	byte=MCP2510_Read(CANINTF);
#if MCP2510_DEBUG
	Uart_Printf("mcp2510 enter interrupt!: %d\n",byte);
#endif
	if(MCP2510_ReadStatus()&RX0INT)
	{
		MCP2510_Read_Can(3,&(mcp2510dev->MCP2510_Candata[mcp2510dev->receivePos]));
		MCP2510_WriteBits(CANINTF,~RX0INT,RX0INT);
#if MCP2510_DEBUG
		Uart_Printf("RX0INT!\n");
#endif
		if(MCPCAN_inc==1)
		{
			NextCanDataPos(mcp2510dev->receivePos);
			wake_up_interruptible(&(mcp2510dev->wq));
		}
	}
	if(MCP2510_ReadStatus()&RX0INT)
	{
		MCP2510_Read_Can(3,&(mcp2510dev->MCP2510_Candata[mcp2510dev->receivePos]));
		MCP2510_WriteBits(CANINTF,~RX1INT,RX1INT);
#if MCP2510_DEBUG
		Uart_Printf("RX1INT!\n");
#endif
		if(MCPCAN_inc==1)
		{
			NextCanDataPos(mcp2510dev->receivePos);
			wake_up_interruptible(&(mcp2510dev->wq));
		}
	}
	return IRQ_HANDLED;
}
struct MCP_Filter
{
	unsigned int RXM0SIDH_ID;
	unsigned int RXM1SIDH_ID;
	unsigned int RXF0SIDH_ID;
	unsigned int RXF1SIDH_ID;
	unsigned int RXF2SIDH_ID;
	unsigned int RXF3SIDH_ID;
	unsigned int RXF4SIDH_ID;
	unsigned int RXF5SIDH_ID;

	unsigned char RXMSIDH_0;
	unsigned char RXMSIDH_1;
	unsigned char RXFSIDH_0;
	unsigned char RXFSIDH_1;
	unsigned char RXFSIDH_2;
	unsigned char RXFSIDH_3;
	unsigned char RXFSIDH_4;
	unsigned char RXFSIDH_5;
}
int MCPCAN_ioctl(struct inode *inode,struct file *filp,unsigned int cmd,unsigned long arg)
{
	unsigned char value=0;
	unsigned char ReadBackCNT=0;
	void _user *argp=(void _user *)arg;
	switch(cmd)
	{
	case SET_REVEIVEFILTER:
		if(copy_from_user(argp,(void _user *)arg,sizeof(struct MCP_Filter)))
		{
#if MCP2510_DEBUG
			printk("COMMAND_CHANGEFILTER ioctl error\n");
#endif
			return -EFAULT;
		}
		struct MCP_Filter *pfilter=(struct MCP_Filter *)argp;
		MCP2510_Write(MCP2510REG_CANCTRL,MODE_CONFIG);
		while(ReadBackCNT<8)
		{
			value=(MCP2510_Read(MCP2510REG_CANSTAT)&0xe0);
			if(value==MODE_CONFIG)
			{
#if MCP2510_DEBUG
				Uart_Printf("ReadBackCNT=0x%x\n",ReadBackCNT);
#endif
				break;
			}
			ReadBackCNT++;
		}
		if(ReadBackCNT==8)
		{
			return -EFAULT;
		}
		MCP2510_Write_ID(RXM0SIDH,pfilter->RXM0SIDH_ID,pfilter->RXMSIDH_0);
		MCP2510_Write_ID(RXM1SIDH,pfilter->RXM1SIDH_ID,pfilter->RXMSIDH_1);

		MCP2510_Write_ID(RXF0SIDH,pfilter->RXF0SIDH_ID,pfilter->RXFSIDH_0);
		MCP2510_Write_ID(RXF1SIDH,pfilter->RXF1SIDH_ID,pfilter->RXFSIDH_1);
		MCP2510_Write_ID(RXF2SIDH,pfilter->RXF2SIDH_ID,pfilter->RXFSIDH_2);
		MCP2510_Write_ID(RXF3SIDH,pfilter->RXF3SIDH_ID,pfilter->RXFSIDH_3);
		MCP2510_Write_ID(RXF4SIDH,pfilter->RXF4SIDH_ID,pfilter->RXFSIDH_4);
		MCP2510_Write_ID(RXF5SIDH,pfilter->RXF5SIDH_ID,pfilter->RXFSIDH_5);
		MCP2510_Write(CLKCTRL,MODE_NORMAL|CLKEN|CLK8);
		MCP2510_WriteBits(RXB0CTRL,(RXB_BUKT+RXB_RX_STDEXT),0XFF);
		MCP2510_WriteBits(RXB1CTRL,RXB_RX_STDEXT,0XFF);
#if MCP2510_DEBUG
		printk("MCPCAN ioctl successfully\n");
#endif
		break;
		case  SET_CANBAUD:
			...
		break;
	}	
	return 0;
}
ssize_t MCPCAN_write(struct file *filp,const char _user *buf,size_t count,loff_t *f_pos)
{
	char writeBuffer[sizeof(struct Canframe)];
	if(count>=sizeof(struct Canframe))
	{
		copy_from_user(writeBuffer,buf,sizeof(struct Canframe));
		if(Mcp2510_Send_Data((struct Canframe *)writeBuffer)==0)
		{
			return sizeof(struct Canframe);
		}
	}
	return 0;
}/*******************************************************
                MODULE ROUTINE
*******************************************************/
void DEMO_cleanup_module(void)
{
	dev_t devno = MKDEV(DEMO_MAJOR, DEMO_MINOR);
	int i;
	for (i = 0; i <4; i++) {
		free_irq(irqArray[i],simplekey_interrupt);
	}
	if (DEMO_devices) 
	{
		cdev_del(&DEMO_devices->cdev);
		kfree(DEMO_devices);
	}
	unregister_chrdev_region(devno,1);
}

int DEMO_init_module(void)
{
	int result;
	dev_t dev = 0;
	int i=0;
	initButton();
	dev = MKDEV(DEMO_MAJOR, DEMO_MINOR);
	result = register_chrdev_region(dev, 1, "DEMO");
	if (result < 0) 
	{
		printk(KERN_WARNING "DEMO: can't get major %d\n", DEMO_MAJOR);
		return result;
	}

	DEMO_devices = kmalloc(sizeof(struct DEMO_dev), GFP_KERNEL);
	if (!DEMO_devices)
	{
		result = -ENOMEM;
		goto fail;
	}
	memset(DEMO_devices, 0, sizeof(struct DEMO_dev));

	init_MUTEX(&DEMO_devices->sem);
	cdev_init(&DEMO_devices->cdev, &DEMO_fops);
	DEMO_devices->cdev.owner = THIS_MODULE;
	DEMO_devices->cdev.ops = &DEMO_fops;
	result = cdev_add (&DEMO_devices->cdev, dev, 1);
	if(result)
	{
		printk(KERN_NOTICE "Error %d adding DEMO\n", result);
		goto fail;
	}

	for (i = 0; i <4; i++) {
		if (request_irq(irqArray[i], &simplekey_interrupt, SA_INTERRUPT, "simplekey", NULL)) {
			printk("request button irq failed!\n");
			return -1;
		}		
	}	
	init_waitqueue_head(&DEMO_devices->wq);
	init_timer(&polling_timer);
	polling_timer.data = (unsigned long)0;
	polling_timer.function = polling_handler;
	return 0;

fail:
	DEMO_cleanup_module();
	return result;                       
}

module_init(DEMO_init_module);
module_exit(DEMO_cleanup_module);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美理论片在线| 国产麻豆视频精品| 亚洲人成精品久久久久久| 国产精品乱码久久久久久| 亚洲精品一区二区三区四区高清| 欧美久久久久久久久久| 欧美吻胸吃奶大尺度电影 | 精品噜噜噜噜久久久久久久久试看| 日本乱人伦一区| 欧美系列一区二区| 制服.丝袜.亚洲.中文.综合| 欧美福利视频一区| 欧美精品一区二区久久久| 久久久影视传媒| 最新国产成人在线观看| 亚洲国产一区二区三区| 免费在线欧美视频| 国产成人精品免费在线| 91丨九色porny丨蝌蚪| 欧美在线一区二区| 日韩女同互慰一区二区| 欧美激情资源网| 一区二区三区视频在线看| 亚洲成a人片综合在线| 精品在线亚洲视频| 91蜜桃婷婷狠狠久久综合9色| 欧美日韩一区二区三区在线| 欧美一区二区三区性视频| www国产精品av| 樱花草国产18久久久久| 男女男精品网站| 成人av网站在线观看| 欧美亚洲国产一区二区三区va| 欧美一区二区三区在线看| 欧美激情一区二区三区在线| 亚洲男同性视频| 精品无人区卡一卡二卡三乱码免费卡| 岛国av在线一区| 欧美一区二区私人影院日本| 国产精品美女www爽爽爽| 夜色激情一区二区| 国产在线精品一区二区三区不卡| 91免费在线播放| 久久婷婷色综合| 五月综合激情婷婷六月色窝| 国产伦理精品不卡| 欧美精选一区二区| 日韩毛片视频在线看| 国产在线不卡一区| 欧美美女bb生活片| 亚洲激情av在线| 成人午夜精品一区二区三区| 欧美日韩一区二区电影| 国产精品国产精品国产专区不片| 美女视频一区二区三区| 在线中文字幕一区二区| 国产精品欧美一区喷水| 国模大尺度一区二区三区| 7878成人国产在线观看| 一区二区三区国产豹纹内裤在线| 成人动漫一区二区三区| 久久亚洲捆绑美女| 韩国成人在线视频| 日韩精品一区二区三区视频播放| 午夜天堂影视香蕉久久| 在线观看欧美黄色| 亚洲制服丝袜在线| 91福利视频网站| 亚洲综合另类小说| 91蜜桃在线免费视频| 中文字幕色av一区二区三区| 成人一级视频在线观看| 国产精品免费久久| 不卡av在线免费观看| 亚洲国产高清在线| gogogo免费视频观看亚洲一| 久久久久9999亚洲精品| 高潮精品一区videoshd| 国产日韩v精品一区二区| 国产成人精品在线看| 久久嫩草精品久久久精品| 国产精品一二三区| 国产精品网站在线观看| 92精品国产成人观看免费| 亚洲欧美视频在线观看视频| 91啦中文在线观看| 亚洲影院理伦片| 91麻豆精品国产91久久久久| 六月丁香综合在线视频| 久久九九久精品国产免费直播| 国产成人aaa| 日韩码欧中文字| 777午夜精品视频在线播放| 久久99深爱久久99精品| 国产精品美女久久久久久| 91福利社在线观看| 免费成人美女在线观看.| 国产视频一区在线观看| 色综合欧美在线| 日韩黄色免费电影| 国产欧美日韩一区二区三区在线观看| 91一区二区三区在线观看| 亚洲精品亚洲人成人网| 日韩视频免费观看高清完整版在线观看| 久久国产综合精品| 一区在线观看免费| 日韩视频一区二区三区| av午夜一区麻豆| 热久久国产精品| 亚洲人123区| 26uuu成人网一区二区三区| 成人做爰69片免费看网站| 亚洲在线免费播放| 国产亚洲欧美在线| 欧美日韩精品一区二区三区四区| 麻豆精品在线视频| 最新不卡av在线| 欧美一区二区三区四区久久| 成人免费看黄yyy456| 免费人成精品欧美精品| 亚洲欧洲中文日韩久久av乱码| 精品国产乱码久久久久久免费 | 国产精一区二区三区| 亚洲一区二区av电影| 26uuu国产电影一区二区| 欧美日韩一级视频| 一本久久a久久精品亚洲| 久久国产夜色精品鲁鲁99| 亚洲国产婷婷综合在线精品| 国产拍揄自揄精品视频麻豆| 在线电影欧美成精品| 99久久国产综合精品麻豆| 久久97超碰国产精品超碰| 亚洲国产人成综合网站| 亚洲少妇30p| 亚洲欧美综合网| 久久久美女毛片| 日韩欧美第一区| 91精品国产91久久久久久最新毛片| 99这里只有久久精品视频| 国产一区二区精品久久91| 日韩国产精品久久久久久亚洲| 亚洲一区二区三区四区中文字幕| 亚洲欧洲日产国产综合网| 日本一区二区成人| 日本一区二区免费在线观看视频 | 亚洲人成亚洲人成在线观看图片| 精品日韩在线观看| 日韩亚洲欧美高清| 欧美军同video69gay| 色综合天天狠狠| 91污在线观看| 99久久国产综合精品色伊| 99亚偷拍自图区亚洲| 成人小视频免费观看| 成人激情文学综合网| jizz一区二区| 91国偷自产一区二区三区成为亚洲经典| 99久久久国产精品免费蜜臀| av中文字幕亚洲| 97久久精品人人做人人爽 | 一区二区视频在线看| 一区二区三区日韩精品视频| 亚洲日本青草视频在线怡红院| 综合av第一页| 亚洲一区二区黄色| 日韩国产欧美在线播放| 毛片不卡一区二区| 国产风韵犹存在线视精品| www.成人在线| 欧美日韩一区国产| 精品国产亚洲在线| 国产精品国产三级国产三级人妇 | 国产亚洲1区2区3区| 中国av一区二区三区| 成人免费在线观看入口| 亚洲欧洲99久久| 青青青伊人色综合久久| 国产一区二区不卡| 成人黄色电影在线| 欧美系列亚洲系列| 久久久综合视频| 亚洲综合丝袜美腿| 国产乱子伦视频一区二区三区| av一区二区三区| 日韩视频123| 亚洲乱码国产乱码精品精小说| 天堂在线一区二区| 成人av资源站| 日韩三级免费观看| 国产精品久久精品日日| 视频一区二区国产| 成人污污视频在线观看| 欧美日本韩国一区| 国产精品美日韩| 久久 天天综合| 欧美日韩精品福利| 国产精品热久久久久夜色精品三区 | 国产精品欧美综合在线| 亚洲va韩国va欧美va精品|