亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
97成人超碰视| 97国产精品videossex| 日本欧美一区二区| 人人爽香蕉精品| 美国精品在线观看| 精品一区二区在线免费观看| 激情丁香综合五月| 高清成人在线观看| 日韩欧美一级二级三级久久久| 在线精品观看国产| 欧美日韩精品欧美日韩精品| 678五月天丁香亚洲综合网| 日韩欧美国产精品| 亚洲.国产.中文慕字在线| 久久精品免费在线观看| 99免费精品视频| 国产成人免费在线观看不卡| 亚洲一级片在线观看| 国产精品国产三级国产普通话99| 国产精品日日摸夜夜摸av| 99久久综合99久久综合网站| 午夜国产精品一区| 91精品国产综合久久福利 | 国产精品亚洲人在线观看| 国产精品免费av| 欧美变态口味重另类| 色综合久久中文综合久久牛| 国产一区91精品张津瑜| 丝袜国产日韩另类美女| 亚洲精品国久久99热| 中文字幕乱码一区二区免费| 日韩欧美国产小视频| 欧美色老头old∨ideo| 成人自拍视频在线| 精品日韩av一区二区| 亚洲午夜久久久久久久久电影网| 精品综合久久久久久8888| 91国偷自产一区二区开放时间| 精品免费视频一区二区| 久久超碰97中文字幕| 99热99精品| 国产精品传媒视频| 久久精品国产999大香线蕉| 欧美体内she精高潮| 中文字幕久久午夜不卡| 亚洲成人av电影在线| av中文字幕一区| 欧美激情一二三区| 狠狠v欧美v日韩v亚洲ⅴ| 欧美日本视频在线| 亚洲大片精品永久免费| 精品视频资源站| 亚洲午夜久久久久久久久久久| 97久久精品人人做人人爽| 国产精品乱码久久久久久| 国产91丝袜在线18| 国产精品无码永久免费888| 高清国产午夜精品久久久久久| 久久久久久久久久久久久女国产乱 | 亚洲综合视频网| 欧洲中文字幕精品| 亚洲国产成人91porn| 欧美高清性hdvideosex| 秋霞影院一区二区| 久久综合色婷婷| 成人av电影在线网| 亚洲精品乱码久久久久久久久 | 国精产品一区一区三区mba桃花| 欧美电影免费观看高清完整版在线观看| 日本不卡视频在线| 精品国产乱码久久久久久闺蜜| 国产精品中文字幕日韩精品| 日韩色在线观看| 国产91精品露脸国语对白| 亚洲国产成人午夜在线一区| 91一区二区在线观看| 午夜欧美电影在线观看| 日韩欧美国产午夜精品| 国产成a人亚洲精| 亚洲午夜电影在线| 久久久久久久久久久99999| 91色在线porny| 蜜乳av一区二区| 国产精品女主播av| 欧美一区中文字幕| 色综合天天综合网天天狠天天| 男人的天堂亚洲一区| 亚洲人精品午夜| 精品噜噜噜噜久久久久久久久试看| 成人美女在线观看| 国产一区二区按摩在线观看| 亚洲精品免费在线播放| 国产色一区二区| 日韩欧美卡一卡二| 日本高清无吗v一区| 丰满白嫩尤物一区二区| 精品一区二区三区视频在线观看| 国产精品网站在线| 久久久99精品久久| 久久久综合精品| 日韩一区二区三区电影在线观看 | 午夜婷婷国产麻豆精品| 美女www一区二区| 一区二区三区欧美日韩| 欧美高清在线精品一区| 国产网站一区二区| 精品久久久久久久久久久久包黑料| 欧美一级黄色录像| 日韩精品中文字幕在线不卡尤物| 日韩亚洲欧美在线观看| 久久久久久久久久久久久久久99| 亚洲国产成人一区二区三区| 国产精品免费视频一区| 亚洲自拍欧美精品| 日本一区中文字幕| 春色校园综合激情亚洲| 99riav久久精品riav| 欧美日韩一二三区| 欧美不卡123| 亚洲免费观看高清完整| 免费在线欧美视频| 成人av在线网站| 欧美男男青年gay1069videost| ww久久中文字幕| 亚洲永久精品国产| 国内精品免费**视频| 在线亚洲高清视频| 国产人妖乱国产精品人妖| 欧美精品一区二区三区在线播放| 69堂成人精品免费视频| 日韩美女天天操| 久久97超碰色| 久久免费视频色| 99久久婷婷国产综合精品电影| 蜜桃精品视频在线观看| 99视频精品在线| 亚洲综合免费观看高清完整版 | 精品久久久久香蕉网| 美国精品在线观看| 久久精品人人做| 成人精品国产免费网站| 亚洲精品免费在线观看| 欧美日韩久久久| 秋霞电影网一区二区| 欧美精品第1页| 精品一区二区三区在线观看国产| 欧美一区二区精品在线| 麻豆国产91在线播放| 日韩精品一区二区三区在线观看| 韩国三级中文字幕hd久久精品| 久久久久久久精| 在线视频综合导航| 三级一区在线视频先锋 | 欧美国产日产图区| 99久久精品费精品国产一区二区| 亚洲女同ⅹxx女同tv| 欧美日韩精品是欧美日韩精品| 日韩av电影一区| 国产精品系列在线| 欧美日韩精品是欧美日韩精品| 麻豆国产欧美日韩综合精品二区| 欧美—级在线免费片| 日本韩国欧美一区| 精品综合免费视频观看| 国产精品三级视频| 91精品国产色综合久久不卡蜜臀| 经典三级视频一区| 亚洲天堂免费看| 欧美另类一区二区三区| 国产iv一区二区三区| 亚洲一区二区欧美日韩| 精品国产区一区| 91精品国产全国免费观看| 丁香六月综合激情| 亚洲摸摸操操av| 欧美国产精品中文字幕| 欧美一二三四区在线| 欧美日韩国产一级二级| 91一区一区三区| 成人丝袜视频网| 国产精品一区专区| 久久99精品国产.久久久久| 亚洲综合色丁香婷婷六月图片| 国产片一区二区三区| 国产丝袜欧美中文另类| 亚洲精品在线免费观看视频| 欧美精品在线一区二区| 在线不卡中文字幕播放| 色综合久久综合网欧美综合网| 国产精品一级片| 白白色 亚洲乱淫| 99久久99久久综合| 99久久精品免费看国产| 成人h版在线观看| 99久久精品情趣| 欧美日韩卡一卡二| 日韩一区二区三免费高清| 欧美成人精品1314www| 亚洲高清免费视频| 欧美日韩aaaaaa|