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

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

?? can_lib.c

?? 這是以ATMEL公司的T89C51CC01和T89C51CC02設計canopen節點的資料
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*C*****************************************************************************
* FILE_NAME         : Can_lib.c                                             
*----------------------------------------------------------------------------
* FILE_CREATED_BY   : BERTHY JS                                             
* FILE_CREATION_DATE: 27/09/99                                              
*----------------------------------------------------------------------------
* FILE_PURPOSE: provide low level functions for CAN controller   
*
* Timing with 12 MHz oscillator and compiled with Keil V6.00i
*
* - CANSetBRP    	:  14 us                                 
* - CANSetSJW       :  18 us                             
* - CANSetPRS       :  16 us                                 
* - CANSetPHS2      :  17 us                                                                               
* - CANSetPHS1      :  16 us                                                        
* - FindFirstChIt   :  24 us max(it on channel14)                                                       
* - ConfChannel_Rx  : 110 us max(ide with mask),  59 us max(std with mask)                                                       
* - SendCanMsg      : 333 us max(ide, 8 data)  , 306 us max(std, 8 data)                                                        
* - ReadCanMsg_Rx   : 392 us max(ide, 8data) ,   326 us max(std, 8 data)                                                         
* - RazAllMailbox	: 890 us
******************************************************************************/

/*_____ I N C L U D E - F I L E S ____________________________________________*/

#include "compiler.h"
#include "config.h"
#include "can_lib.h"


/*_____ G L O B A L S ________________________________________________________*/

/* variables used by ConfChannel_Rx. */
can_id_t   can_rx_filt, 
           can_rx_msk;

/* variables used by SendCanMsg. */
Uchar * pt_candata_tx; 
can_id_t can_tx_id;
/* variables used by ReadCanMsg. */
can_msg_t * pt_st_can_rx;


/* bit decalaration used by SendCanMsg and ConfChannel_rx 
*  this variable is redeclared in conf_rx and conf_tx.
* -------------------------------------------------------*/
bdata Uchar conf;
Sbit( msk_ide, conf, 7);  /* just for TX      */
Sbit( msk_rtr, conf, 6);  /* just for RX      */
Sbit( rtr    , conf, 5);  /* commun Rx and TX */
Sbit( ide    , conf, 4);  /* commun RX and TX */
Sbit( buffer , conf, 0);  /* just for TX      */


/* bit decalaration used by ReadCanMsg 
*------------------------------------
* The declaration of NEW_CONF depend of declaration below
* #define CHANNEL_DISABLE		0x01 -> bit0 of b_var_read
* #define CHANNEL_RX_ENABLE		0x02 -> bit1 of b_var_read
* #define CHANNEL_RXB_ENABLE	0x04 -> bit2 of b_var_read
*/
bdata Uchar b_var_read;
Sbit( bit_read_7, b_var_read, 7);
Sbit( bit_read_6, b_var_read, 6);
Sbit( bit_read_5, b_var_read, 5);
Sbit( bit_read_4, b_var_read, 4);
Sbit( bit_read_3, b_var_read, 3);
Sbit( bit_read_2, b_var_read, 2);
Sbit( bit_read_1, b_var_read, 1);
Sbit( bit_read_0, b_var_read, 0);

#define NEW_CONF_CH_DISABLE 	bit_read_0
#define NEW_CONF_CH_RX_ENABLE 	bit_read_1
#define NEW_CONF_CH_RXB_ENABLE 	bit_read_2


/* bit decalaration used by FindFirstChIt and fct_can_it
*-------------------------------------------------------*/
bdata Uchar bit_var;
Sbit( bit_7, bit_var, 7);
Sbit( bit_6, bit_var, 6);
Sbit( bit_5, bit_var, 5);
Sbit( bit_4, bit_var, 4);
Sbit( bit_3, bit_var, 3);
Sbit( bit_2, bit_var, 2);
Sbit( bit_1, bit_var, 1);
Sbit( bit_0, bit_var, 0);

#define IT_TXOK bit_6
#define IT_RXOK bit_5


/*_____ P R I V A T E - F U N C T I O N S - D E C L A R A T I O N ____________*/


/*_____ L O C A L S __________________________________________________________*/


/*_____ P U B L I C - F U N C T I O N S ______________________________________*/


/*_____ P R I V A T E - F U N C T I O N S ____________________________________*/


/*F****************************************************************************
* FUNCTION_NAME: RazAllMailbox                                                  
*----------------------------------------------------------------------------
* FUNCTION_AUTHOR: BERTHY J.S.                                              
* FUNCTION_DATE  : 13/10/99                                                 
*----------------------------------------------------------------------------
* FUNCTION_PURPOSE: Raz mailbox, status and control register     
* FUNCTION_INPUTS : void                                                          
* FUNCTION_OUTPUTS: void                                                       
******************************************************************************/
void RazAllMailbox (void)
{
  Uchar num_channel, num_data;

  for (num_channel = 0; num_channel < NB_CHANNEL; num_channel++)
  {
    CANPAGE  = num_channel << 4;
    CANCONCH = 0;
    CANSTCH  = 0;
    CANIDT1  = 0;
    CANIDT2  = 0;
    CANIDT3  = 0;
    CANIDT4  = 0;
    CANIDM1  = 0;
    CANIDM2  = 0;
    CANIDM3  = 0;
    CANIDM4  = 0;
    for (num_data = 0; num_data < NB_DATA_MAX; num_data++)
    {
      CANMSG = 0;
    }
  }

}


/*F****************************************************************************
* FUNCTION_NAME: CanSetBRP                                                  
*----------------------------------------------------------------------------
* FUNCTION_AUTHOR: BERTHY J.S.                                              
* FUNCTION_DATE  : 27/09/99                                                 
*----------------------------------------------------------------------------
* FUNCTION_PURPOSE: Initialise the Prescaler for CAN Controler baudrate     
*                    with value pasted in parameter.                         
*                    Tscl = 2*(prescaler +1) / Fin                           
*                    -----------------------------                            
* FUNCTION_INPUTS : Uchar prescaler : CAN_BAUDRATE_MIN to CAN_BAUDRATE_MAX                    
* FUNCTION_OUTPUTS: void                                                         
******************************************************************************/
void CanSetBRP (Uchar prescaler)
{

  if ((prescaler <= CAN_PRESCALER_MAX) &&
      (prescaler >= CAN_PRESCALER_MIN)   )
  {
    CANBT1 = prescaler << 1;
  }

}


/*F***************************************************************************
* FUNCTION_NAME: CanSetSJW                                                  
*----------------------------------------------------------------------------
* FUNCTION_AUTHOR: BERTHY J.S.                                              
* FUNCTION_DATE  : 27/09/99                                                 
*----------------------------------------------------------------------------
* FUNCTION_PURPOSE: Initialise the Re_synchronization jump width for CAN    
*                    Controler baudrate with value pasted in parameter.      
*                      Tsjw = Tscl * (sjw + 1)                                
*                      -----------------------                               
* FUNCTION_INPUTS : Uchar sjw : CAN_SJW_MIN to CAN_SJW_MAX                                    
* FUNCTION_OUTPUTS: void                                                        
******************************************************************************/
void CanSetSJW (Uchar sjw)
{
 
  if ((sjw <= CAN_SJW_MAX) &&
      (sjw >= CAN_SJW_MIN)   )
  {
    CANBT2 &= MSK_CANBT2_SJW;	/* RAZ of field sjw.  */
    CANBT2 |= (sjw << 5);
  }

}



/*F****************************************************************************
* FUNCTION_NAME: CanSetPRS                                                  
*----------------------------------------------------------------------------
* FUNCTION_AUTHOR: BERTHY J.S.                                              
* FUNCTION_DATE  : 27/09/99                                                 
*----------------------------------------------------------------------------
* FUNCTION_PURPOSE: Initialise the Programation time segment for CAN        
*                    Controler with value pasted in parameter.               
*                      Tprs = Tscl * (prs + 1)                                
*                      -----------------------                               
* FUNCTION_INPUTS : Uchar prs : CAN_PRS_MIN to CAN_PRS_MAX                                    
* FUNCTION_OUTPUTS: void                                                         
******************************************************************************/
void CanSetPRS (Uchar prs)
{

  if ((prs <= CAN_PRS_MAX) &&
      (prs >= CAN_PRS_MIN)   )
  {
    CANBT2 &= MSK_CANBT2_PRS;   /* RAZ of field prs.  */
    CANBT2 |= (prs << 1);
  }

}


/*F***************************************************************************
* FUNCTION_NAME: CanSetPHS2                                                 
*----------------------------------------------------------------------------
* FUNCTION_AUTHOR: BERTHY J.S.                                              
* FUNCTION_DATE  : 27/09/99                                                 
*----------------------------------------------------------------------------
* FUNCTION_PURPOSE: Initialise the Phase segment 2 for CAN Controller       
*                    with value pasted in parameter.                         
*                      Tphs2 = Tscl * (phs2 + 1)                              
*                      -------------------------                             
* FUNCTION_INPUTS : Uchar phs2: CAN_PHS2_MIN to CAN_PHS2_MAX                                 
* FUNCTION_OUTPUTS: void                                                         
******************************************************************************/
void CanSetPHS2 (Uchar phs2)
{
  if ((phs2 <= CAN_PHS2_MAX) &&
      (phs2 >= CAN_PHS2_MIN)   )
  {
    CANBT3 &= ~MSK_CANBT3_PHS2;  /* RAZ of field PHS2.  */
    CANBT3 |= (phs2 << 4);
  }

}



/*F****************************************************************************
* FUNCTION_NAME: CanSetPHS1                                                 
*----------------------------------------------------------------------------
* FUNCTION_AUTHOR: BERTHY J.S.                                              
* FUNCTION_DATE  : 27/09/99                                                 
*----------------------------------------------------------------------------
* FUNCTION_PURPOSE: Initialise the Phase segment 1 for CAN Controller       
*                    with value pasted in parameter.                         
*                      Tphs1 = Tscl * (phs1 + 1)                              
*                      -------------------------                             
* FUNCTION_INPUTS : Uchar phs1 : CAN_PHS1_MIN to CAN_PHS1_MAX                                 
* FUNCTION_OUTPUTS: void                                                        
******************************************************************************/
void CanSetPHS1 (Uchar phs1)
{
  if ((phs1 <= CAN_PHS1_MAX) &&
      (phs1 >= CAN_PHS1_MIN)   )
  {
    CANBT3 &= MSK_CANBT3_PHS1;   /* RAZ field of phs1.  */
    CANBT3 |= (phs1 << 1);
  }

}


/*F**************************************************************************
* FUNCTION_NAME: ConfChannel_Rx                                             
*----------------------------------------------------------------------------
* FUNCTION_AUTHOR: BERTHY J.S.                                              
* FUNCTION_DATE  : 28/09/99                                                 
*----------------------------------------------------------------------------
* FUNCTION_PURPOSE: Configure the channel in reception,
*        The identifier filtered and mask are initialized with the 
*        value contain in global variables can_rx_id and can_rx_msk.     
*        The configuration is defined in globale variable conf_rx.                   
*                          
* FUNCTION_INPUTS : void
* FUNCTION_OUTPUTS: void                                                    
*----------------------------------------------------------------------------
* GLOBAL VARIABLES USED :
*	- conf_rx
*	- can_rx_filt
*	- can_rx_msk
******************************************************************************
* The variable conf_rx must contain information:                                   
*    - on ide:
*           standart (CONF_NOIDE) or 
*           extended (CONF_IDE)                     
*    - on ide mask, 
*           no mask on ide bit(CONF_NOMSK_IDE) or
*           mask on ide bit   (CONF_MSK_IDE) 
*    - on rtr:
*           data frame   (CONF_NORTR) or 
*           remote frame (CONF_RTR)                     
*    - on rtr mask, 
*           no mask on rtr bit(CONF_NOMSK_RTR) or 
*           mask on rtr bit   (CONF_MSK_RTR) 
*    - on buffer mode
*           channel is for the buffer mode (CONF_BUFFER) or
*           channel is not for buffer mode (CONF_NOBUFFER) 
*
* Exemple of configuration:                                                                   
* ------------------------                                                                   
* conf_rx = CONF_IDE | CONF_NOMSK_IDE | CONF_NORTR | 
*           CONF_NOMSK_RTR | CONF_NOBUFFER                                       
*                                                                            
******************************************************************************
* NOTE:                                                                      
*     It's very important to make sure that channel is free.                 
*     No verification are perform by this function.                          
*     The corresponding channel must selected before called this function
*
*     When conf_rx = 0 -> CONF_NOIDE | CONF_NOMSK_IDE | CONF_NORTR |
*                         CONF_NOMSK_RTR | NO_BUFFER 
*
* Exemple of use:
*---------------
*
*  can_rx_filt.ext = 0x5555555;
*  can_rx_msk.ext  = 0x00;
*  conf_rx         = CONF_IDE|CONF_MSK_IDE|CONF_NOBUFFER;
*  CAN_SET_CHANNEL(CHANNEL_1);
*  ConfChannel_Rx();
*
******************************************************************************/
void ConfChannel_Rx()
{


  CANSTCH  = 0x00;               
  CANCONCH = 0x00;            

  if (ide == TRUE)
  {                                /* identifier = 29 bits.            */  
    CANIDT1 = CAN_SET_EXT_ID_28_21 (can_rx_filt.ext);
    CANIDT2 = CAN_SET_EXT_ID_20_13 (can_rx_filt.ext);
    CANIDT3 = CAN_SET_EXT_ID_12_5  (can_rx_filt.ext);
    CANIDT4 = CAN_SET_EXT_ID_4_0   (can_rx_filt.ext);

    CANIDM1 = CAN_SET_EXT_MSK_28_21 (can_rx_msk.ext);
    CANIDM2 = CAN_SET_EXT_MSK_20_13 (can_rx_msk.ext);
    CANIDM3 = CAN_SET_EXT_MSK_12_5  (can_rx_msk.ext);
    CANIDM4 = CAN_SET_EXT_MSK_4_0   (can_rx_msk.ext);
    CANCONCH|= MSK_CANCONCH_IDE;  /* set bit ide in CANCONCH.  */
  }
  else                        /* In Standart mode (ide = B_FALSE), */
  {                           /* identifier = 11bits.              */
    CANIDT1 = CAN_SET_STD_ID_10_4 (can_rx_filt.std);
    CANIDT2 = CAN_SET_STD_ID_3_0 (can_rx_filt.std);

    CANIDM1 = CAN_SET_STD_MSK_10_4 (can_rx_msk.std);
    CANIDM2 = CAN_SET_STD_MSK_3_0 (can_rx_msk.std);
    CANIDM4 = 0;
  }

  if (rtr == TRUE)
  {
    CANIDT4 |= MSK_CANIDT4_RTRTAG;   /* set bit rtr in CANIDT4.   */   
  }
  else
  {
    CANIDT4 &=~MSK_CANIDT4_RTRTAG;   /* clear bit rtr in CANIDT4. */
  }

  if (msk_rtr == TRUE)
  {
    CANIDM4 |= MSK_CANIDM4_RTRMSK;	 /* set bit rtr in CANIDM4.   */ 
  }
  
  if (msk_ide == TRUE)
  {
    CANIDM4 |= MSK_CANIDM4_IDEMSK;   /* set bit ide in CANIDM4.   */
  }

  if (buffer == TRUE)
  {
    ENABLE_CHANNEL_BUFFER; /* Buffer Reception enabled.*/
  }
  else
  {
    ENABLE_CHANNEL_RX; /* Reception enabled.*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产凹凸成av人导航| 色婷婷国产精品| 亚洲成av人片一区二区三区| 亚洲精品网站在线观看| 国产精品的网站| 亚洲女同ⅹxx女同tv| 亚洲视频一二三区| 一区二区三区av电影| 亚洲人成人一区二区在线观看| 日本一区二区成人| 中文字幕亚洲欧美在线不卡| 国产精品久久久久久久久免费桃花| 中文字幕av一区 二区| 日本一二三不卡| 亚洲视频在线观看三级| 亚洲综合视频网| 日韩精品欧美成人高清一区二区| 五月开心婷婷久久| 美国十次了思思久久精品导航| 激情丁香综合五月| 成熟亚洲日本毛茸茸凸凹| 波多野结衣在线一区| 欧洲国内综合视频| 久久这里只有精品首页| 国产精品福利一区| 午夜免费久久看| 国产精品88av| 欧亚洲嫩模精品一区三区| 日韩精品一区二区三区四区视频| 国产日韩一级二级三级| 亚洲777理论| 国产成人精品一区二| 欧美色国产精品| 国产欧美一二三区| 亚洲va欧美va国产va天堂影院| 国产在线视频不卡二| 色老汉一区二区三区| 337p粉嫩大胆色噜噜噜噜亚洲 | 欧美一区二区三区爱爱| 欧美国产日韩一二三区| 亚洲一二三区在线观看| 国产在线日韩欧美| 欧美精品在欧美一区二区少妇| 久久综合av免费| 午夜久久久久久电影| 成人午夜av电影| 日韩女优毛片在线| 亚洲国产欧美一区二区三区丁香婷| 激情小说欧美图片| 欧美日韩国产片| 亚洲欧美激情插 | 亚洲欧美日韩中文播放| 裸体健美xxxx欧美裸体表演| 91啪亚洲精品| 国产网站一区二区三区| 视频在线观看一区| 色呦呦日韩精品| 久久亚洲免费视频| 麻豆视频观看网址久久| 欧美日韩高清在线播放| 亚洲天堂精品在线观看| 成人综合婷婷国产精品久久免费| 欧美日韩高清一区二区不卡 | 欧美一区二区三区在线电影| 伊人色综合久久天天人手人婷| 亚洲一区免费视频| 成人激情图片网| 欧美激情一区二区三区蜜桃视频| 另类的小说在线视频另类成人小视频在线| 欧美性感一区二区三区| 亚洲主播在线播放| 91久久国产最好的精华液| 亚洲男同1069视频| 欧美综合天天夜夜久久| 樱花草国产18久久久久| 欧美亚洲日本一区| 亚洲国产成人va在线观看天堂| 91麻豆国产在线观看| 亚洲视频一区二区在线| 91高清在线观看| 洋洋av久久久久久久一区| 91热门视频在线观看| 一区二区三区四区中文字幕| 色94色欧美sute亚洲13| 亚洲图片欧美综合| 日韩天堂在线观看| 国产呦萝稀缺另类资源| 国产精品视频第一区| 色综合天天综合网天天看片| 亚洲与欧洲av电影| 日韩欧美一区二区在线视频| 免费人成黄页网站在线一区二区 | 国产午夜亚洲精品羞羞网站| 国产suv一区二区三区88区| 亚洲天堂成人在线观看| 欧美理论电影在线| 国产精品亚洲一区二区三区妖精| 国产午夜一区二区三区| 日本精品一区二区三区高清| 婷婷亚洲久悠悠色悠在线播放| 欧美岛国在线观看| 国产iv一区二区三区| 亚洲自拍欧美精品| 精品国产一二三| 91老师片黄在线观看| 日本伊人精品一区二区三区观看方式| 日韩欧美亚洲国产另类| 成人手机电影网| 日韩国产在线一| 国产精品欧美综合在线| 欧美日本国产一区| 成人激情小说网站| 日韩有码一区二区三区| 国产精品免费视频观看| 欧美一区二区福利在线| 99久久精品国产一区| 奇米综合一区二区三区精品视频| 亚洲国产岛国毛片在线| 欧美日韩午夜影院| 91一区一区三区| 韩国理伦片一区二区三区在线播放| 亚洲黄色免费电影| 亚洲国产精品精华液ab| 欧美大片一区二区三区| 91豆麻精品91久久久久久| 国产成人一级电影| 午夜欧美在线一二页| 亚洲三级在线播放| 国产精品素人一区二区| 精品国产髙清在线看国产毛片| 色综合久久88色综合天天| 国产成人在线视频播放| 久久电影网电视剧免费观看| 五月天婷婷综合| 亚洲综合久久久久| 一区二区三区中文在线观看| 欧美激情综合五月色丁香| 精品99999| 精品久久久久香蕉网| 欧美一区二区三区视频免费 | 亚洲综合在线五月| 国产亚洲欧美日韩日本| 久久综合色之久久综合| 精品人伦一区二区色婷婷| 欧美一级高清片在线观看| 欧美日韩电影一区| 欧美日韩五月天| 欧美日韩国产一区| 欧美日韩一区二区三区四区 | 国产精品一色哟哟哟| 久草精品在线观看| 韩日欧美一区二区三区| 激情综合一区二区三区| 久久国产麻豆精品| 久久精品国产网站| 国产真实乱子伦精品视频| 韩国女主播一区| 丰满岳乱妇一区二区三区| 丰满亚洲少妇av| 91免费观看视频在线| 色国产精品一区在线观看| 欧美色图在线观看| 欧美福利一区二区| 欧美变态凌虐bdsm| 国产欧美一区二区三区在线老狼| 久久精品夜夜夜夜久久| 亚洲欧美综合网| 亚洲成av人综合在线观看| 免费高清在线视频一区·| 久久国产精品99久久人人澡| 国产成人精品亚洲日本在线桃色| 成人一区二区三区在线观看| www.欧美亚洲| 欧美日韩在线播放一区| 精品美女一区二区| |精品福利一区二区三区| 亚洲一二三级电影| 久久99日本精品| 99麻豆久久久国产精品免费优播| 在线观看一区不卡| 精品国产乱码久久久久久闺蜜| 欧美极品另类videosde| 亚洲国产一区二区在线播放| 蜜臀av一区二区| 97久久精品人人爽人人爽蜜臀| 欧美三级蜜桃2在线观看| 久久久久国产精品厨房| 亚洲精品成人天堂一二三| 奇米在线7777在线精品| av不卡免费在线观看| 欧美一区二区黄色| 亚洲品质自拍视频网站| 精品一区二区三区视频在线观看| 成人网在线免费视频| 日韩小视频在线观看专区| 亚洲视频一区在线观看| 国产在线观看一区二区| 欧美日韩免费观看一区三区| 国产精品国产自产拍在线| 蜜臀av亚洲一区中文字幕|