www.pudn.com > can¡ª¡ªSJA1000.rar > SJA_BCANFUNC.c


/* 
******************************************************************************************************************** 
**ÃèÊö£º    ¶ÀÁ¢µÄCAN ¿ØÖÆÆ÷SJA1000»ù±¾Ó²¼þÍ·Îļþ¶¨Òå(BasicCAN ¹¤×÷·½Ê½£© 
**ÎļþÃû:   SJA_BcanFunc.H 
**Ó¦ÓÃÓïÑÔ: KEIL C51 
**°æ±¾ :    V1.0 
**¹ãÖÝÖÜÁ¢¹¦µ¥Æ¬»ú·¢Õ¹ÓÐÏÞ¹«Ë¾ ±£ÁôËùÓеİæÈ¨ 
******************************************************************************************************************** 
*/ 
 
 /*$page*/ 
 
 
#include    "SJA_BCANCONF.H" 
#include     
 
 
 
 
/************************************************************************ 
 *ÒÔÏÂΪ»ù±¾µÄº¯Êý˵Ã÷£¨BasicCAN)                                       * 
 ************************************************************************/ 
 
/************************************************************************ 
 *º¯ÊýÔ­ÐÍ:  bit   BCAN_CREATE_COMMUNATION(void)                        *  
 *²ÎÊý˵Ã÷:  ÎÞ                                                         * 
 *·µ»ØÖµ:                                                               * 
 *           0 ; ±íʾSJA1000½Ó¿ÚÕý³£                                    * 
 *           1 ; ±íʾSJA1000Óë´¦ÀíÆ÷½Ó¿Ú²»Õý³£                          * 
 *                                                                      *  
 *˵Ã÷:¸Ãº¯ÊýÓÃÓÚ¼ì²âCAN¿ØÖÆÆ÷µÄ½Ó¿ÚÊÇ·ñÕý³£                            * 
 ************************************************************************/ 
 bit   BCAN_CREATE_COMMUNATION(void) 
 {   
    SJA_BCANAdr=REG_TEST;                     //·ÃÎʲâÊԼĴæÆ÷             
     
    *SJA_BCANAdr   =0xaa;                     //дÈë²âÊÔÖµ 
    if(*SJA_BCANAdr == 0xaa) 
    { 
        return    0;                          //¶Á²âÊÔÕýÈ· 
    } 
    else 
    {     
       return    1; 
    }  
 }       
 
/************************************************************************ 
 *º¯ÊýÔ­ÐÍ:      bit   BCAN_ENTER_RETMODEL(void)                        * 
 *²ÎÊý˵Ã÷:  ÎÞ                                                         * 
 *·µ»ØÖµ:                                                               * 
 *           0 ; ±íʾ³É¹¦½øÈ븴λ¹¤×÷ģʽ                               * 
 *           1 ; ±íʾ²»ÄܽøÈ븴λ¹¤×÷ģʽ                               * 
 *                                                                      *  
 *˵Ã÷:      CAN¿ØÖÆÆ÷½øÈ븴λ¹¤×÷ģʽ                                  * 
 ************************************************************************/  
bit   BCAN_ENTER_RETMODEL(void) 
 { 
    unsigned   char   TempData; 
    SJA_BCANAdr  = REG_CONTROL;                   //·ÃÎʵØÖ·Ö¸Ïò¿ØÖƼĴæÆ÷  
    TempData=  *SJA_BCANAdr;                      //±£´æÔ­Ê¼Öµ 
    *SJA_BCANAdr=(TempData|0x01);                 //ÖÃλ¸´Î»ÇëÇó 
    if((*SJA_BCANAdr&0x01) == 1) 
    { 
       return   0; 
    } 
    else 
    { 
       return   1; 
    } 
     
 } 
 
/************************************************************************ 
 *º¯ÊýÔ­ÐÍ:      bit   BCAN_QUIT_RETMODEL(void)                         * 
 *²ÎÊý˵Ã÷:  ÎÞ                                                         * 
 *·µ»ØÖµ:                                                               * 
 *           0 ; ±íʾ³É¹¦Í˳ö¸´Î»¹¤×÷ģʽ                               * 
 *           1 ; ±íʾ²»ÄÜÍ˳ö¸´Î»¹¤×÷ģʽ                               * 
 *                                                                      *  
 *˵Ã÷:      CAN¿ØÖÆÆ÷Í˳ö¸´Î»¹¤×÷ģʽ                                  * 
 ************************************************************************/  
 bit   BCAN_QUIT_RETMODEL(void) 
 { 
    unsigned   char   TempData; 
    SJA_BCANAdr = REG_CONTROL;                   //·ÃÎʵØÖ·Ö¸Ïò¿ØÖƼĴæÆ÷  
    TempData    = *SJA_BCANAdr;                  //±£´æÔ­Ê¼Öµ 
    *SJA_BCANAdr=(TempData&0xfe);       		 //Çå³ý¸´Î»ÇëÇó 
    if((*SJA_BCANAdr&0x01) == 0) 
    { 
       return   0;                               // 
    } 
    else 
    { 
       return   1;                              //Í˳ö³É¹¦ 
    } 
 
 } 
 
/************************************************************************ 
;*º¯ÊýÔ­ÐÍ:   bit   BCAN_SET_BANDRATE(unsigned char CAN_ByteRate)       * 
;*²ÎÊý˵Ã÷:  R7            ²¨ÌØÂÊ£¨Kbit/s£© BTR0     BTR1               * 
;*           0	            20              053H,    02FH                * 
;*           1	            40              087H,    0FFH               *   
;*           2	            50              047H,    02FH               * 
;*           3	            80              083H,    0FFH                * 
;*           4	            100             043H,    02fH                * 
;*           5	            125             03H,     01cH                 * 
;*           6              200             081H,    0faH               * 
;*           7	            250             01H,     01cH            * 
;*           8	            400             080H,    0faH                * 
;*           9	            500             00H,     01cH               * 
;*           10	            666             080H,    0b6H                 * 
;*           11	            800             00H,     016H             * 
;*           12	            1000            00H,     014H                  * 
;*·µ»ØÖµ:                                                               * 
;*           0 ;²¨ÌØÂÊÉèÖóɹ¦                                          * 
;*           1 ;²¨ÌØÂÊÉèÖÃʧ°Ü                                          * 
;*                                                                      *  
;*˵Ã÷:ÉèÖÃCAN¿ØÖÆÆ÷SJA1000ͨѶ²¨ÌØÂÊ.SJA1000µÄ¾§ÕñΪ±ØÐëΪ16MHZ,       * 
;*     ÆäËü¾§ÌåµÄƵÂʵÄÖµµÄ²¨ÌØÂÊ£¬Ðè×Ô¼º¼ÆËã ¡£¸Ã×Ó³ÌÐòÖ»ÄÜÓÃÓÚ        * 
;*     ¸´Î»Ä£Ê½                                                         *   
;************************************************************************/ 
unsigned  char	code	SJA_BTR_CODETAB[]={ 
    0x53,0x2F,		              //   ;20KBPSµÄÔ¤ÉèÖµ 
    0x87,0xFF,                     //;40KBPSµÄÔ¤ÉèÖµ 
    0x47,0x2F,                     //;50KBPSµÄÔ¤ÉèÖµ 
    0x83,0xFF,                     //;80KBPSµÄÔ¤ÉèÖµ 
    0x43,0x2f,                     //;100KBPSµÄÔ¤ÉèÖµ 
    0x03,0x1c,                     //;125KBPSµÄÔ¤ÉèÖµ 
    0x81,0xfa,                     //;200KBPSµÄÔ¤ÉèÖµ 
    0x01,0x1c,                     //;250KBPSµÄÔ¤ÉèÖµ 
    0x80,0xfa,                     //;400KBPSµÄÔ¤ÉèÖµ 
    0x00,0x1c,                     //;500KBPSµÄÔ¤ÉèÖµ 
    0x80,0xb6,                     //;666KBPSµÄÔ¤ÉèÖµ 
    0x00,0x16,                     //;800KBPSµÄÔ¤ÉèÖµ 
    0x00,0x14                     //;1000KBPSµÄÔ¤ÉèÖµ 
    
}; 
 
bit   BCAN_SET_BANDRATE(unsigned char CAN_ByteRate) 
{ 
  unsigned  char  BTR0_num,BTR1_num; 
  BTR0_num = SJA_BTR_CODETAB[CAN_ByteRate*2]; 
  BTR1_num = SJA_BTR_CODETAB[CAN_ByteRate*2+1]; 
  //½«²¨ÌØÂʵĵÄÔ¤ÉèÖµ×°Èësja1000µÄ×ÜÏß¶¨Ê±Æ÷ 
  SJA_BCANAdr=REG_BTR0;          		//·ÃÎʵØÖ·Ö¸Ïò×ÜÏß¶¨Ê±¼Ä´æÆ÷0 
  *SJA_BCANAdr=BTR0_num;      			//дÈë²ÎÊý 
  if(*SJA_BCANAdr != BTR0_num)			//УÑéдÈëÖµ 
  { 
    return  1;  
  } 
  SJA_BCANAdr=REG_BTR1;         		//·ÃÎʵØÖ·Ö¸Ïò×ÜÏß¶¨Ê±¼Ä´æÆ÷0 
  *SJA_BCANAdr=BTR1_num;      			//дÈë²ÎÊý 
  if(*SJA_BCANAdr != BTR1_num)			//УÑéдÈëÖµ 
  { 
    return  1;  
  } 
 
  return    0; 
}   
 
 
/************************************************************************ 
;*º¯ÊýÔ­ÐÍ:    BCAN_SET_OBJECT                                          * 
*²ÎÊý˵Ã÷:                                                              * 
 *    BCAN_ACR:´æ·ÅÑéÊÕ´úÂë¼Ä´æÆ÷£¨ACR£©µÄ²ÎÊýÉèÖà                      * 
 *    BCAN_AMR:´æ·Å½ÓÊÕÆÁ±Î¼Ä´æÆ÷£¨AMR£©µÄ²ÎÊýÉèÖà                      * 
;*·µ»ØÖµ:                                                               * 
;*           0 ;ͨÐŶÔÏóÉèÖóɹ¦                                        * 
;*           1 ;ͨÐŶÔÏóÉèÖÃʧ°Ü                                        * 
;*                                                                      *  
;*˵Ã÷:ÉèÖÃCAN½ÚµãµÄͨѶ¶ÔÏó£¬ÔÊÐí½ÓÊյı¨ÎÄIDºÅµÄ¸ß8λ(D10--D3) ¡£     * 
;*     ÔÊÐí½ÓÊյı¨ÎÄ,ÊÇÓÉAMRºÍACR¹²Í¬¾ö¶¨µÄ.                           *   
;*    Âú×ãÒÔÏÂÌõ¼þµÄIDºÅµÄ±¨ÎIJſÉÒÔ±»½ÓÊÕ                              * 
;*[£¨ID.10-ID.3£©¡Ô£¨AC.7-AC.0£©]||£¨AM.7-AM.0£©¡Ô11111111              * 
;*    ¸Ã×Ó³ÌÐòÖ»ÄÜÓÃÓÚ¸´Î»Ä£Ê½                                          *                                                                                                                     *              
;************************************************************************/ 
bit    BCAN_SET_OBJECT(unsigned char  BCAN_ACR,unsigned char  BCAN_AMR) 
{ 
   SJA_BCANAdr=REG_ACR;          		//·ÃÎʵØÖ·Ö¸ÏòÑéÊÕ´úÂë¼Ä´æÆ÷(ACR) 
  *SJA_BCANAdr=BCAN_ACR;        		//дÈë²ÎÊý 
  if(*SJA_BCANAdr != BCAN_ACR)  		//УÑéдÈëÖµ 
  { 
    return  1;  
  } 
  SJA_BCANAdr=REG_AMR;          		//·ÃÎʵØÖ·Ö¸ÏòÑéÊÕÆÁ±Î¼Ä´æÆ÷(AMR) 
  *SJA_BCANAdr=BCAN_AMR;        		//дÈë²ÎÊý 
  if(*SJA_BCANAdr != BCAN_AMR)  		//УÑéдÈëÖµ 
  { 
    return  1;  
  } 
 
  return    0; 
} 
 
/************************************************************************ 
;*º¯ÊýÔ­ÐÍ: bit  BCAN_SET_OUTCLK (unsigned char Out_Control, 	        * 
                                  unsigned char  Clock_Out);            * 
;*²ÎÊý˵Ã÷:										      					* 
 *    Out_Control:´æ·ÅÊä³ö¿ØÖƼĴæÆ÷ (OC)  µÄ²ÎÊýÉèÖà                   * 
 *    Clock_Out:´æ·ÅʱÖÓ·ÖÆµ¼Ä´æÆ÷ (CDR) µÄ²ÎÊýÉèÖà                     * 
 *                                                                      *    
;*·µ»ØÖµ:                                                               * 
;*           0 ;ÉèÖóɹ¦                                                * 
;*           1 ;ÉèÖÃʧ°Ü                                                * 
;*                                                                      *  
;*˵Ã÷:ÉèÖÃSJA1000µÄÊä³öģʽºÍʱÖÓ·ÖÆµ ¡£¸Ã×Ó³ÌÐòÖ»ÄÜÓÃÓÚ¸´Î»Ä£Ê½       *                                                                                                                     *              
;************************************************************************/ 
bit  BCAN_SET_OUTCLK (unsigned char Out_Control,     
                     unsigned char  Clock_Out) 
{ 
  SJA_BCANAdr=REG_OCR ;          		//·ÃÎʵØÖ·Ö¸ÏòÊä³ö¿ØÖƼĴæÆ÷ 
  *SJA_BCANAdr=Out_Control;      		//дÈë²ÎÊý 
  if(*SJA_BCANAdr != Out_Control)		//УÑéдÈëÖµ 
  { 
    return  1;  
  }  
  SJA_BCANAdr=REG_CDR;          		//·ÃÎʵØÖ·Ö¸ÏòÊä³ö¿ØÖƼĴæÆ÷ 
  *SJA_BCANAdr=Clock_Out;        		//дÈë²ÎÊý 
  return    0; 
} 
 
 
/************************************************************************ 
 *º¯ÊýÔ­ÐÍ: bit   BCAN_HW_INIT(unsigned char  BCAN_ACR,                 * 
 *                             unsigned char  BCAN_AMR,                 * 
 *                             unsigned char  Bus_Timing0,              * 
 *                             unsigned char  Bus_Timing1,              * 
 *                             unsigned char  Out_Control,              * 
 *                             unsigned char  Clock_Out                 * 
 *                            )                                         * 
 *²ÎÊý˵Ã÷:                                                             * 
 *    BCAN_ACR:´æ·ÅÑéÊÕ´úÂë¼Ä´æÆ÷£¨ACR£©µÄ²ÎÊýÉèÖà                      * 
 *    BCAN_AMR:´æ·Å½ÓÊÕÆÁ±Î¼Ä´æÆ÷£¨AMR£©µÄ²ÎÊýÉèÖà                      * 
 *    Bus_Timing0:´æ·Å×ÜÏß¶¨Ê±0¼Ä´æÆ÷(BTR0)µÄ²ÎÊýÉèÖà                   * 
 *    Bus_Timing1:´æ·Å×ÜÏß¶¨Ê±1¼Ä´æÆ÷(BTR1)µÄ²ÎÊýÉèÖà                   * 
 *    Out_Control:´æ·ÅÊä³ö¿ØÖƼĴæÆ÷ (OC)  µÄ²ÎÊýÉèÖà                   * 
 *    Clock_Out:´æ·ÅʱÖÓ·ÖÆµ¼Ä´æÆ÷ (CDR) µÄ²ÎÊýÉèÖà                     * 
 *                                                                      *                         
 *·µ»ØÖµ:                                                               * 
 *           0 ; ±íʾ³õʼ»¯³É¹¦                                         * 
 *           1 ; ±íʾ³õʼ»¯Ê§°Ü                                         * 
 *                                                                      *  
 *˵Ã÷:CAN¿ØÖÆÆ÷µÄ³õʼ»¯Ö»ÄÜÔÚ¸´Î»Ä£Ê½Ï²ÅÄÜÍê³É¡£³õʼ»¯²Ù×÷֮ǰÇëÏȽøÈë* 
 *     µ½¸´Î»²Ù×÷ģʽ,²¢½«Òª³õʼ»¯µÄ¸÷²ÎÊýµÄÖµ°´Êý¾ÝÊÖ²áÖеļÆËã·½·¨,Õý * 
 *     È·µÄ°´Êµ¼ÊÐèÒª¼ÆËãºÃ²ÎÊýºó£¬½«²ÎÊýдÈë¶ÔÓ¦µÄ¼Ä´æÆ÷ ¡£            * 
 *×¢£º ΪÁËCAN¿ØÖÆÆ÷µÄÕýÈ·ÔËÐУ¬ÇëÎñ±Ø×ÐϸµÄÔĶÁSJA1000µÄÊý¾ÝÊÖ²á       * 
 *                                                                      * 
 *ʾÀý£ºÉèÓ¦ÓÃϵͳÖо§Ì寵ÂÊ16MHZ£¬½ÚµãÖ»½ÓÊÕID(±êÖ¾·û£©¸ß°ËλΪ        * 
 *      '10101010'µÄÏûÏ¢£¬ÏµÍ³²¨ÌØÂÊΪ50Kbit/s,¹Ø±ÕCLKOUTÊä³ö¡£         * 
 *      Ôò¸ù¾ÝÊý¾ÝÊÖ²áÖеļÆËã·½·¨µÄ¸÷²ÎÊýÈçÏ£º                        * 
 *      ACR==0AAH,AMR==00H,BTR0==0C9H,BTR1==0C9H,OC==0FFH,CDR=48H       * 
 * Ôòµ÷Óñ¾º¯ÊýΪ£º                                                     * 
 *     BCAN_HW_INIT(0xaa,0x00,0xc9,0xc9,0xff,0x48)                      *                      
 ************************************************************************ 
 bit             BCAN_HW_INIT(unsigned char  BCAN_ACR,        
                              unsigned char  BCAN_AMR,       
                              unsigned char  Bus_Timing0,    
                              unsigned char  Bus_Timing1,    
                              unsigned char  Out_Control,     
                              unsigned char  Clock_Out       
                              )  
{ 
  SJA_BCANAdr=REG_ACR;          //·ÃÎʵØÖ·Ö¸ÏòÑéÊÕ´úÂë¼Ä´æÆ÷(ACR) 
  *SJA_BCANAdr=BCAN_ACR;        //дÈë²ÎÊý 
  if(*SJA_BCANAdr != BCAN_ACR)  //УÑéдÈëÖµ 
  { 
    return  1;  
  } 
  SJA_BCANAdr=REG_AMR;          //·ÃÎʵØÖ·Ö¸ÏòÑéÊÕÆÁ±Î¼Ä´æÆ÷(AMR) 
  *SJA_BCANAdr=BCAN_AMR;        //дÈë²ÎÊý 
  if(*SJA_BCANAdr != BCAN_AMR)  //УÑéдÈëÖµ 
  { 
    return  1;  
  } 
  SJA_BCANAdr=REG_BTR0;          //·ÃÎʵØÖ·Ö¸Ïò×ÜÏß¶¨Ê±¼Ä´æÆ÷0 
  *SJA_BCANAdr=Bus_Timing0;      //дÈë²ÎÊý 
  if(*SJA_BCANAdr != Bus_Timing0)//УÑéдÈëÖµ 
  { 
    return  1;  
  } 
  SJA_BCANAdr=REG_BTR1;          //·ÃÎʵØÖ·Ö¸Ïò×ÜÏß¶¨Ê±¼Ä´æÆ÷0 
  *SJA_BCANAdr=Bus_Timing1;      //дÈë²ÎÊý 
  if(*SJA_BCANAdr != Bus_Timing1)//УÑéдÈëÖµ 
  { 
    return  1;  
  } 
  SJA_BCANAdr=REG_OCR ;          //·ÃÎʵØÖ·Ö¸ÏòÊä³ö¿ØÖƼĴæÆ÷ 
  *SJA_BCANAdr=Out_Control;      //дÈë²ÎÊý 
  if(*SJA_BCANAdr != Out_Control)//УÑéдÈëÖµ 
  { 
    return  1;  
  }  
  SJA_BCANAdr=REG_CDR;          //·ÃÎʵØÖ·Ö¸ÏòÊä³ö¿ØÖƼĴæÆ÷ 
  *SJA_BCANAdr=Clock_Out;        //дÈë²ÎÊý 
  return    0; 
}                          
 
/************************************************************************ 
 *º¯ÊýÔ­ÐÍ:  bit   BCAN_DATA_WRITE(unsigned char *SendDataBuf)* 
 *²ÎÊý˵Ã÷:  ÌØ¶¨Ö¡¸÷ʽµÄÊý¾Ý·                                          * 
 *·µ»ØÖµ:                                                               * 
 *           0    ; ±íʾ½«Êý¾Ý³É¹¦µÄËÍÖÁ·¢ËÍ»º³åÇø                      * 
 *           1	  ; ±íʾÉÏÒ»´ÎµÄÊý¾ÝÕýÔÚ·¢ËÍ£¬                          * 
 *                ; ±íʾ·¢ËÍ»º³åÇø±»Ëø¶¨£¬²»ÄÜдÈëÊý¾Ý                  * 
 *                ; ±íʾдÈëÊý¾Ý´íÎó                                    *  
 *˵Ã÷: ½«´ý·¢ËÍÌØ¶¨Ö¡¸÷ʽµÄÊý¾Ý£¬ËÍÈëSJA1000·¢ËÍ»º´æÇøÖУ¬È»ºóÆô¶¯     * 
 *        SJA1000·¢ËÍ¡£                                                 * 
 *   ÌØ¶¨Ö¡¸ñʽΪ:¿ªÊ¼µÄÁ½¸ö×Ö½Ú´æ·Å 'ÃèÊö·û' ,ÒÔºóµÄΪÊý¾Ý             * 
 *   ÃèÊö·û°üÀ¨11볤µÄID(±êÖ¾·û£©\1λRTR\4λÃèÊöÊý¾Ý³¤¶ÈµÄDLC¹²16λ    * 
 *                                                                      * 
 *×¢£º±¾º¯ÊýµÄ·µ»ØÖµ½öָʾ£¬½«Êý¾ÝÕýȷдÈëSJA1000·¢ËÍ»º´æÇøÖÐÓë·ñ¡£     * 
 *    ²»Ö¸Ê¾SJA1000½«¸ÃÊý¾ÝÕýÈ··¢Ë͵½CAN×ÜÏßÉÏÍê±ÏÓë·ñ                  * 
 ************************************************************************/  
 bit   BCAN_DATA_WRITE(unsigned char *SendDataBuf) 
 { 
   unsigned  char  TempCount; 
   SJA_BCANAdr = REG_STATUS;            //·ÃÎʵØÖ·Ö¸Ïò״̬¼Ä´æÆ÷ 
   if((*SJA_BCANAdr&0x08) == 0)         //ÅжÏÉϴη¢ËÍÊÇ·ñÍê³É 
   { 
    return	1; 
   }   
 
   if((*SJA_BCANAdr&0x04)==0)          //ÅжϷ¢ËÍ»º³åÇøÊÇ·ñËø¶¨ 
   { 
     return	1; 
   }   
  
   SJA_BCANAdr = REG_TxBuffer1;        //·ÃÎʵØÖ·Ö¸Ïò·¢ËÍ»º³åÇø1 
   if((SendDataBuf[1]&0x10)==0)        //ÅжÏRTR£¬´Ó¶øµÃ³öÊÇÊý¾ÝÖ¡»¹ÊÇÔ¶³ÌÖ¡ 
   {  
     TempCount =(SendDataBuf[1]&0x0f)+2; //ÊäÈëÊý¾ÝÖ¡ 
   } 
 
   else 
   { 
     TempCount =2;                     //Ô¶³ÌÖ¡ 
   } 
 
  memcpy(SJA_BCANAdr,SendDataBuf,TempCount); 
   return 0; 
} 
 
/************************************************************************ 
 *º¯ÊýÔ­ÐÍ:  bit    BCAN_DATA_RECEIVE(unsigned char *RcvDataBuf);       * 
 *²ÎÊý˵Ã÷:  RcvDataBuf,´æ·Å΢´¦ÀíÆ÷±£´æÊý¾Ý»º³åÇø                      * 
 *·µ»ØÖµ:    0;½ÓÊճɹ¦                                                 * 
 *           1;½ÓÊÕʧ°Ü                                                 *  
 *˵Ã÷:CAN¿ØÖÆÆ÷½ÓÊÕÊý¾Ý,½öÏÞÓÚ½ÓÊÕÊý¾Ý                                 * 
 ************************************************************************/ 
 bit    BCAN_DATA_RECEIVE(unsigned char *RcvDataBuf) 
 { 
   unsigned  char  TempCount;  
   SJA_BCANAdr = REG_STATUS;                //·ÃÎʵØÖ·Ö¸Ïò״̬¼Ä´æÆ÷ 
   if((*SJA_BCANAdr&0x01)==0)               //Åжϱ¨ÎÄÊÇ·ñÓÐЧ 
   { 
      return 1; 
   } 
    
   SJA_BCANAdr = REG_RxBuffer2;             //·ÃÎʵØÖ·Ö¸Ïò½ÓÊÕ»º³åÇø2 
   if((*SJA_BCANAdr&0x10)==0)               //Èç¹ûÊÇÊý¾ÝÖ¡ 
   { 
     TempCount=(*SJA_BCANAdr&0x0f)+2;       //¼ÆË㱨ÎÄÖÐÊý¾ÝµÄ¸öÊý 
   } 
    
   else 
   { 
    TempCount=2; 
   } 
   SJA_BCANAdr = REG_RxBuffer1;             //·ÃÎʵØÖ·Ö¸Ïò½ÓÊÕ»º³åÇø1 
   memcpy(RcvDataBuf,SJA_BCANAdr,TempCount);//¶ÁÈ¡½ÓÊÕ»º³åÇøµÄ±¨ÎÄ 
   return  0; 
 } 
 
/************************************************************************ 
 *º¯ÊýÔ­ÐÍ:  bit  BCAN_CMD_PRG(unsigned char cmd)             * 
 *²ÎÊý˵Ã÷:  cmd:sja1000ÔËÐеÄÃüÁî×Ö                                    * 
 *             01:·¢ËÍÇëÇó                                              * 
 *             02£ºÖÐÖ¹·¢ËÍ                                             * 
 *             04£ºÊͷŽÓÊÕ»º³åÇø                                       * 
 *             08£ºÇå³ý³¬ÔØ×´Ì¬                                         * 
 *             0x10:½øÈë˯Ãß״̬                                        * 
 *                                                                      * 
 *·µ»ØÖµ:                                                               * 
 *           0 ; ±íʾÃüÁîÖ´Ðгɹ¦                                       * 
 *           1 ; ±íʾÃüÁîÖ´ÐÐʧ°Ü                                       * 
 *                                                                      *  
 *˵Ã÷:      Ö´ÐÐsja1000ÃüÁî                                            *  
 ************************************************************************/  
 bit  BCAN_CMD_PRG(unsigned char cmd) 
 { 
   SJA_BCANAdr=REG_COMMAND;            //·ÃÎʵØÖ·Ö¸ÏòÃüÁî¼Ä´æÆ÷ 
   *SJA_BCANAdr=cmd;                   //Æô¶¯ÃüÁî×Ö 
   switch(cmd) 
   { 
     case  TR_CMD:                     //·¢ËÍÇëÇóÃüÁî 
           return    0; 
           break; 
 
     case  AT_CMD:                     //زÕÛ·¢ËÍÃüÁî  
           SJA_BCANAdr = REG_STATUS;   //·ÃÎʵØÖ·Ö¸Ïò״̬¼Ä´æÆ÷    
           if((*SJA_BCANAdr & 0x20)==0)//ÅжÏÊÇ·ñÕýÔÚ·¢ËÍ 
           { 
              return  0; 
           } 
           else 
           { 
              return  1; 
           }    
           break;  
     case  RRB_CMD:                    //ÊͷŽÓÊÕ»º³åÇø  
           SJA_BCANAdr = REG_STATUS;   //·ÃÎʵØÖ·Ö¸Ïò״̬¼Ä´æÆ÷    
           if((*SJA_BCANAdr & 0x01)==1)//ÅжÏÊÇ·ñÊͷųɹ¦ 
           { 
             return  1; 
           } 
           else 
           { 
              return  0; 
           }    
           break;  
   
     case  COS_CMD:                    //Çå³ý³¬ÔØ×´Ì¬ 
           SJA_BCANAdr = REG_STATUS;   //·ÃÎʵØÖ·Ö¸Ïò״̬¼Ä´æÆ÷    
           if((*SJA_BCANAdr & 0x02)==0)//ÅжÏÇå³ý³¬ÔØÊÇ·ñ³É¹¦ 
           { 
             return  0; 
           } 
           else 
           { 
              return  1; 
           }    
           break;  
      
     case  GTS_CMD:                    //½øÈë˯Ãß״̬ÃüÁî  
           return    0; 
           break;  
     default: 
             return  1; 
             break;  
   } 
 
 }