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

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

?? sja1000.c

?? 可以中斷方式發送接收來自其他節點的報文
?? C
字號:
#include "upio.h"
#include "sja1000.h"
#include "csp.h"
#include "Dpram.h"


#define Debug_SJA1000

#ifdef Debug_SJA1000
#define GIC	0xFFFFF000
#define GIC_IECR 0x120
#define GIC_EOICR 0x130
#define INTNUM	28 //sja0對應GIC的28號
#endif


#define SJA1000_ALE_H		ALE_H()
#define SJA1000_ALE_L		ALE_L()

#define SJA1000_RD_H		RD_H()
#define SJA1000_RD_L		RD_L()

#define SJA1000_WR_H		WR_H()
#define SJA1000_WR_L		WR_L()

#define SJA1000_RST_H		RST_H()
#define SJA1000_RST_L		RST_L()

#define SJA1000_CS0_H		CS0_H()
#define SJA1000_CS0_L		CS0_L()

#define SJA1000_CS1_H		CS1_H()
#define SJA1000_CS1_L		CS1_L()


extern void DRIVER_AsmSJAInterruptHandler(void);




static int gnIntError = 0;

static void MyDelay(int _delay){
	while(_delay>0)
		_delay -= 4;
}

void SJA1000_IO_CS_Init( void ) 
{
	unsigned short k;
	InitSJAPio();
	SJA1000_ALE_L ;		//SI put 0
	SJA1000_RD_H;		//SCK put 0
	SJA1000_WR_H;	
	SJA1000_RST_H;
	SJA1000_CS0_H;
	MyDelay(300*NS_Cycle); //延時至少300ns
}


unsigned char SJA1000Read(unsigned char Address)
{
	unsigned short k;
	unsigned char data;
	
	SJA1000_ALE_H;
	UPIO_SetData(Address);
	MyDelay(8*NS_Cycle+1);  //延時至少8ns,Add建立到ALE=0,8ns,ALE碼沖寬度8ns
	SJA1000_ALE_L;
	MyDelay(10*NS_Cycle+1);  //延時至少10ns,ALE=0到RD=0,10ns,并且AD上地址保持至少2ns
	SJA1000_CS0_L;
	SJA1000_RD_L;
	MyDelay(40*NS_Cycle+1); //延時至少40ns,RD從0到1,40ns	
	UPIO_GetData(&data);
	//MyDelay(10*NS_Cycle+1); //延時至少40ns,RD從0到1,40ns	
	SJA1000_RD_H;
	SJA1000_CS0_H;
	SJA1000_ALE_H;
	
	return data;
}


//功能:寫一個字節,直接尋址
//傳遞參數:地址,寫數據
//返回參數:無
void SJA1000Write(unsigned char Address,unsigned char value)
{
	SJA1000_ALE_H;
	UPIO_SetData(Address);
	MyDelay(8*NS_Cycle+1);  //延時至少8ns,Add建立到ALE=0,8ns,ALE碼沖寬度8ns
	SJA1000_ALE_L;
	MyDelay(10*NS_Cycle+1); //延時至少10ns,ALE=0到WR=0,10ns,并且AD上地址保持至少2ns
	SJA1000_CS0_L;
	SJA1000_WR_L;
	MyDelay(10*NS_Cycle+1); //延時至少20ns,WR從0到1,20ns
	UPIO_SetData(value);	
	MyDelay(20*NS_Cycle+1); //延時至少20ns,WR從0到1,20ns,數據建立到WR=1,8ns
	SJA1000_WR_H;
	SJA1000_CS0_H;
	MyDelay(15*NS_Cycle+1); //延時至少15ns,data保持8ns,WR=1到下一次ALE=1,15ns
	SJA1000_ALE_H;
}

void CanSetBaudrate(unsigned int baud)
{
	int i;
	switch(baud)
	{
		case 100:
			SJA1000Write(REG_BTR0,0x04);
			SJA1000Write(REG_BTR1,0x3a);
			break;
		case 125:
			SJA1000Write(REG_BTR0,0x03);
			SJA1000Write(REG_BTR1,0x3a);
			break;
		case 200:
			SJA1000Write(REG_BTR0,0x03);
			SJA1000Write(REG_BTR1,0x25);
			break;
		case 250:
			SJA1000Write(REG_BTR0,0x01);
			SJA1000Write(REG_BTR1,0x3c);
			break;
		case 400:
			SJA1000Write(REG_BTR0,0x01);
			SJA1000Write(REG_BTR1,0x25);
			break;
		case 500:
			SJA1000Write(REG_BTR0,0x00);
			SJA1000Write(REG_BTR1,0x49);
			break;

		case 800:
			SJA1000Write(REG_BTR0,0x00);
			SJA1000Write(REG_BTR1,0x25);
			break;
		case 1000:
			SJA1000Write(REG_BTR0,0x00);
			SJA1000Write(REG_BTR1,0x23);
			break;
		default:
			//default baud rate equal 500k bit/s
			SJA1000Write(REG_BTR0,0x00);
			SJA1000Write(REG_BTR1,0x49);
			break;
	}
}

int SJA1000_Reset(unsigned int bandrate)
{
	unsigned int acr,amr;
	//unsigned char tmp;
	
	acr = 0;                  
	amr = 0xffffffff;
	//1.復位模式
	//tmp = (SJA1000Read(REG_MR);
	
	SJA1000Write(REG_MR, BIT_RM);
	if(!(SJA1000Read(REG_MR) & 0x01))
		return -1;

		
	//1.1設置時鐘分頻CDR,pelican模式
	SJA1000Write(REG_CDR,SJA1000Read(REG_CDR)|0x80);
	

	
	//1.3設置AMR,ACR。acr0對應標識符的MSB
	SJA1000Write((unsigned char)REG_ACR0,(volatile unsigned char)(acr>>24));		//驗收碼寄存器0
	SJA1000Write((unsigned char)(REG_ACR0+1),(volatile unsigned char)(acr>>16));		//驗收碼寄存器0
	SJA1000Write((unsigned char)(REG_ACR0+2),(volatile unsigned char)(acr>>8));		//驗收碼寄存器0
	SJA1000Write((unsigned char)( REG_ACR0+3),(volatile unsigned char)acr);		//驗收碼寄存器0
	SJA1000Write((unsigned char)REG_AMR0,(volatile unsigned char)(amr>>24));		//驗收屏蔽寄存器0
	SJA1000Write((unsigned char)(REG_AMR0+1),(volatile unsigned char)(amr>>16));		//驗收屏蔽寄存器0
	SJA1000Write((unsigned char)(REG_AMR0+2),(volatile unsigned char)(amr>>8));		//驗收屏蔽寄存器0
	SJA1000Write((unsigned char)(REG_AMR0+3),(volatile unsigned char)amr);		//驗收屏蔽寄存器0	

	//1.2設置總線時序寄存器
	CanSetBaudrate(bandrate);	//設置波特率	
	
	//1.4設置輸出控制寄存器
	SJA1000Write(REG_OC,0xfa);//??
	
	//2.使能接收、發送、出錯、數據溢出、喚醒中斷
	SJA1000Write(REG_IER, DIS_IRQ);//先禁止所有中斷
	//SJA1000Write(REG_IER, BIT_RIE|BIT_TIE|BIT_EIE|BIT_DOIE|BIT_WUIE);
	SJA1000Write(REG_IER, BIT_RIE|BIT_EIE|BIT_DOIE|BIT_WUIE);//沒有發送中斷
	SJA1000Read(REG_IER);
	
	//3.正常模式
	//SJA1000Write(REG_MR,0x0C);//單濾波,正常,自檢測
	SJA1000Write(REG_MR,0x00);//雙濾波,正常
	if(SJA1000Read(REG_MR) & 0x01)
		return -1;
	else
	    0; 
}

void Init_SJA1000(unsigned int bandrate)
{
	unsigned char i,j,a;

	SJA1000_IO_CS_Init() ;
	SJA1000_Reset(bandrate);
	//設置GIC的相關
	
	*(volatile int *)(GIC+4*INTNUM) = 0x01;//模式寄存器,低電平觸發,優先級1,最低
	*(volatile int *)(GIC+4*32+4*INTNUM) = (int)DRIVER_AsmSJAInterruptHandler;//中斷處理函數
	*(volatile int *)(GIC+GIC_IECR) = 1<<INTNUM;//中斷使能
	
	//CSP_GICConfigInterrupt(INTNUM, 0x61, DRIVER_AsmSJAInterruptHandler);
}

void SJA1000_TX(CanMessageStruct * msg)
{
	unsigned char x,i;
	unsigned char tmp;
	while(!(SJA1000Read(REG_SR)&BIT_TBS));	
	x = 0;
	if(msg->Rtr)
	{
		x |= 0x40;
	}
	x |= msg->DataLengthCode;
	if(msg->IsExt){
		//是擴展楨
		x |= 0x80;
		SJA1000Write(16,x);
		x = (unsigned char)((msg->Identifier) >> 21);
		SJA1000Write(17,x);						//寫標示符1
		x = (unsigned char)((msg->Identifier) >> 13);
		SJA1000Write(18,x);						//寫標示符2
		x = (unsigned char)((msg->Identifier) >> 5);
		SJA1000Write(19,x);						//寫標示符3
		x = (unsigned char)((msg->Identifier) & 0x1F);
		x <<= 3;
		SJA1000Write(20,x);						//寫標示符4
		for(i = 0; i < msg->DataLengthCode; i++){
			SJA1000Write(21+i,msg->Data[i]);			//寫數據
		}
	}
	else{
		//標準楨
		SJA1000Write(16,x);
		x = (unsigned char)((msg->Identifier) >> 3);
		SJA1000Write(17,x);						//寫標示符1
		x = (unsigned char)((msg->Identifier) & 0x07);
		x <<= 5;
		SJA1000Write(18,x);						//寫標示符2
		for(i = 0; i < msg->DataLengthCode; i++){
			SJA1000Write(19+i,msg->Data[i]);			//寫數據
		}
	}
	SJA1000Write(REG_CMR,BIT_TR);						//請求發送
}

void SJA1000_RX(CanMessageStruct * msg)
{
	unsigned char x,i;
	while(!(SJA1000Read(REG_SR)&BIT_RBS));
		//return;//沒有報文
	
	
	x = SJA1000Read(16);
	msg->IsExt = (x & 0x80) ? 1:0;//是否擴展楨
	msg->Rtr = (x & 0x40) ? 1:0;//是否遠程楨
	msg->DataLengthCode = x & 0x0f;
	
	if(msg->IsExt){
		x = SJA1000Read(17);		
		msg->Identifier = ((unsigned int)x)<< 21;
		x = SJA1000Read(18);	
		msg->Identifier |= ((unsigned int)x) << 13;		
		x = SJA1000Read(19);	
		msg->Identifier |= ((unsigned int)x) << 5;		
		x = SJA1000Read(20);	
		msg->Identifier |= ((unsigned int)x) >> 3;
		for(i = 0; i < msg->DataLengthCode; i ++)
		{
			msg->Data[i] = SJA1000Read(21+i);			//讀數據
		}
	}
	else{
		x = SJA1000Read(17);		
		msg->Identifier = ((unsigned int)x)<< 3;
		x = SJA1000Read(18);	
		msg->Identifier |= ((unsigned int)x) >> 5;		
		for(i = 0; i < msg->DataLengthCode; i ++)
		{
			msg->Data[i] = SJA1000Read(19+i);			//讀數據
		}	
	}	
	SJA1000Write(REG_CMR,BIT_RR);//釋放接收緩沖區,自動清除中斷位
}

void SJA_isr(void)
{
	unsigned char x = 0, nStatus = 0;
	int i = 0;
	static int count = 0;
	int num = 0;
	CanMessageStruct msg2;


	x = SJA1000Read(REG_IR);//get Interrupt source
	if(x&BIT_RI){//Receive Interrupt
		//SJA1000_RX(&msg2);
		//SJA1000_TX(&msg1);
		SJA1000_RX(&msg2);
		WriteRx(&msg2);

	}
	if(x&BIT_TI){
		;	
		
	}
	if(x&BIT_EI){
		SJA1000_Reset(500);
	}
	if(x&BIT_DOI){
		;	
	}
	if(x&BIT_WUI){
			;//nWakeNum++;no use now
	}
	*(volatile int *)(GIC+GIC_EOICR) = 1;//訪問這個寄存器通知GIC中斷被處理
}


//測試讀寫時序
void TestTiming(){
	unsigned char i=0;
	char tmp[24];
	SJA1000_IO_CS_Init() ;	
	SJA1000Write(0,1);
	SJA1000Write(REG_CDR,SJA1000Read(REG_CDR)|0x80);
	for(i=1;i<24;i++){
	
		SJA1000Write(i,i+1);
		tmp[i] = SJA1000Read(i);
	
	}
	return;

}

void TsetSJA(void)
{
	int i;
	CanMessageStruct msg1,msg2;
	unsigned char data_write[8]={1,2,3,4,5,6,7,8};
	unsigned char data_read[8] ;
	
	
	Init_SJA1000(500);
	__CLI();
	msg1.Identifier = 0x5a5;
	msg1.Rtr = 0;
	msg1.DataLengthCode = 8;
	for(i=0;i<8;i++)
		msg1.Data[i] = i+1;
	msg1.IsExt = 1;

	
//	SJA1000_TX(&msg1);
 //  	while(1)
//    {
    //	SJA1000Read(REG_IR);
	//SJA1000_TX(&msg1);
	//	SJA1000_RX(&msg2);
		
//	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国成人精品a∨在线观看| 欧美视频一区在线观看| 91蜜桃在线观看| 91精品国产综合久久精品麻豆| 久久综合资源网| 视频一区国产视频| av在线不卡网| 久久久国产精品午夜一区ai换脸| 午夜天堂影视香蕉久久| 91在线观看高清| 久久久久国产精品厨房| 琪琪一区二区三区| 欧美日韩午夜在线| 成人免费在线播放视频| 成人手机电影网| 日韩欧美激情一区| 日本大胆欧美人术艺术动态| 欧美羞羞免费网站| 中文字幕亚洲区| 成人av电影在线观看| 国产午夜精品一区二区三区四区| 久久国产剧场电影| 9191成人精品久久| 亚洲不卡av一区二区三区| 92精品国产成人观看免费 | 亚洲精品免费在线| 国产精品一二二区| 日韩久久久精品| 日本视频免费一区| 91精品在线麻豆| 日韩国产精品大片| 欧美一区二区三区在线观看视频| 日韩高清在线不卡| 欧美一区二区三区在线观看| 免费高清视频精品| 精品理论电影在线| 狠狠狠色丁香婷婷综合激情| 26uuu亚洲| 国产91精品一区二区麻豆网站| 久久久精品日韩欧美| 国产成人精品亚洲日本在线桃色| 欧美国产日韩a欧美在线观看| 高清在线不卡av| 国产精品美女一区二区三区| 色一区在线观看| 亚洲综合免费观看高清完整版在线 | 精品一区二区免费看| 欧美videos中文字幕| 国产米奇在线777精品观看| 国产三级欧美三级| 99久久久精品免费观看国产蜜| 亚洲素人一区二区| 欧美精品日韩综合在线| 久久精品国产澳门| 中文字幕高清一区| 欧美午夜不卡在线观看免费| 亚洲.国产.中文慕字在线| 日韩丝袜美女视频| 懂色av噜噜一区二区三区av| 亚洲精品国产高清久久伦理二区| 欧美一区二区在线观看| 国产大片一区二区| 亚洲香肠在线观看| 久久久精品国产免大香伊| 色综合婷婷久久| 蜜桃久久久久久| ...av二区三区久久精品| 欧美视频中文一区二区三区在线观看| 日韩影院精彩在线| 国产精品美女一区二区三区| 91精品蜜臀在线一区尤物| 国产一区二区三区在线观看免费 | 99国产一区二区三精品乱码| 日韩av网站在线观看| 国产欧美日韩在线视频| 欧美精品精品一区| 成人精品免费看| 美国精品在线观看| 国产精品伦理一区二区| 欧美一区二区三区性视频| 成人av午夜电影| 国产一区不卡精品| 婷婷中文字幕一区三区| 国产目拍亚洲精品99久久精品| 538prom精品视频线放| 99久久er热在这里只有精品66| 久久精品国产久精国产爱| 亚洲永久精品大片| 国产精品天美传媒| 久久影音资源网| 欧美一级午夜免费电影| 色哦色哦哦色天天综合| 福利91精品一区二区三区| 奇米777欧美一区二区| 亚洲国产欧美在线人成| 国产精品国产三级国产有无不卡| 精品剧情在线观看| 9191精品国产综合久久久久久| 91黄色免费版| 91在线视频在线| 99久久99久久精品国产片果冻| 国产美女在线观看一区| 日韩电影一二三区| 亚洲成av人片在线观看| 亚洲激情第一区| 亚洲免费伊人电影| 中文字幕视频一区二区三区久| 国产欧美日韩不卡| 2023国产一二三区日本精品2022| 欧美成人精品二区三区99精品| 欧美一区二区视频在线观看| 欧美日韩久久不卡| 欧美日韩一区 二区 三区 久久精品| 一本色道久久综合狠狠躁的推荐 | 欧美一区二区精品久久911| 欧洲一区在线观看| 91亚洲男人天堂| 色94色欧美sute亚洲线路二| 欧美在线播放高清精品| 欧美三级日韩在线| 欧美日韩一区二区三区在线| 欧美一区二区三区四区在线观看| 欧美一区二区精品在线| 欧美精品一区二区在线播放| 国产日产欧美一区| 国产精品二三区| 亚洲色图19p| 亚洲成a人片综合在线| 秋霞午夜av一区二区三区| 蜜臀av性久久久久蜜臀av麻豆| 免费av网站大全久久| 精品一区二区三区免费| 成人午夜在线播放| 91麻豆国产福利在线观看| 欧美色综合网站| 精品日韩99亚洲| 国产精品网站在线播放| 亚洲综合小说图片| 久久精品国产第一区二区三区| 国产福利91精品一区二区三区| 99综合影院在线| 欧美日韩一区二区在线观看| 久久综合视频网| 一区二区三区鲁丝不卡| 日本不卡视频在线| 成人福利视频在线| 精品视频在线免费观看| 精品欧美一区二区久久| 国产精品毛片a∨一区二区三区| 亚洲成a人v欧美综合天堂下载 | 天堂久久久久va久久久久| 久久99热国产| 日本精品一区二区三区四区的功能| 欧美一区二区高清| 国产精品久久久久aaaa樱花| 日韩福利电影在线| 成人精品视频一区二区三区| 这里只有精品99re| 国产精品萝li| 美国欧美日韩国产在线播放| 一本大道久久a久久综合| 精品久久久久久久久久久院品网| 亚洲色图都市小说| 国产一区二区中文字幕| 欧美日韩免费视频| 亚洲国产精品成人综合| 亚洲福中文字幕伊人影院| 国产成人精品www牛牛影视| 欧美精品久久99| 曰韩精品一区二区| 国产精品一区二区不卡| 7777精品久久久大香线蕉 | 亚洲一区二区精品久久av| 国产成人在线网站| 欧美一区二区三区视频| 亚洲欧美激情在线| 丁香婷婷综合网| 欧美成va人片在线观看| 亚洲国产精品久久不卡毛片| 99久久伊人精品| 中文字幕国产一区二区| 国产一区亚洲一区| 欧美一级一区二区| 香蕉av福利精品导航| 91国偷自产一区二区三区成为亚洲经典| 欧美国产欧美亚州国产日韩mv天天看完整| 日日欢夜夜爽一区| 欧美日韩黄视频| 亚洲成a人片在线观看中文| 在线视频综合导航| 专区另类欧美日韩| 91亚洲永久精品| 中文字幕亚洲欧美在线不卡| 成人av影视在线观看| 中文一区二区完整视频在线观看| 精品一区二区久久| 久久一日本道色综合| 国产精品小仙女| 欧美国产精品一区| eeuss影院一区二区三区|