亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
av亚洲精华国产精华精华| 婷婷丁香激情综合| 成人午夜电影网站| 国产精品久久国产精麻豆99网站| 成人一区在线观看| 亚洲色图.com| 欧美中文字幕一二三区视频| 五月婷婷久久综合| 日韩欧美在线观看一区二区三区| 久久99久久久久久久久久久| 日韩欧美另类在线| 国产成人啪午夜精品网站男同| 国产精品丝袜久久久久久app| 成人av在线播放网址| 亚洲精品日日夜夜| 欧美一区二区三区视频免费 | 一区二区三区四区五区视频在线观看| 色欧美88888久久久久久影院| 天天操天天综合网| 午夜视频久久久久久| 日韩免费高清电影| 成人午夜免费视频| 亚洲综合区在线| 欧美一卡在线观看| 国产不卡视频在线播放| 亚洲观看高清完整版在线观看| 日韩午夜av一区| 波多野结衣欧美| 日韩高清国产一区在线| 中文字幕视频一区| 日韩一级欧美一级| 99re成人精品视频| 久久99九九99精品| 一级做a爱片久久| 久久影院视频免费| 欧美性大战久久久| 成人美女视频在线观看18| 午夜视频在线观看一区二区| 欧美激情在线免费观看| 欧美一区二区在线不卡| 91在线视频18| 国产成人综合在线| 免费av成人在线| 亚洲精品久久久蜜桃| 久久久久久久久一| 欧美日韩在线亚洲一区蜜芽| 成人av手机在线观看| 精品一区二区在线播放| 亚洲成人综合网站| 亚洲三级电影网站| 国产亚洲污的网站| 欧美精品自拍偷拍| 91麻豆福利精品推荐| 国产成人精品影院| 久久99精品久久久久久动态图| 亚洲狠狠爱一区二区三区| 国产精品成人免费| 国产目拍亚洲精品99久久精品| 日韩欧美中文一区二区| 欧美精品日韩一区| 91成人免费网站| 91免费在线视频观看| 国产91精品久久久久久久网曝门| 久久99在线观看| 蜜臀av一区二区在线观看| 日日夜夜精品免费视频| 亚洲一区影音先锋| 亚洲免费高清视频在线| 综合久久久久久| 中文字幕中文字幕在线一区 | 欧美猛男超大videosgay| 91麻豆精品秘密| 91亚洲男人天堂| 成人午夜私人影院| 国产高清成人在线| 国产精品中文字幕一区二区三区| 久久99国产精品免费网站| 日本最新不卡在线| 蜜桃av一区二区在线观看| 日韩精品成人一区二区三区| 丝瓜av网站精品一区二区| 五月婷婷久久综合| 日韩av成人高清| 日韩 欧美一区二区三区| 日本视频免费一区| 麻豆精品在线视频| 国产专区综合网| 粉嫩一区二区三区在线看| caoporn国产一区二区| av电影在线观看不卡 | 91免费国产视频网站| 日本韩国一区二区三区| 欧美午夜宅男影院| 欧美高清视频一二三区| 日韩免费性生活视频播放| 久久综合999| **网站欧美大片在线观看| 亚洲最大成人综合| 天天综合天天做天天综合| 美女一区二区久久| 国产福利一区在线| 色婷婷久久综合| 91精品国产一区二区三区蜜臀| 精品国产一区二区三区久久影院| 国产午夜精品久久久久久免费视 | 麻豆精品蜜桃视频网站| 国产精品88av| 在线视频综合导航| 欧美va天堂va视频va在线| 欧美国产禁国产网站cc| 午夜亚洲福利老司机| 狠狠色狠狠色综合| 色欧美片视频在线观看在线视频| 欧美精品视频www在线观看| 久久久久国产精品人| 一区二区三区波多野结衣在线观看 | 国产视频一区不卡| 一区二区三区久久| 激情偷乱视频一区二区三区| 一本到不卡免费一区二区| 日韩一级免费观看| 国产精品不卡在线观看| 日韩电影免费在线看| 成人免费高清在线观看| 9191成人精品久久| 国产精品久久免费看| 久久精品国产亚洲a| 91成人在线精品| 国产亚洲欧美在线| 天天色 色综合| 91在线观看美女| 国产视频一区在线播放| 琪琪一区二区三区| 一本大道av一区二区在线播放| 久久久久久久久久久99999| 亚洲午夜在线观看视频在线| 成人三级在线视频| 精品久久人人做人人爱| 亚洲成人动漫在线免费观看| 成人av资源网站| 久久久蜜桃精品| 日日夜夜精品视频免费| 欧洲av一区二区嗯嗯嗯啊| 中文字幕精品—区二区四季| 麻豆精品一区二区三区| 欧美久久免费观看| 亚洲激情自拍偷拍| 成人国产视频在线观看| 久久综合资源网| 蜜臀久久99精品久久久久久9 | 一个色在线综合| 成人av在线网| 亚洲国产精品二十页| 国产美女久久久久| 日韩欧美国产不卡| 日韩经典一区二区| 欧美性videosxxxxx| 一区二区欧美国产| 99精品视频在线免费观看| 日本一区二区三级电影在线观看| 久久电影网站中文字幕| 日韩一区二区电影在线| 日本最新不卡在线| 91精品国产乱码| 视频一区视频二区中文| 欧美日韩aaaaa| 香蕉乱码成人久久天堂爱免费| 91国在线观看| 亚洲成人av资源| 欧美久久久久久蜜桃| 秋霞午夜av一区二区三区| 欧美一区二区三区婷婷月色| 免费欧美在线视频| 日韩亚洲欧美成人一区| 免费观看91视频大全| 日韩欧美一区二区久久婷婷| 久久99精品国产.久久久久| 久久品道一品道久久精品| 国产精品一区一区| 国产精品久久久久精k8| 91麻豆成人久久精品二区三区| 亚洲乱码国产乱码精品精98午夜| 91精品91久久久中77777| 亚洲一级二级在线| 欧美精选午夜久久久乱码6080| 麻豆一区二区三| 久久久久久久综合日本| aa级大片欧美| 日韩精品一级中文字幕精品视频免费观看 | av不卡在线播放| 亚洲香蕉伊在人在线观| 日韩一级完整毛片| 国产成人一级电影| 亚洲欧美日韩国产综合在线| 欧美视频日韩视频| 狠狠色丁香婷婷综合| 国产精品久久影院| 欧美在线短视频| 精品亚洲免费视频| 成人免费在线播放视频|