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

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

?? can.h

?? 使用freescale的DP256B和D12做的CAN轉USB接口板的固件源代碼,現在的CAN分析儀每個至少要5000多,自己實現一個,希望對大家開發CAN轉USB有所幫助.
?? H
字號:
//CAN0接收中斷
__interrupt void CAN0_Receive(void)
{
	UINT Recv_index = 0;
	UINT i = 0;           
    
    static uchar led_count = 0;
	led_count++;
	if(led_count < 50)
		CAN0_RX_LED_ON;
	else if(led_count < 100)
	{		
		CAN0_RX_LED_OFF;
	}
	else
		led_count = 0;
	
    DisableInterrupts;//中斷使能
    
    for(Recv_index=0;Recv_index<CAN_RECV_BUF_LENGTH;Recv_index++)//搜索空閑的緩沖區
    {   
    	if( Recv_Frame_status[Recv_index] == 0 ) 	
    		break;
    }

    if(Recv_index == CAN_RECV_BUF_LENGTH)//沒有空閑的緩沖區
    {
    	CAN0RFLG_RXF = 1;//接收完畢,寫1清除中斷位   
    	Recv_buffer_overflow++; 	
		return;
    }
    	
    USB_Packet.USB_Packet_struct.CAN_frame_num++;
    Recv_Frame_status[Recv_index] = 1;//設置緩沖區占用標志位
    
    //裝載接收的CAN數據幀
//-----------------------------------------------------------
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].time = CAN_REV_COUNT++;//時間標志
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].channel = 0;//接收通道
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Recv_buffer_overflow_status = Recv_buffer_overflow;
//-----------------------------------------------------------
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ExternFlag = CAN0RXIDR1_IDE;
    if(CAN0RXIDR1_IDE == 1)    
		USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].RemoteFlag = CAN0RXIDR3_RTR;
    else
    	USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].RemoteFlag = CAN0RXIDR1_SRR;

	USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Data[0] = CAN0RXDSR0;
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Data[1] = CAN0RXDSR1;
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Data[2] = CAN0RXDSR2;
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Data[3] = CAN0RXDSR3;
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Data[4] = CAN0RXDSR4;
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Data[5] = CAN0RXDSR5;
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Data[6] = CAN0RXDSR6;
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Data[7] = CAN0RXDSR7;
    
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].DataLen = 0x0F & CAN0RXDLR;
    
    if(USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ExternFlag == 1)
    {
        USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ID = ( CAN0RXIDR3 & 0xFE)>>1;
        USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ID += ((unsigned long)( CAN0RXIDR2 ))<<7;
        USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ID += ((unsigned long)( CAN0RXIDR1 & 0x07))<<15;
        USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ID += ((unsigned long)( CAN0RXIDR1 & 0xE0))<<13;
        USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ID += ((unsigned long)( CAN0RXIDR0 ))<<21; 
    }
    else
    {
        USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ID = ( CAN0RXIDR1 & 0xE0)>>5;
        USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ID += ((unsigned long)( CAN0RXIDR0 ))<<3;
    }      
//-----------------------------------------------------------


    CAN0RFLG_RXF = 1;//接收完畢,寫1清除中斷位    	
	
	EnableInterrupts;//中斷使能
	
    return;
}



//CAN0發送中斷
__interrupt void CAN0_Transmit(void)
{    
	static uchar led_count = 0;
	led_count++;
	if(led_count < 50)
		CAN0_TX_LED_ON;
	else if(led_count < 100)
	{		
		CAN0_TX_LED_OFF;
	}
	else
		led_count = 0;
	
    //發送中斷禁止
    CAN0TIER = 0x00;	
	
    //中斷屏蔽
    asm
    {
        sei;
    }
    
    //獲得可用的發送緩沖區編號,取編號值最小的緩沖區
    CAN0TBSEL = CAN0TFLG;
  
    if( SendFrame.ExternFlag == 1 )
    {
        CAN0TXIDR3 = (SendFrame.ID & 0x0000007F)<<1;
        CAN0TXIDR2 = (SendFrame.ID & 0x00007F80)>>7;
        CAN0TXIDR1 = (SendFrame.ID & 0x00038000)>>15;
        CAN0TXIDR1+= (SendFrame.ID & 0x001C0000)>>13;
        CAN0TXIDR0 = (SendFrame.ID & 0x1FE00000)>>21;
        CAN0TXIDR1_IDE = 1;
        CAN0TXIDR1_SRR = 1;
        if( SendFrame.RemoteFlag == 1 )
        {
            CAN0TXIDR3_RTR = 1;
        }
        else
        {    
            CAN0TXIDR3_RTR = 0;
            CAN0TXDSR0 = SendFrame.Data[0];
            CAN0TXDSR1 = SendFrame.Data[1];
            CAN0TXDSR2 = SendFrame.Data[2];
            CAN0TXDSR3 = SendFrame.Data[3];
            CAN0TXDSR4 = SendFrame.Data[4];
            CAN0TXDSR5 = SendFrame.Data[5];
            CAN0TXDSR6 = SendFrame.Data[6];
            CAN0TXDSR7 = SendFrame.Data[7];
            CAN0TXDLR  = SendFrame.DataLen;
        }
    }
    else
    {
        CAN0TXIDR1 = (SendFrame.ID & 0x0007)<<5;
        CAN0TXIDR0 = (SendFrame.ID & 0x01F8)>>3;
        CAN0TXIDR1_IDE = 0;
        if( SendFrame.RemoteFlag == 1 )
        {
            CAN0TXIDR1_SRR = 1;
        }
        else
        {
            CAN0TXIDR1_SRR = 0;
            CAN0TXDSR0 = SendFrame.Data[0];
            CAN0TXDSR1 = SendFrame.Data[1];
            CAN0TXDSR2 = SendFrame.Data[2];
            CAN0TXDSR3 = SendFrame.Data[3];
            CAN0TXDSR4 = SendFrame.Data[4];
            CAN0TXDSR5 = SendFrame.Data[5];
            CAN0TXDSR6 = SendFrame.Data[6];
            CAN0TXDSR7 = SendFrame.Data[7];
            CAN0TXDLR  = SendFrame.DataLen;
        }
    }
//--------------------------------------------------------------------------
//   將發送緩沖區選擇寄存器賦值給發送緩沖區標志寄存器
//   將自動將該緩沖區內的數據加入發送隊列發送
//--------------------------------------------------------------------------      
    CAN0TFLG = CAN0TBSEL;   
	
    //清除中斷屏蔽
    asm
    {
        cli;
    }

    //中斷返回
    asm
    {
        rti;
    }
}


//CAN1接收中斷
__interrupt void CAN1_Receive(void)
{
	UINT Recv_index = 0;
	UINT i = 0;           
    
    static uchar led_count = 0;
    led_count++;
	if(led_count < 50)
		CAN1_RX_LED_ON;
	else if(led_count < 100)
	{		
		CAN1_RX_LED_OFF;
	}
	else
		led_count = 0;
	
    DisableInterrupts;//中斷使能
    
    for(Recv_index=0;Recv_index<CAN_RECV_BUF_LENGTH;Recv_index++)//搜索空閑的緩沖區
    {   
    	if( Recv_Frame_status[Recv_index] == 0 ) 	
    		break;
    }
    
    if(Recv_index == CAN_RECV_BUF_LENGTH)//沒有空閑的緩沖區
    {
    	CAN1RFLG_RXF = 1;//接收完畢,寫1清除中斷位   
    	Recv_buffer_overflow++; 	
		return;
    }
    	
    USB_Packet.USB_Packet_struct.CAN_frame_num++;
    Recv_Frame_status[Recv_index] = 1;//設置緩沖區占用標志位
    
    //裝載接收的CAN數據幀
//-----------------------------------------------------------
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].time = CAN_REV_COUNT++;//時間標志
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].channel = 1;//接收通道
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Recv_buffer_overflow_status = Recv_buffer_overflow;
//-----------------------------------------------------------
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ExternFlag = CAN1RXIDR1_IDE;
    if(CAN1RXIDR1_IDE == 1)    
		USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].RemoteFlag = CAN1RXIDR3_RTR;
    else
    	USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].RemoteFlag = CAN1RXIDR1_SRR;

	USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Data[0] = CAN1RXDSR0;
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Data[1] = CAN1RXDSR1;
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Data[2] = CAN1RXDSR2;
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Data[3] = CAN1RXDSR3;
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Data[4] = CAN1RXDSR4;
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Data[5] = CAN1RXDSR5;
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Data[6] = CAN1RXDSR6;
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].Data[7] = CAN1RXDSR7;
    
    USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].DataLen = 0x0F & CAN1RXDLR;
    
    if(USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ExternFlag == 1)
    {
        USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ID = ( CAN1RXIDR3 & 0xFE)>>1;
        USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ID += ((unsigned long)( CAN1RXIDR2 ))<<7;
        USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ID += ((unsigned long)( CAN1RXIDR1 & 0x07))<<15;
        USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ID += ((unsigned long)( CAN1RXIDR1 & 0xE0))<<13;
        USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ID += ((unsigned long)( CAN1RXIDR0 ))<<21; 
    }
    else
    {
        USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ID = ( CAN1RXIDR1 & 0xE0)>>5;
        USB_Packet.USB_Packet_struct.Recv_Frame[Recv_index].ID += ((unsigned long)( CAN1RXIDR0 ))<<3;
    }      
//-----------------------------------------------------------


    CAN1RFLG_RXF = 1;//接收完畢,寫1清除中斷位    	
	
	EnableInterrupts;//中斷使能
	
    return;
}



//CAN1發送中斷
__interrupt void CAN1_Transmit(void)
{    
	static uchar led_count = 0;
	led_count++;
	if(led_count < 50)
		CAN1_TX_LED_ON;
	else if(led_count < 100)
	{
		CAN1_TX_LED_OFF;
	}
	else
		led_count = 0;
	
    //發送中斷禁止
    CAN1TIER = 0x00;	
	
    //中斷屏蔽
    asm
    {
        sei;
    }
    
    //獲得可用的發送緩沖區編號,取編號值最小的緩沖區
    CAN1TBSEL = CAN1TFLG;
  
    if( SendFrame.ExternFlag == 1 )
    {
        CAN1TXIDR3 = (SendFrame.ID & 0x0000007F)<<1;
        CAN1TXIDR2 = (SendFrame.ID & 0x00007F80)>>7;
        CAN1TXIDR1 = (SendFrame.ID & 0x00038000)>>15;
        CAN1TXIDR1+= (SendFrame.ID & 0x001C0000)>>13;
        CAN1TXIDR0 = (SendFrame.ID & 0x1FE00000)>>21;
        CAN1TXIDR1_IDE = 1;
        CAN1TXIDR1_SRR = 1;
        if( SendFrame.RemoteFlag == 1 )
        {
            CAN1TXIDR3_RTR = 1;
        }
        else
        {    
            CAN1TXIDR3_RTR = 0;
            CAN1TXDSR0 = SendFrame.Data[0];
            CAN1TXDSR1 = SendFrame.Data[1];
            CAN1TXDSR2 = SendFrame.Data[2];
            CAN1TXDSR3 = SendFrame.Data[3];
            CAN1TXDSR4 = SendFrame.Data[4];
            CAN1TXDSR5 = SendFrame.Data[5];
            CAN1TXDSR6 = SendFrame.Data[6];
            CAN1TXDSR7 = SendFrame.Data[7];
            CAN1TXDLR  = SendFrame.DataLen;
        }
    }
    else
    {
        CAN1TXIDR1 = (SendFrame.ID & 0x0007)<<5;
        CAN1TXIDR0 = (SendFrame.ID & 0x01F8)>>3;
        CAN1TXIDR1_IDE = 0;
        if( SendFrame.RemoteFlag == 1 )
        {
            CAN1TXIDR1_SRR = 1;
        }
        else
        {
            CAN1TXIDR1_SRR = 0;
            CAN1TXDSR0 = SendFrame.Data[0];
            CAN1TXDSR1 = SendFrame.Data[1];
            CAN1TXDSR2 = SendFrame.Data[2];
            CAN1TXDSR3 = SendFrame.Data[3];
            CAN1TXDSR4 = SendFrame.Data[4];
            CAN1TXDSR5 = SendFrame.Data[5];
            CAN1TXDSR6 = SendFrame.Data[6];
            CAN1TXDSR7 = SendFrame.Data[7];
            CAN1TXDLR  = SendFrame.DataLen;
        }
    }
//--------------------------------------------------------------------------
//   將發送緩沖區選擇寄存器賦值給發送緩沖區標志寄存器
//   將自動將該緩沖區內的數據加入發送隊列發送
//--------------------------------------------------------------------------      
    CAN1TFLG = CAN1TBSEL;   
	
    //清除中斷屏蔽
    asm
    {
        cli;
    }

    //中斷返回
    asm
    {
        rti;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看欧美日本| 91在线视频播放地址| 韩国精品一区二区| 91丨porny丨首页| 久久综合狠狠综合久久综合88| 亚洲天堂福利av| 国内精品免费**视频| 欧美高清视频不卡网| 国产精品免费丝袜| 经典三级一区二区| 欧美日本韩国一区二区三区视频 | 蜜桃视频一区二区三区在线观看| 国产成人aaaa| 精品久久国产老人久久综合| 一区二区三国产精华液| 国产宾馆实践打屁股91| 久久综合九色欧美综合狠狠| 日本中文在线一区| 欧美挠脚心视频网站| 亚洲精品福利视频网站| 丁香婷婷综合五月| wwwwww.欧美系列| 极品尤物av久久免费看| 日韩免费视频一区| 日韩成人午夜精品| 欧美一区二区三区四区五区| 亚洲国产精品人人做人人爽| 91麻豆国产自产在线观看| 国产精品久久久久久久久免费桃花| 国产一区二区日韩精品| 精品国产伦一区二区三区观看方式| 图片区小说区区亚洲影院| 91麻豆精品国产91| 日韩中文欧美在线| 91麻豆精品国产| 六月丁香综合在线视频| 欧美成人猛片aaaaaaa| 日韩高清在线一区| 日韩欧美国产不卡| 九九视频精品免费| 久久女同互慰一区二区三区| 国产一区二区三区电影在线观看| 国产亚洲成av人在线观看导航| 国产乱人伦偷精品视频免下载| 国产视频911| 99在线精品一区二区三区| 亚洲男女一区二区三区| 在线视频欧美区| 午夜视黄欧洲亚洲| 精品国产一区二区三区久久影院| 极品少妇一区二区| 中文字幕av在线一区二区三区| 岛国一区二区在线观看| 一区二区三区.www| 日韩欧美久久久| av亚洲精华国产精华精| 午夜激情一区二区| 久久综合网色—综合色88| 成人性视频免费网站| 亚洲在线观看免费视频| 91精品国产麻豆国产自产在线| 黄一区二区三区| 国产精品乱人伦一区二区| 欧洲国产伦久久久久久久| 日本中文一区二区三区| 国产欧美精品在线观看| 91美女在线看| 麻豆精品国产91久久久久久| 自拍偷拍亚洲综合| 欧美变态凌虐bdsm| 色综合欧美在线视频区| 麻豆精品精品国产自在97香蕉| 国产精品毛片无遮挡高清| 欧美精品一卡两卡| 不卡的av电影| 裸体歌舞表演一区二区| 亚洲三级免费电影| 久久亚区不卡日本| 欧美日韩一级二级三级| 成人性色生活片免费看爆迷你毛片| 亚洲国产精品一区二区久久 | 91精品国产综合久久久久久漫画| 国产在线播放一区二区三区| 樱桃视频在线观看一区| 久久综合久久99| 欧美日本在线播放| 91色|porny| 国产成人综合亚洲91猫咪| 午夜欧美电影在线观看| 成人免费一区二区三区视频 | 九九视频精品免费| 亚洲一区二区欧美日韩 | 日韩欧美亚洲一区二区| 一本到一区二区三区| 国产美女精品人人做人人爽| 亚洲成人自拍偷拍| 亚洲综合图片区| 一区在线观看视频| 久久久精品一品道一区| 欧美一区二区三区免费在线看 | 国产精品久久久久一区二区三区 | 麻豆国产欧美日韩综合精品二区| 欧美一卡在线观看| 欧美美女喷水视频| 在线亚洲一区二区| 色网综合在线观看| 91猫先生在线| 97精品久久久久中文字幕| 国产成人精品综合在线观看| 久久er精品视频| 男女性色大片免费观看一区二区| 亚洲成人一区在线| 亚洲大片一区二区三区| 亚洲成人午夜电影| 午夜精品免费在线观看| 婷婷夜色潮精品综合在线| 亚洲国产综合91精品麻豆| 亚洲国产wwwccc36天堂| 亚洲国产一区二区在线播放| 亚洲a一区二区| 蜜桃视频一区二区| 国产一二三精品| 国产99精品国产| av不卡在线播放| 色天天综合色天天久久| 欧美午夜寂寞影院| 欧美一区二区三区成人| 精品国产乱码久久久久久影片| 精品理论电影在线观看| 国产日韩高清在线| 亚洲精品国产一区二区精华液 | 亚洲黄色小视频| 亚洲一区二区欧美激情| 丝袜脚交一区二区| 精彩视频一区二区三区| jlzzjlzz亚洲女人18| 欧美亚洲国产一卡| 日韩一级高清毛片| 久久精品欧美一区二区三区麻豆| 中文字幕第一区| 亚洲图片欧美一区| 国产一区中文字幕| 色婷婷久久久综合中文字幕| 欧美一区二区三区在线观看| 国产亲近乱来精品视频| 亚洲午夜一二三区视频| 韩国中文字幕2020精品| 99国内精品久久| 91麻豆精品国产91久久久资源速度 | 91老司机福利 在线| 3atv在线一区二区三区| 国产精品日韩成人| 亚洲bt欧美bt精品777| 国产精品69毛片高清亚洲| 日本高清免费不卡视频| 日韩午夜av电影| 日韩毛片高清在线播放| 久久精品理论片| 91福利精品视频| 国产校园另类小说区| 午夜伊人狠狠久久| 高清不卡在线观看| 在线播放91灌醉迷j高跟美女| 国产日本一区二区| 日本午夜一本久久久综合| 99久久精品免费精品国产| 欧美成人三级在线| 亚洲一区二区三区四区在线观看 | 麻豆极品一区二区三区| 在线视频一区二区免费| 中文字幕乱码久久午夜不卡| 麻豆成人91精品二区三区| 91成人免费在线| 中文字幕乱码日本亚洲一区二区| 男女男精品视频| 欧美另类高清zo欧美| 亚洲乱码国产乱码精品精可以看 | 欧美三级乱人伦电影| 国产精品美女久久久久aⅴ| 紧缚捆绑精品一区二区| 欧美一区二区在线不卡| 亚洲国产aⅴ天堂久久| 日本久久一区二区三区| 中文字幕在线免费不卡| 国产成人在线网站| 久久综合久色欧美综合狠狠| 蜜桃av噜噜一区| 91精品国产美女浴室洗澡无遮挡| 亚洲国产一区二区视频| 在线看一区二区| 樱花影视一区二区| 欧美性猛片aaaaaaa做受| 亚洲色图视频网| 91丨porny丨最新| 怡红院av一区二区三区| 色94色欧美sute亚洲线路一久| 亚洲人成精品久久久久| 91影院在线观看| 一区二区三区中文字幕精品精品 | 欧美国产精品专区|