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

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

?? can.c

?? can tongxunCAN128的底層驅動
?? C
字號:
#include "main.h"

//#pragma interrupt_handler can_ReceiveData:19

/*******************************************************************
CAN initialization:
Mailbox 0: Receive  --> interrupt
Mailbox 1: Transmit --> polling
*******************************************************************/
#define TYP_RESET		5
#define TYP_BAUD		10

#define SELFID  2

extern unsigned char sysrst;
unsigned char canbaud;

const Uchar CanBaud[6][3]={{0x02,0x04,0x13},{0x06,0x04,0x13},{0x0E,0x04,0x13},{0x12,0x04,0x13},{0x1E,0x04,0x13},{0x26,0x04,0x13}};



unsigned long CANMOBID[15]={0x1300ff01,0x1300ff01,0x02000000|(SELFID<<8),0x02000000|(SELFID<<8),0x0100ff00,0x0100ff00,0x01000000|(SELFID<<8),0x01000000|(SELFID<<8),0x0200ff00,0x12000001,0x01000000|(SELFID<<8),0x01000000|(SELFID<<8),0x01000000|(SELFID<<8),0x01000000|(SELFID<<8),0x1300ff01};
unsigned long CANMOBMD[15]={0x1f00ffff,0x1f00ffff,0x0f00ff00,            0x0f00ff00,            0x0f00ff00,0x0f00ff00,0x0f00ff00,            0x0f00ff00,            0x0f00ff00,0x1f0000ff,0x0f00ff00,0x0f00ff00,0x0f00ff00,0x0f00ff00,0x1f00ffff};
unsigned char CANIDT[15][4]={0};
unsigned char CANIDM[15][4]={0};
Uchar counterTemp;
void can_init (void)
{
 canMob_init();
 //IDRcbufInit();
 //RstIDused();
}


void canMob_init (void)
{
    unsigned char i,j;
	unsigned long temp;
	unsigned int temp1,temp2;
	
	
	//DDRD=(1<<PD5)|(0<<PD6);   //TXCAN, RXCNA
	DDRD|=0x20;
	DDRD&=0xBF;
	CANGCON |= (1<<SWRES);              //reset CAN interface
    
	
	//CANMOBID[2]=(unsigned long)(SELFID<<8)|CANMOBID[2];
	for(i=0;i<15;i++)
	{
	 temp=CANMOBID[i]<<3;
	 temp1=(unsigned int)temp;
	 temp2=(unsigned int)(temp/0x00010000);
	 CANIDT[i][3]=(Uchar)temp1;
	 CANIDT[i][2]=(Uchar)(temp1>>8);
	 CANIDT[i][1]=(Uchar)temp2;
	 CANIDT[i][0]=(Uchar)(temp2>>8); 
	 NOP();
	}
	
	for(i=0;i<15;i++)
	{
	 temp=CANMOBMD[i]<<3;
	 temp1=(unsigned int)temp;
	 temp2=(unsigned int)(temp/0x00010000);
	 CANIDM[i][3]=(Uchar)temp1;
	 CANIDM[i][2]=(Uchar)(temp1>>8);
	 CANIDM[i][1]=(Uchar)temp2;
	 CANIDM[i][0]=(Uchar)(temp2>>8); 
	 NOP();
	}
    //reset all MObs
    for (i=0; i<15; i++)
    {
        CANPAGE = (i<<4);           //select MOb
        CANCDMOB = 0;           	//disable MOb
        CANSTMOB = 0;               //clear status
        CANIDT1 = 0;        		//clear ID
        CANIDT2 = 0;
        CANIDT3 = 0;
        CANIDT4 = 0;
        CANIDM1 = 0;            	//clear mask
        CANIDM2 = 0;
        CANIDM3 = 0;
        CANIDM4 = 0;
        for (j=0; j<8; j++)
            CANMSG = 0;         //clear data
    }

    //bit timing -> datasheet page 260 (check table) 250Kbps
    //CANBT1 = 0x02;            //16Mhz,1Mbps
    //CANBT2 = 0x04;
    //CANBT3 = 0x13;
    
	//canbaud= EEPROM_read(0x0020);
	CANBT1 = CanBaud[2][0];         
    CANBT2 = CanBaud[2][1];
    CANBT3 = CanBaud[2][2];
	
    //configure MObi
	/******************************************************************/
   for (i=0; i<15; i++)
   {
	CANPAGE = (i<<4);                   //MOb number 0
     CANIDT1 = CANIDT[i][0];        		//clear ID
     CANIDT2 = CANIDT[i][1];
     CANIDT3 = CANIDT[i][2];
     CANIDT4 = CANIDT[i][3];
     CANIDM1 = CANIDM[i][0];            	//clear mask
     CANIDM2 = CANIDM[i][1];
     CANIDM3 = CANIDM[i][2];
     CANIDM4 = CANIDM[i][3];               //0 = ignore bit
    //CANIDM4 = (1<<IDEMSK);                          //identifier extention mask
     CANCDMOB = (2<<CONMOB) | (1<<IDE);     //reception, ext. ID,rev2.0B
	 NOP();
	}
	
    //CANHPMOB = (2<<HPMOB);
	CANGCON = (1<<ENASTB);              //start CAN interface, enable mode
/***********************************************************************/
    //interrupts
    //CANGIE = (1<<ENIT) | (1<<ENRX);         //enable receive interrupt
	
	CANGIE = (1<<ENIT) | (1<<ENTX)| (1<<ENRX);    //enable receive interrupt and transmitte interrupt 
    /////////////////////////////////////////////////////////////////////// 
	CANIE1 = 0xff;                  
	CANIE2 = 0x7f;                         //enable ALL MObs interrupt
    CANSIT1 = 0;                          //clear MOb status interrupt
    CANSIT2 = 0;
    
///////////////////////////	Enable Mob0 transmit/////////////////////
    CLI();
    CANPAGE = (1<<4);
    CANCDMOB |= (1<<CONMOB0);
/////////////////////////////////////////////////////////////////////

    while (!(CANGSTA & (1<<ENFG)));         //wait until module ready
	
    CANGCON |= (1<<ENA);      //enable CAN controller
}

/*******************************************************************
CAN transmission via mailbox 1 (polling)
*******************************************************************/
void can_tx (VCI_CAN_OBJ msg)
{
    unsigned char i;
	//enable MOb1, auto increment index, start with index = 0
    CANPAGE = (1<<4);

    CANCDMOB = (1<<IDE) | (8<<DLC0);        //set IDE bit rev2.0B, data length = 8

   
	msg.ID <<= 3;                   //write 29 Bit identifier
    CANIDT4 = (unsigned char) (msg.ID&0xF8);
    CANIDT3 = (unsigned char) (msg.ID>>8);
    CANIDT2 = (unsigned char) (msg.ID>>16);
    CANIDT1 = (unsigned char) (msg.ID>>24);
	
    for(i=0;i<8;i++)                               
      {
	   
       CANMSG = msg.Data[i];
	  }
   // for (i=0; i<8; i++)       //put data in mailbox 6
        
    CANCDMOB |= (1<<CONMOB0);           //enable transmission

    //while (!(CANSTMOB & (1<<TXOK)));        //wait until complete
    //CANSTMOB &= ~(1<<TXOK);             //reset flag
}


#define can_TX_BUFFER_SIZE  8
VCI_CAN_OBJ tx_msg_buff[can_TX_BUFFER_SIZE];
Uchar can_sendingP;
Uchar can_willsendP;
Uchar can_tx_count;
Uint CAN_tx_OverFlow= 60000;
void can_tx_buff(VCI_CAN_OBJ tx_msg)
{ 
  CAN_tx_OverFlow = 60000;
  while (can_tx_count == can_TX_BUFFER_SIZE)
   { 
     CAN_tx_OverFlow--;
	 if(CAN_tx_OverFlow<=50)
	   {
	      can_tx_count = 0;
		  can_sendingP = can_willsendP; 
		  CANSTMOB &= ~(1<<TXOK);
		  CAN_tx_OverFlow = 60000;
	   }
   }
  if(can_tx_count || (CANGSTA & (1<<TXBSY)))
  {
     tx_msg_buff[can_willsendP] = tx_msg;
     if(++can_willsendP == can_TX_BUFFER_SIZE)
	     can_willsendP = 0;
	 ++can_tx_count;
  } 
  else 
  {
    if(can_willsendP != can_sendingP)
	{
	  NOP();
	  can_willsendP=0;
	  can_sendingP=0;
	}
    can_tx(tx_msg);
  }  
}


/*******************************************************************
CAN receive interrupt service routine (mailbox i)
*******************************************************************/
#pragma interrupt_handler can_ReceiveData:19
void can_ReceiveData (void)             //receive interrupt 
{Uchar RCFlag;
	unsigned char nb_data;
	unsigned char temp = CANPAGE;           //save CANPAGE
	unsigned char i,tt=0,CAN_REMOb[15],nn;
	unsigned int RC_CANSI,RCtemp1,RCtemp2,tempp,RCF;
	VCI_CAN_OBJ msg[15];

    //VCI_CAN_OBJ CanTkfrm;

	
if(CANSTMOB & (1<<TXOK))
 { 
   CANSTMOB &= ~(1<<TXOK);
   if(can_tx_count)
     {
	   --can_tx_count;
	   can_tx(tx_msg_buff[can_sendingP]);
	   if(++can_sendingP==can_TX_BUFFER_SIZE) can_sendingP=0;
	 }
 }
else 
 {	 
	RCtemp2=CANSIT2;
	RCtemp1=CANSIT1;
	CANSTMOB &= ~(1<<RXOK);
	RC_CANSI=(RCtemp1<<8)|RCtemp2;
    for(i=0;i<15;i++)
	 {
	  tempp=(1<<i);
	  RCF=(RC_CANSI&tempp);
	  if(RCF!=0)
	    {
		 if(i==10)
		   NOP();
		 CAN_REMOb[tt]=i;
		 tt++;
		 }
	 }
	  
   /* for(i=0;i<tt;i++)
	{
	 CANPAGE = (CAN_REMOb[i]<<4);
	 CANSTMOB &= ~(1<<RXOK);
	 for (nb_data = 0; nb_data <(CANCDMOB&DLC_MSK); nb_data++)  
	  {
	   msg[i].Data[nb_data]=CANMSG;
	  }
	   msg[i].ID = 0;
       msg[i].ID |= ((unsigned long) CANIDT1<<24);    //get identifier
       msg[i].ID |= ((unsigned long) CANIDT2<<16);
       msg[i].ID |= ((unsigned long) CANIDT3<<8);
       msg[i].ID |= (CANIDT4&0xF8);
       msg[i].ID >>= 3;
	   CANCDMOB = (2<<CONMOB) | (1<<IDE);
	 }*/
	 
	 for(i=0;i<tt;i++)
	 {
	 CANPAGE = (CAN_REMOb[i]<<4);
	 CANSTMOB &= ~(1<<RXOK);
	 for (nb_data = 0; nb_data <(CANCDMOB&DLC_MSK); nb_data++)  
	   {
	    msg[i].Data[nb_data]=CANMSG;
	   }
	   msg[i].ID = 0;
       msg[i].ID |= ((unsigned long) CANIDT1<<24);    //get identifier
       msg[i].ID |= ((unsigned long) CANIDT2<<16);
       msg[i].ID |= ((unsigned long) CANIDT3<<8);
       msg[i].ID |= (CANIDT4&0xF8);
       msg[i].ID >>= 3;
	   CANCDMOB = (2<<CONMOB) | (1<<IDE);
	 }
	 
	 for(nn=0;nn<tt;nn++)
	 {
/*****************************************************
*          用戶程序
*      舉例: msg[nn].ID 是ID 號
             msg[nn].date[0]~msg[nn].date[8] 是數據
********************************************************/
	 } 
   }
   CANPAGE = temp;                 //restore CANPAGE
}






?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人成网站在线| 欧美精品一区男女天堂| 亚洲一区二区偷拍精品| 色网站国产精品| 五月天视频一区| 欧美一区欧美二区| 精品一区二区av| 国产亚洲精品免费| 91在线观看视频| 亚洲成a人片在线不卡一二三区| 欧美视频一区二区在线观看| 青青草国产成人99久久| 亚洲精品在线网站| 99久久精品国产观看| 亚洲制服欧美中文字幕中文字幕| 911精品国产一区二区在线| 奇米精品一区二区三区四区| 久久久.com| 91一区二区三区在线观看| 午夜精品久久久久久不卡8050| 精品久久久网站| 色综合久久久久综合体| 日韩成人一区二区三区在线观看| 久久久综合视频| 欧洲精品在线观看| 国产激情91久久精品导航| 亚洲美女区一区| 日韩精品综合一本久道在线视频| 成人app网站| 国精品**一区二区三区在线蜜桃| 亚洲视频你懂的| 日韩视频一区二区三区| 99麻豆久久久国产精品免费| 日本亚洲三级在线| 中文字幕在线观看不卡| 91精品国产免费| 91污在线观看| 激情欧美一区二区三区在线观看| 亚洲影院久久精品| 欧美国产精品一区| 日韩欧美不卡一区| 欧美日韩视频一区二区| 不卡av在线网| 国产乱对白刺激视频不卡| 午夜欧美在线一二页| 亚洲天堂福利av| 国产欧美一区在线| 久久亚洲一区二区三区四区| 欧美日韩中文字幕精品| 91原创在线视频| voyeur盗摄精品| 国产精品伊人色| 老司机精品视频在线| 亚洲国产精品久久人人爱蜜臀| 欧美国产日本韩| 精品sm在线观看| 欧美一区二区三区免费大片| 一本色道久久综合亚洲aⅴ蜜桃 | 久久国产麻豆精品| 亚洲444eee在线观看| 一区二区欧美国产| 中文字幕中文字幕中文字幕亚洲无线| 精品99一区二区| 精品国产乱码91久久久久久网站| 欧美日韩精品一区二区天天拍小说 | 2023国产精品| 91精品国产乱| 337p亚洲精品色噜噜| 欧美猛男男办公室激情| 色噜噜狠狠色综合欧洲selulu| av一本久道久久综合久久鬼色| 国产成人免费视频一区| 国产成人综合亚洲网站| 国产一区二区精品在线观看| 国产乱码字幕精品高清av| 日本精品免费观看高清观看| 成人一区在线观看| 成人免费看黄yyy456| 成人av网站免费观看| 成人综合婷婷国产精品久久免费| 国产白丝精品91爽爽久久| 成人网页在线观看| 99精品桃花视频在线观看| 99精品在线免费| 色哟哟国产精品免费观看| 日本高清不卡在线观看| 欧美日韩免费电影| 日韩一区二区精品葵司在线| 日韩精品在线一区| 国产日韩欧美麻豆| 国产精品不卡在线观看| 亚洲国产欧美另类丝袜| 日本亚洲视频在线| 国产一区二区三区蝌蚪| 99在线视频精品| 欧美性视频一区二区三区| 欧美高清一级片在线| 精品国产亚洲在线| 国产精品久久777777| 一区二区三区免费观看| 日韩成人精品在线| 国产福利一区二区| 色婷婷一区二区| 欧美成人综合网站| 国产精品久99| 日韩成人午夜电影| 丁香啪啪综合成人亚洲小说 | 不卡影院免费观看| 欧美综合一区二区| 欧美大片在线观看一区二区| 国产日韩欧美精品综合| 亚洲成人黄色小说| 国产精品99精品久久免费| 色综合一区二区| 精品国产精品网麻豆系列 | 一个色在线综合| 极品少妇xxxx精品少妇| 色婷婷亚洲婷婷| 精品国产一区二区三区不卡 | 日本一区二区综合亚洲| 亚洲一区av在线| 成人免费不卡视频| 69p69国产精品| 18成人在线视频| 国产在线精品一区二区夜色| 91黄色在线观看| 国产日韩欧美综合一区| 欧美a级一区二区| 一本色道久久综合亚洲91| 久久久久久久久99精品| 天堂蜜桃91精品| 91在线视频观看| 国产婷婷色一区二区三区四区| 无码av中文一区二区三区桃花岛| 不卡视频免费播放| 欧美变态tickle挠乳网站| 亚洲成人一区二区| 色噜噜夜夜夜综合网| 国产精品激情偷乱一区二区∴| 国产一区二区三区在线观看免费视频 | 偷偷要91色婷婷| 波多野结衣中文一区| 久久婷婷国产综合国色天香| 亚洲精品免费电影| 又紧又大又爽精品一区二区| 成人午夜激情片| 精品成人a区在线观看| 亚洲不卡av一区二区三区| 成人app在线| 欧美高清在线视频| 国产一区二区久久| 日韩久久精品一区| 日韩av不卡在线观看| 欧美日韩国产区一| 亚洲一区中文日韩| 色诱亚洲精品久久久久久| 亚洲视频在线一区观看| 成人免费三级在线| 久久精品一区二区三区不卡牛牛| 狠狠色丁香久久婷婷综合丁香| 欧美一区二区三区公司| 三级成人在线视频| 欧美剧在线免费观看网站| 亚洲图片欧美色图| 欧美亚洲综合久久| 亚洲va国产天堂va久久en| 欧美视频在线一区二区三区 | 国产精品久久久久久久午夜片| 黄色小说综合网站| 久久久精品日韩欧美| 国产精品亚洲专一区二区三区| 2023国产精品| 成人av网站免费观看| 亚洲欧美日韩国产综合| 91高清在线观看| 五月婷婷久久综合| 欧美一区二区成人| 韩国av一区二区三区四区| 国产日韩欧美麻豆| 99久久精品99国产精品 | 亚洲少妇屁股交4| 在线观看www91| 欧美a级一区二区| 久久精品日韩一区二区三区| 成人精品一区二区三区四区| 亚洲免费av高清| 日韩手机在线导航| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 精品人在线二区三区| 成人精品免费看| 亚洲韩国精品一区| 精品国产乱码久久| 99久久精品国产精品久久| 日日噜噜夜夜狠狠视频欧美人| 精品噜噜噜噜久久久久久久久试看| 国产精品亚洲专一区二区三区| 国产精品综合网| 亚洲丝袜制服诱惑| 91精品国产色综合久久ai换脸| 国产精品538一区二区在线|