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

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

?? sja1000p.cpp

?? windows ce 下 can總線驅動源碼
?? CPP
字號:
/* sja1000.c * Linux CAN-bus device driver. * Written by Arnaud Westenberg email:arnaud@wanadoo.nl * This software is released under the GPL-License. * Version 0.6 18 Sept 2000 * Changed for PeliCan mode SJA1000 by Tomasz Motylewski (BFAD GmbH) * T.Motylewski@bfad.de */#include <windows.h>#include <windef.h>#include <types.h>#include <excpt.h>#include <tchar.h>#include <cardserv.h>#include <cardapi.h>#include <tuple.h>#include <devload.h>#include <diskio.h>#include <nkintr.h>#include <oalintr.h>#include <windev.h>#include <memory.h>#include <linklist.h>#include <pegdser.h>#include <pm.h>#include "sja1000p.h" int baudrate=0;int CLOCK = 24000000; // Chip CLOCK in Hzstatic volatile CAN_ADDR*			m_pCanAddr = NULL;static void Delay(DWORD dwMSecs) {	#define MSEC_DELAY_SCALER	0x2	volatile DWORD dwScaledSecs = (dwMSecs * MSEC_DELAY_SCALER);	while (dwScaledSecs)	{		dwScaledSecs--;	}}int CanP_VirtualAlloc(){	RETAILMSG(1, (TEXT("CAN:: CanVirtualAlloc++ \r\n") ));	m_pCanAddr = ( volatile CAN_ADDR *)VirtualAlloc(0, sizeof(CAN_ADDR), MEM_RESERVE, PAGE_NOACCESS);	if(m_pCanAddr == NULL) 	{		RETAILMSG (1,(TEXT("CAN:: CanVirtualAlloc m_pCanAddr : VirtualAlloc failed!\r\n")));		goto error_return;	}	else 	{		if(!VirtualCopy((PVOID)m_pCanAddr, (PVOID)(SJA1000_BASE), sizeof(CAN_ADDR), PAGE_READWRITE|PAGE_NOCACHE )) 		{			RETAILMSG(1,(TEXT("CAN:: CanVirtualAlloc m_pCanAddr : VirtualCopy failed!\r\n")));			goto error_return;		}	}	RETAILMSG(1, (TEXT("CAN::  m_pCanAddr  %x\r\n"), m_pCanAddr));		RETAILMSG(1,(TEXT("CAN:: CanVirtualAlloc-- \r\n")));		return TRUE;error_return:	if ( m_pCanAddr )		VirtualFree((PVOID)m_pCanAddr, 0, MEM_RELEASE);		m_pCanAddr		= NULL;	return 0;	} unsigned can_read_reg( unsigned short reg ){    m_pCanAddr->byteAddr  = reg;                   //訪問地址指向控制寄存器    return  m_pCanAddr->byteData;                      //保存原始值   }; void can_write_reg(unsigned char data, unsigned short reg ){	m_pCanAddr->byteAddr  = reg;                   //訪問地址指向控制寄存器    m_pCanAddr->byteData  = data;                      //保存原始值};// Enter reset mode.int sja1000p_enable_configuration( ){	int i=0;	unsigned int  flags;	flags=can_read_reg( SJAMOD);	while ((!(flags & MOD_RM)) && (i<=10)) {		can_write_reg( MOD_RM, SJAMOD);// TODO: chinfigurable MOD_AFM (32/16 bit acceptance filter)// config MOD_LOM (listen only)		Delay(10);		i++;		flags=can_read_reg( SJAMOD);	}	if (i>=10) {		RETAILMSG(1,(TEXT("Reset error\n")));				return -1;	}	return 0;}// Quit reset mode.int sja1000p_disable_configuration( ){	int i=0;	unsigned int  flags;	flags=can_read_reg( SJAMOD);	while ( (flags & MOD_RM) && (i<=10) ) {		can_write_reg(  0, SJAMOD);// TODO: chinfigurable MOD_AFM (32/16 bit acceptance filter)// config MOD_LOM (listen only)		Delay(10);		i++;		flags=can_read_reg(  SJAMOD);	}	if (i>=10) {		RETAILMSG(1,(TEXT("Error leaving reset status\n")));		return -1;	}	return 0;}/************************************  ACR==0AAH,AMR==00H  BTR0==C2H,BTR1==3aH  OC : 0xd9 為測試模式。 0xda 為正常工作模式  CDR=48H  ************************************************/int sja1000p_chip_config( unsigned int uCDR, unsigned int  uOCR,			  unsigned int uBTR0, unsigned int  uBTR1, 			  unsigned int uACR,  unsigned int  uAMR ){	if (sja1000p_enable_configuration())		return -1;		can_write_reg( uCDR, SJACDR); 	can_write_reg( uOCR,SJAOCR); 	sja1000p_set_btregs( uBTR0, uBTR1 );	if (sja1000p_extended_mask( uACR, uAMR))		return -1;		/* Enable hardware interrupts */	can_write_reg(  ENABLE_INTERRUPTS, SJAIER); 	sja1000p_disable_configuration();		return 0;}int sja1000p_set_cdr_ocrregs( unsigned int uCDR, unsigned int  uOCR){     if (sja1000p_enable_configuration())		return -1;	can_write_reg( uCDR, SJACDR); 	can_write_reg( uOCR,SJAOCR);       sja1000p_disable_configuration();  	}	// Config  ACR, AMR registor.int sja1000p_extended_mask(  unsigned long code, unsigned  long mask){	int i;	if (sja1000p_enable_configuration())		return -1;// LSB to +3, MSB to +0		for(i=SJA_PeliCAN_AC_LEN; --i>=0;) {		can_write_reg( code&0xff,SJAACR0+i);		can_write_reg( mask&0xff,SJAAMR0+i);		code >>= 8;		mask >>= 8;	}	sja1000p_disable_configuration();	return 0;}/* Set communication parameters. * param rate baud rate in Hz * param CLOCK frequency of sja1000 CLOCK in Hz (ISA osc is 14318000) * param sjw synchronization jump width (0-3) prescaled CLOCK cycles * param sampl_pt sample point in % (0-100) sets (TSEG1+1)/(TSEG1+TSEG2+2) ratio * param flags fields BTR1_SAM, OCMODE, OCPOL, OCTP, OCTN, CLK_OFF, CBP */int sja1000p_baud_rate( int rate, int sjw, int sampl_pt, int flags){	int best_error = 1000000000, error;	int best_tseg=0, best_brp=0, best_rate=0, brp=0;	int tseg=0, tseg1=0, tseg2=0;		if (sja1000p_enable_configuration())		return -1;	CLOCK /=2;	/* tseg even = round down, odd = round up */	for (tseg=(0+0+2)*2; tseg<=(MAX_TSEG2+MAX_TSEG1+2)*2+1; tseg++) {		brp = CLOCK/((1+tseg/2)*rate)+tseg%2;		if (brp == 0 || brp > 64)			continue;		error = rate - CLOCK/(brp*(1+tseg/2));		if (error < 0)			error = -error;		if (error <= best_error) {			best_error = error;			best_tseg = tseg/2;			best_brp = brp-1;			best_rate = CLOCK/(brp*(1+tseg/2));		}	}	if (best_error && (rate/best_error < 10)) {		RETAILMSG(1,(TEXT("baud rate %d is not possible with %XHz CLOCK\n")),								rate, 2*CLOCK);		RETAILMSG(1,(TEXT("%d bps. brp=%d, best_tseg=%d, tseg1=%d, tseg2=%d\n")),				best_rate, best_brp, best_tseg, tseg1, tseg2);		return -1;	}	tseg2 = best_tseg-(sampl_pt*(best_tseg+1))/100;	if (tseg2 < 0)		tseg2 = 0;	if (tseg2 > MAX_TSEG2)		tseg2 = MAX_TSEG2;	tseg1 = best_tseg-tseg2-2;	if (tseg1>MAX_TSEG1) {		tseg1 = MAX_TSEG1;		tseg2 = best_tseg-tseg1-2;	}	RETAILMSG(1,(TEXT("Setting %d bps.\n")), best_rate);	RETAILMSG(1,(TEXT("brp=%d, best_tseg=%d, tseg1=%d, tseg2=%d, sampl_pt=%d\n")),					best_brp, best_tseg, tseg1, tseg2,					(100*(best_tseg-tseg2)/(best_tseg+1)));	can_write_reg(  sjw<<6 | best_brp, SJABTR0);	can_write_reg(  ((flags & BTR1_SAM) != 0)<<7 | (tseg2<<4) 					| tseg1, SJABTR1);	sja1000p_disable_configuration();	return 0;}int sja1000p_set_btregs( unsigned int btr0,  unsigned int btr1){	if (sja1000p_enable_configuration())		return -1;	can_write_reg( btr0, SJABTR0);	can_write_reg( btr1, SJABTR1);	sja1000p_disable_configuration();	return 0;}int sja1000p_start_chip( ){	unsigned int  flags;	flags = can_read_reg(  SJAMOD) & (MOD_LOM|MOD_STM|MOD_AFM|MOD_SM);	can_write_reg( flags, SJAMOD);	return 0;}int sja1000p_stop_chip( ){	unsigned int  flags;	flags = can_read_reg(  SJAMOD) & (MOD_LOM|MOD_STM|MOD_AFM|MOD_SM);	can_write_reg( flags|MOD_RM, SJAMOD);	return 0;} int    peli_DATA_RECEIVE( RXFIFO& rxfifo)// 讀寫函數都有問題,應該判斷是standard幀還是extended幀才能知道數據真正的長度 { 	   int i = 0; 	   BYTE byReg1 = 0; 	      unsigned  char  TempCount;                                                //訪問地址指向狀態寄存器   if((can_read_reg(SJASR)&0x01)==0)               //判斷報文是否有效  這個應該是判斷接受緩沖區是否為空 by黎科峰   {   	RETAILMSG(1,(TEXT("SJA1K:: BCAN_DATA_RECEIVE-- no data error \r\n")));        return 1;   }      	for( i = 0; i <= 12; i++)	{	     rxfifo.reg[i] = can_read_reg( 16+ i );		     RETAILMSG(1, (TEXT(" TX buffer reg%x = %x\r\n"), i+16, rxfifo.reg[i] ));	     	}       //    can_write_reg( CMR_RRB,SJACMR );	        RETAILMSG(1,(TEXT("SJA1K:: BCAN_DATA_RECEIVE-- ok \r\n")));   return  0; }  int  peli_DATA_WRITE(unsigned int *SendDataBuf) {   unsigned  char  TempCount;   int i = 0;   	   /* and leave Reset Mode */ 		   sja1000p_disable_configuration();    if(( can_read_reg(SJASR)&0x08) == 0)         //判斷上次發送是否完成   {   	RETAILMSG(1,(TEXT("SJA1K:: BCAN_DATA_WRITE-- not complete error \r\n")));    return	1;   }     if((can_read_reg(SJASR)&0x04)==0)          //判斷發送緩沖區是否鎖定   {   	RETAILMSG(1,(TEXT("SJA1K:: BCAN_DATA_WRITE--lock error \r\n")));     return	1;   }         if((SendDataBuf[0]&0x40)==0)         //判斷RTR,從而得出是數據幀還是遠程幀   {      TempCount =(SendDataBuf[0]&0x0f) + 5; //輸入數據幀   }   else   {     TempCount =5;                     //遠程幀   }     //  memcpy(m_pCanAddr->byteData,SendDataBuf,TempCount);    for ( i = 0; i < TempCount; i++)   {   	can_write_reg(  SendDataBuf[i],SJAFRM + i);    }       RETAILMSG(1, (TEXT("CAN::  SendDatacount  %x\r\n"), TempCount));        can_write_reg( CMR_TR,SJACMR );	      	  RETAILMSG(1,(TEXT("SJA1K:: BCAN_DATA_WRITE-- ok \r\n")));   return 0;}void TestReadAllRegs(  ){	int i = 0;	unsigned int ireg = 0;	RETAILMSG(1,(TEXT(" TestReadAllRegs++ \r\n")));			for( i = 0; i <= 0x1f; i++)	{	    ireg = can_read_reg ( i );	    RETAILMSG(1, (TEXT(" Reg%x = %x\r\n"),i, ireg ));	}	RETAILMSG(1,(TEXT(" TestReadAllRegs-- \r\n")));}void initcan(  ){		BYTE byCDR,byOCR,byBTR0,byBTR1,byMOD,byCMR;	unsigned regtmp = 0, RegInt = 0, Reg1 = 0, Reg2 = 0;				RETAILMSG(1,(TEXT(" SlefTest ++ \r\n"))); 	RETAILMSG(1, (TEXT(" Hardware reset status \r\n")));	TestReadAllRegs();  	//	byCDR = 0xC8,byOCR= 0xda,byBTR0 = 0xc2, byBTR1 = 0x3a,byMOD = MOD_STM,byCMR = CMR_SRR;	        				if (sja1000p_enable_configuration())		return  ;	 	// PeliCAN Mode 	can_write_reg(  0xC8, SJACDR); 				can_write_reg(  0x1a, SJAOCR);	can_write_reg(  0x18, SJABTR0);  			can_write_reg(  0xef, SJABTR1);				Delay(10);		can_write_reg( 0x00, 16); 	can_write_reg( 0x00, 17); 	can_write_reg( 0x00, 18); 	can_write_reg( 0x00, 19); 		can_write_reg( 0xff, 20); 	can_write_reg( 0xff, 21); 		can_write_reg( 0xff, 22); 	can_write_reg( 0xff, 23); 			Sleep(5);	RETAILMSG(1, (TEXT(" reset status After Setting \r\n")));	TestReadAllRegs();		  		 		sja1000p_disable_configuration();					 	 //Enter Self Test Mode  	can_write_reg( MOD_AFM, SJAMOD);				can_write_reg(  ENABLE_INTERRUPTS, SJAIER);			can_read_reg ( SJAIR );   	RETAILMSG(1, (TEXT(" Operate status init \r\n"))); 	TestReadAllRegs();   				for( regtmp = 0; regtmp <= 12; regtmp++)	{	     Reg2 = can_read_reg( 96+ regtmp );		     RETAILMSG(1, (TEXT(" TX buffer reg%x = %x\r\n"), regtmp+96, Reg2));	     	}		RETAILMSG(1,(TEXT(" SlefTest-- \r\n")));		}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看亚洲专区| 日本高清视频一区二区| 偷拍一区二区三区四区| 亚洲综合在线五月| 亚洲精品日韩一| 亚洲欧美一区二区三区久本道91| 国产欧美日韩三级| 亚洲国产高清不卡| 亚洲图片欧美激情| 亚洲综合一区二区三区| 亚洲v精品v日韩v欧美v专区 | 麻豆91免费看| 另类小说欧美激情| 国产精品系列在线观看| 国产高清不卡二三区| 9l国产精品久久久久麻豆| 精品国产99国产精品| 久久久久一区二区三区四区| 国产精品伦一区二区三级视频| 欧美精彩视频一区二区三区| 亚洲啪啪综合av一区二区三区| 亚洲自拍偷拍图区| 蜜桃av一区二区三区| 成人伦理片在线| 在线观看区一区二| 日韩欧美高清在线| 中文字幕一区二区三区四区| 亚洲国产乱码最新视频| 琪琪一区二区三区| 成人爱爱电影网址| 欧美丰满美乳xxx高潮www| 国产夜色精品一区二区av| 亚洲人成精品久久久久| 美女视频黄a大片欧美| 成人精品视频.| 欧美日韩国产高清一区二区| 久久久影视传媒| 一区二区三区成人| 欧美日韩免费视频| 欧美大片免费久久精品三p| 国产精品久久毛片av大全日韩| 亚洲成av人片在线观看无码| 国产成人免费视频网站| 欧美精品免费视频| 综合久久久久久| 国产一区 二区 三区一级| 欧美色欧美亚洲另类二区| 国产清纯在线一区二区www| 婷婷综合另类小说色区| 91在线观看免费视频| 欧美xxxxxxxx| 午夜精品视频一区| 97se亚洲国产综合自在线观| 精品国产亚洲一区二区三区在线观看| 1000精品久久久久久久久| 久久激情综合网| 欧美日韩国产乱码电影| 成人欧美一区二区三区白人 | 欧美国产日韩在线观看| 日韩一区欧美二区| 欧美系列亚洲系列| 亚洲精选在线视频| 成人精品视频.| 国产视频一区二区在线观看| 麻豆精品新av中文字幕| 欧美日韩和欧美的一区二区| 亚洲视频每日更新| 99精品一区二区三区| 中文字幕精品三区| 国产成人aaaa| 久久久久国产精品麻豆ai换脸 | 色综合久久久久网| 中文字幕一区二区三| 国产精品1区2区| 久久精品在线观看| 国产成人精品影视| 国产欧美精品一区aⅴ影院| 国产原创一区二区| 久久久亚洲精品石原莉奈 | 国产精品久久久久久久蜜臀| 国产精品一二三四区| 久久人人爽人人爽| 国产成人亚洲综合a∨婷婷图片| 26uuu国产一区二区三区| 国内精品写真在线观看| 国产欧美一区二区三区在线老狼| 国产精品99久久久久久久女警| 久久久久国产精品厨房| 成人高清免费在线播放| 亚洲伦理在线免费看| 欧美三级电影在线看| 三级亚洲高清视频| 欧美sm美女调教| 成人中文字幕电影| 亚洲黄网站在线观看| 欧美精品丝袜中出| 久久www免费人成看片高清| 国产亚洲精品精华液| 91一区在线观看| 青草av.久久免费一区| 久久久亚洲高清| 91丨porny丨国产| 日本不卡一区二区三区| 久久久精品蜜桃| 91女神在线视频| 久久精品国产99国产精品| 中文字幕不卡一区| 欧美日韩一区二区在线观看| 久久成人18免费观看| 中文字幕亚洲不卡| 日韩一区二区三区精品视频| www.欧美亚洲| 免费在线一区观看| 亚洲人精品午夜| 欧美xxxx在线观看| 欧美视频一区二区三区在线观看| 国产一区二区三区四区在线观看| 亚洲免费大片在线观看| 精品国产髙清在线看国产毛片| av一二三不卡影片| 激情五月激情综合网| 一个色在线综合| 国产欧美日韩视频在线观看| 337p亚洲精品色噜噜噜| 91浏览器打开| 成人性生交大片免费看视频在线| 视频一区二区中文字幕| 亚洲色图.com| 国产日韩欧美a| 欧美不卡一区二区三区四区| 欧美专区在线观看一区| www.欧美日韩| 成人av中文字幕| 国产乱人伦偷精品视频不卡| 日本午夜一区二区| 亚洲国产精品久久人人爱蜜臀| 国产精品系列在线| 久久久777精品电影网影网| 91精品国产综合久久精品| 欧美特级限制片免费在线观看| 99国产精品国产精品毛片| 国产精品一区二区久久不卡| 蜜臀av亚洲一区中文字幕| 亚洲bt欧美bt精品777| 一区二区三区四区乱视频| 国产精品毛片a∨一区二区三区| 久久久99久久| 久久精品男人的天堂| 久久尤物电影视频在线观看| 精品国一区二区三区| 欧美电视剧免费观看| 欧美一区二区精美| 日韩久久久精品| 日韩欧美一区中文| 精品精品国产高清一毛片一天堂| 日韩精品一区二区三区四区 | 一区二区视频在线| 中文字幕中文在线不卡住| 国产精品午夜久久| 国产精品每日更新在线播放网址| 中文字幕电影一区| 亚洲欧美国产77777| 一区二区在线电影| 日韩制服丝袜av| 麻豆精品久久精品色综合| 国产一区美女在线| 成人激情电影免费在线观看| 91亚洲精品久久久蜜桃| 在线观看日韩毛片| 日韩精品一区二区在线观看| 久久免费看少妇高潮| 中文字幕中文字幕在线一区| 亚洲精品乱码久久久久久| 亚洲成av人片| 韩国女主播一区| 99r国产精品| 欧美日韩国产一级片| 精品福利视频一区二区三区| 日本一区二区三区久久久久久久久不| 成人免费在线视频| 婷婷久久综合九色国产成人| 国内久久婷婷综合| 91亚洲精品乱码久久久久久蜜桃| 777亚洲妇女| 欧美国产精品中文字幕| 午夜视频在线观看一区二区| 精品一区在线看| 91美女在线观看| 亚洲精品一区二区三区福利| 亚洲欧洲日韩在线| 美腿丝袜在线亚洲一区| 99国产精品久久久久久久久久 | 国产精品久久久99| 秋霞影院一区二区| av网站一区二区三区| 日韩欧美国产三级电影视频| 综合欧美亚洲日本| 激情综合网av| 欧美日韩一区不卡| 中文字幕亚洲一区二区av在线|