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

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

?? d12.h

?? 使用freescale的DP256B和D12做的CAN轉USB接口板的固件源代碼,現在的CAN分析儀每個至少要5000多,自己實現一個,希望對大家開發CAN轉USB有所幫助.
?? H
?? 第 1 頁 / 共 2 頁
字號:
void Output(UINT addr, UCHAR data)
{	
	if(addr == D12_DATA_HARD)
		D12_A0_0;
	else
		D12_A0_1;	
	
	D12_CMD = data;
}

UINT Input()
{
	D12_A0_0;	
	
	return D12_DATA;
}

//設置地址使能
void D12_SetAddressEnable(UINT bAddress, UCHAR bEnable)
{
	Output(D12_CMD_HARD , 0xD0);//輸出指令
	if(bEnable)
		bAddress |= 0x80;
	
	Output(D12_DATA_HARD , bAddress);//設置地址
}


//設置端點使能
void D12_SetEndpointEnable(UCHAR bEnable)
{
	Output(D12_CMD_HARD , 0xD8);//輸出指令
	
	if(bEnable)
		Output(D12_DATA_HARD , 1);//設置端點允許
	else
		Output(D12_DATA_HARD , 0);//設置端點禁止
}

//模式設置
void D12_SetMode(UCHAR bConfig, UCHAR bClkDiv)
{
	Output(D12_CMD_HARD , 0xF3);//設置模式
	Output(D12_DATA_HARD , bConfig);
	Output(D12_DATA_HARD , bClkDiv);
}

//讀取中斷寄存器
UCHAR D12_ReadInterruptRegister(void)
{
	unsigned int b1;
	unsigned int j;

	Output(D12_CMD_HARD , 0xF4);//讀取中斷寄存器
	b1 = Input();
	j = Input();

	j <<= 8; 
	j = j & 0xFF00;
	b1 = b1 & 0x00FF;
	j += b1;

	return j;
}

//端點選擇
UCHAR D12_SelectEndpoint(UCHAR bEndp)
{
	UCHAR c;

	Output(D12_CMD_HARD , bEndp);//端點選擇
	c = Input();

	return c;
}
    
//讀取最后傳輸狀態
UCHAR D12_ReadLastTransactionStatus(UCHAR bEndp)
{
	Output(D12_CMD_HARD , 0x40 + bEndp);//返回最后傳輸狀態
	return Input();
}


//讀取端點狀態
UCHAR D12_ReadEndpointStatus(UCHAR bEndp)
{
	UCHAR c;

	Output(D12_CMD_HARD , 0x80 + bEndp);//讀取端點狀態
	c = Input();

	return c;
}    

//設置端點狀態
void D12_SetEndpointStatus(UCHAR bEndp, UCHAR bStalled)
{
	Output(D12_CMD_HARD , 0x40 + bEndp);//設置端點狀態
	Output(D12_DATA_HARD , bStalled);
}

//讀取端點數據
UINT D12_ReadEndpoint(UCHAR endp, UINT len, UCHAR * buf)
{
	UINT i, j;

	Output(D12_CMD_HARD , endp);
	if((Input() & 0x01) == 0)
		return 0;

	Output(D12_CMD_HARD , 0xF0);
	j = Input();
	j = Input();

	if(j > len)
		j = len;

	for(i=0; i<j; i++)
    {
		*(buf+i) = Input();
    }    	
	
	Output(D12_CMD_HARD , 0xF2);

	return j;
}


//寫端點
UINT D12_WriteEndpoint(UCHAR endp, UINT len, UCHAR * buf)//
{
	UCHAR i;

	Output(D12_CMD_HARD , endp);
	i = Input();

	Output(D12_CMD_HARD , 0xF0);
	Output(D12_DATA_HARD , 0);
	Output(D12_DATA_HARD , len);


	for(i=0; i<len; i++){
		Output(D12_DATA_HARD , *(buf+i));
        }

	Output(D12_CMD_HARD , 0xFA);

	return len;
}

//設置端點應答
void D12_AcknowledgeEndpoint(UCHAR endp)
{
	Output(D12_CMD_HARD , endp);
	Output(D12_CMD_HARD , 0xF1);
	if(endp == 0)
		Output(D12_CMD_HARD , 0xF2);
}

UINT D12_ReadChipID()
{
	UINT i,j;
	Output(D12_CMD_HARD , 0xFD);
	i=Input();
	j=Input();
	i = (0x00FF & i) + (0xFF00 & (j<<8));
	
	return i;
}

//////////////////////

//發送端點號1建立代碼
void code_transmit(UCHAR * pRomData, UINT len)
{
	EP0_Request_wCount = 0;
	if(EP0_Request_wLength > len)
		EP0_Request_wLength = len;

	EP0_Request_PData = pRomData;
	if( EP0_Request_wLength >= 16)
    {
		D12_WriteEndpoint(1, 16, EP0_Request_PData);//發送16字節數據
		EP0_Request_wCount += 16;
	    EP0_state = TRANSMIT;
	}
	else
    {
		D12_WriteEndpoint(1, EP0_Request_wLength, pRomData);//發送16字節內數據
		EP0_Request_wCount += EP0_Request_wLength;
        EP0_state = IDLE;
	}
}

//返回stall應答
void stall_ep0(void)
{
	D12_SetEndpointStatus(0, 1);
	D12_SetEndpointStatus(1, 1);
}

//從端點號1發送數據
void single_transmit(UCHAR * buf, UINT len)
{
	if( len <= 16) {
		D12_WriteEndpoint(1, len, buf);
	}
}

//獲取描述符
void get_descriptor(void)
{
	UINT bDescriptor = device_request.wValue>>8;

	if (bDescriptor == 0x01) {//獲取設備描述符
		code_transmit(DeviceDescr, 18);
	} else if (bDescriptor == 0x02) {//獲取配置描述符
		code_transmit(ConfigDescr, 0x2e);
	} else
		stall_ep0();
}

//設置地址
void set_address(void)
{
	D12_SetAddressEnable(device_request.wValue,1);
	single_transmit(0, 0);
}

//設置配置狀態
void set_configuration(void)
{
	if (device_request.wValue == 0) //設備進入未配置狀態
    {
		single_transmit(0, 0);
		D12_SetEndpointEnable(0);
	}
    else if (device_request.wValue == 1)  //配置設備
    {
    	USB_D12_OK = 1;
		single_transmit(0, 0);
		D12_SetEndpointEnable(1);
	}
    else
		stall_ep0();
}  

void Set_Interface()
{
    if (device_request.wValue == 0 && device_request.wIndex == 0)
		single_transmit(0, 0);
	else
		stall_ep0();
}

UINT GML = 0;
void Get_Max_Lun()
{
    D12_SetEndpointEnable(1);
    //single_transmit(&GML, 1);
    D12_WriteEndpoint(1, 1, &GML);
}

#define CMD_EXE_SUCCESS		0xAB
#define CMD_EXE_FAILED		0x00

#define ONLY_CAN0					0x00
#define ONLY_CAN1					0x01
#define CAN0_AND_CAN1				0x02

#define CMD_OPEN_OR_CLOSE			0x01
#define CMD_SET_BTR					0x02
#define CMD_REQ_TEST				0x0E

#define VLU_CLOSE_CAN				0x00
#define VLU_OPEN_CAN				0x01

#define	VLU_BTR_125k				0xD887
#define	VLU_BTR_250k				0xD883
#define	VLU_BTR_500k				0xD881

void LW_Request(UINT req)//req是一個字節
{	
	UINT len = 0;
	
	if(device_request.bmRequestType & 0x80)//PC需要設備向上傳輸數據
	{
		CMD_EXE_STATUS[0] = device_request.bRequest;
		CMD_EXE_STATUS[1] = (UCHAR)device_request.wValue;
		CMD_EXE_STATUS[2] = (UCHAR)(device_request.wValue>>8);
		CMD_EXE_STATUS[3] = (UCHAR)device_request.wIndex;
		CMD_EXE_STATUS[4] = (UCHAR)(device_request.wIndex>>8);
		CMD_EXE_STATUS[5] = 0;//保留
		CMD_EXE_STATUS[6] = 0;//保留
		CMD_EXE_STATUS[7] = CMD_EXE_FAILED;
		
		switch(req)
		{			
			case CMD_REQ_TEST://(測試使用的)
				EP0_Request_PData = my_buf;
				
				if(EP0_Request_wLength > 16)
				{
					single_transmit(EP0_Request_PData, 16);	
					EP0_Request_wCount += 16;
					EP0_state = TRANSMIT;
				}
				else if(EP0_Request_wLength != 0)
				{
					single_transmit(EP0_Request_PData, EP0_Request_wLength);	
					EP0_Request_wCount += EP0_Request_wLength;
					EP0_state = IDLE;
				}
				else if(EP0_Request_wLength == 0)
				{
					D12_WriteEndpoint(1, 0, 0);
					EP0_state = IDLE;
				}
				break;
			case CMD_OPEN_OR_CLOSE://注意:這里要求返回的字節數一定是8
				if(device_request.wIndex == ONLY_CAN0)
				{
					if(device_request.wValue == VLU_OPEN_CAN)
					{
						CAN0RIER = 0x01;//使能CAN0接受中斷	
						CAN0_RX_LED_ON;
					}
					else if(device_request.wValue == VLU_CLOSE_CAN)
					{
						CAN0RIER = 0x00;//
						CAN0_RX_LED_OFF;
					}
				}
				else if(device_request.wIndex == ONLY_CAN1)
				{
					if(device_request.wValue == VLU_OPEN_CAN)
					{
						CAN1RIER = 0x01;//使能CAN1接受中斷	
						CAN1_RX_LED_ON;
					}
					else if(device_request.wValue == VLU_CLOSE_CAN)
					{
						CAN1RIER = 0x00;//
						CAN1_RX_LED_OFF;
					}
				}
				else if(device_request.wIndex == CAN0_AND_CAN1)
				{
					if(device_request.wValue == VLU_OPEN_CAN)
					{
						CAN0RIER = 0x01;
						CAN1RIER = 0x01;	
						CAN0_RX_LED_ON;
						CAN1_RX_LED_ON;
					}
					else if(device_request.wValue == VLU_CLOSE_CAN)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99日本精品| 欧美日韩视频在线观看一区二区三区 | 一本久久综合亚洲鲁鲁五月天 | 一本大道综合伊人精品热热| 麻豆91在线看| 色综合中文字幕国产| 国产成人午夜精品5599| 久久国产精品露脸对白| 欧美伊人久久久久久久久影院| 久久精品一区四区| 国产精品天天摸av网| 麻豆专区一区二区三区四区五区| 麻豆精品一二三| 欧美色视频一区| 欧美一级久久久久久久大片| 亚洲精品日韩一| 99久久久国产精品免费蜜臀| 久久久久久99久久久精品网站| 奇米影视一区二区三区小说| 久久国产尿小便嘘嘘| 国产传媒一区在线| 欧美精品一区二区在线观看| 日本视频一区二区| 欧美日韩二区三区| 国产喷白浆一区二区三区| 美日韩一级片在线观看| 国产精品性做久久久久久| 99久久久精品| 91精品国产91综合久久蜜臀| 亚洲成人综合网站| 欧美狂野另类xxxxoooo| 日本不卡的三区四区五区| 91麻豆精品国产91| 中文字幕av一区 二区| 盗摄精品av一区二区三区| 欧美中文字幕一区二区三区亚洲| 亚洲综合在线电影| 国产一区二区看久久| 久久色.com| 成人黄色一级视频| 最新热久久免费视频| 免费观看在线色综合| 日韩女优制服丝袜电影| 国内精品久久久久影院薰衣草| 日本高清免费不卡视频| 精品99一区二区三区| 一区二区三区四区国产精品| 精品一区免费av| 欧美性色黄大片| 日韩不卡手机在线v区| 欧美人成免费网站| 日韩精品久久久久久| 337p亚洲精品色噜噜狠狠| 极品少妇xxxx精品少妇| 国产精品天天摸av网| 欧美日韩一二三| 一色桃子久久精品亚洲| 国产一区在线精品| 亚洲欧洲国产专区| 在线播放视频一区| 国产成人免费视频网站高清观看视频 | 国产ts人妖一区二区| 亚洲欧洲精品天堂一级| 欧美二区在线观看| 国产精品亚洲午夜一区二区三区| 欧美日韩国产小视频在线观看| 另类小说色综合网站| 欧美日韩一区二区三区视频 | 精品国产区一区| 97精品超碰一区二区三区| 日韩一区欧美二区| 欧美综合一区二区| 亚洲精品亚洲人成人网| 日韩一区二区三区高清免费看看| 国产经典欧美精品| 国产欧美一区视频| 欧美日韩久久不卡| 五月激情综合色| 欧美日本国产一区| 不卡一区二区在线| 久久精品国产一区二区三 | 99久久久久免费精品国产 | 一本色道久久综合亚洲aⅴ蜜桃| 国产精品乱人伦| 日韩欧美亚洲一区二区| 91国模大尺度私拍在线视频| 国产成人免费视| 精品一区在线看| 国产亚洲制服色| 成人深夜在线观看| 开心九九激情九九欧美日韩精美视频电影 | 亚洲自拍欧美精品| 欧美性三三影院| 99国产精品久久久久久久久久久 | 色婷婷av久久久久久久| 粉嫩av一区二区三区| 蜜臀av国产精品久久久久| 亚洲资源中文字幕| 中文字幕在线视频一区| 26uuu国产日韩综合| 日韩限制级电影在线观看| 欧美日韩高清一区二区三区| 久久狠狠亚洲综合| 日韩av中文字幕一区二区三区| 亚洲一二三四久久| 欧美一级理论片| 91精品国产综合久久久久久久| 色av成人天堂桃色av| 99精品视频在线观看| aaa亚洲精品一二三区| 成人福利电影精品一区二区在线观看| 亚洲欧美乱综合| 亚洲日本在线a| 亚洲视频香蕉人妖| 亚洲欧美激情视频在线观看一区二区三区 | 丁香六月综合激情| 成人性生交大片免费看中文| 成人激情动漫在线观看| av成人老司机| 全国精品久久少妇| 国产精品美女久久久久久久久| 久久免费看少妇高潮| 久久久久久免费网| 欧美色图在线观看| 欧美日韩国产中文| 日韩欧美亚洲国产另类| 久久久久国产精品厨房| 欧美日韩午夜在线视频| 国产91精品入口| 99久久99久久久精品齐齐| 欧美婷婷六月丁香综合色| 国产精品2024| 日本三级韩国三级欧美三级| 精品一区二区三区视频| 粉嫩aⅴ一区二区三区四区五区| av中文字幕在线不卡| 欧美亚洲高清一区| 欧美电影免费提供在线观看| xfplay精品久久| 中文字幕日本乱码精品影院| 亚洲成a人片在线观看中文| 日本成人在线不卡视频| 国产不卡视频在线播放| 美腿丝袜亚洲综合| 五月婷婷久久丁香| 伊人色综合久久天天| 五月天久久比比资源色| 亚洲制服丝袜av| 久久精品国产亚洲高清剧情介绍| 亚洲国产视频a| 韩国成人精品a∨在线观看| 97久久精品人人澡人人爽| 国产激情一区二区三区桃花岛亚洲| 成人一区二区三区在线观看 | 日韩国产精品久久久| 樱花影视一区二区| 蜜臀av一级做a爰片久久| 亚洲国产视频一区二区| 国产成人精品亚洲日本在线桃色| 91久久精品一区二区三区| 成人av网站在线| 欧美一级搡bbbb搡bbbb| 亚洲欧洲www| 成人欧美一区二区三区小说 | 精品国产欧美一区二区| 亚洲一级二级三级在线免费观看| 国产一区在线不卡| 欧美美女网站色| 亚洲日本在线天堂| 国产精品夜夜嗨| 欧美一区二区大片| 日韩免费视频一区二区| 亚洲午夜成aⅴ人片| 岛国av在线一区| 欧美一级片在线观看| 欧美电影免费观看高清完整版| 亚洲精品福利视频网站| 成人免费毛片片v| 91一区二区在线观看| 91极品美女在线| 欧美日韩在线播放三区四区| 欧美一区二区三区小说| 欧美电影免费观看高清完整版在线观看 | 在线视频国内一区二区| 欧美国产激情二区三区| **网站欧美大片在线观看| 国产另类ts人妖一区二区| 99vv1com这只有精品| 欧美色视频一区| 亚洲午夜在线电影| 色国产综合视频| 亚洲免费资源在线播放| 午夜电影久久久| 欧美性猛片aaaaaaa做受| 日韩理论片在线| 99re视频精品| 欧美久久一二区| 天天影视涩香欲综合网| 欧美美女激情18p| 欧美激情一区二区三区全黄|