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

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

?? linprot.c

?? BCM 控制demo源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
#define LINPROT_C
#if !defined(USEXGATE)
/******************************************************************************
*                                                       
*       Copyright (C) 2005 Freescale Semiconductor, Inc.
*       All Rights Reserved								              
*														                            
* Filename:     linprot.c                
*														                            
* Revision:      										                    
*														                            
* Functions:    LIN Protocol module.  Master and Slave State Machines
*												                            
* Description:  
*												                            
* Notes:        
*												                            
******************************************************************************/

#include <linbase.h>

#pragma MESSAGE DISABLE C4200 /* WARNING C4200: other segment than in previous declaration */

/****************************************************************************
 * Defines 
 ***************************************************************************/
#define LIN_SYNC_FIELD                  0x55    /* Sync byte */
#define LIN_REQUEST_COMMAND_FRAME       0x3C    /* Master Request Command Frame ID */
#define LIN_RESPONSE_COMMAND_FRAME      0x3D    /* Slave Response Command Frame ID */
#define LIN_COMMAND_SLEEP               0x00    /* Command code for Go to Sleep Mode */

/****************************************************************************
 * All common-purpose RAM variables shall be declared here.
 * Some of the variables (more often used) can be located in the DIRECT page
 ***************************************************************************/
LIN_ZPAGE LIN_BYTE      LIN_ProtBuf[LIN_PROT_BUF_LEN];   /* Protocol buffer */

#if defined(USEZEROPAGE)
#pragma DATA_SEG __SHORT_SEG ZeroSeg
#endif /* defined(USEZEROPAGE) */

LIN_ZPAGE LIN_BYTE      LIN_StateFlags;             /* State machine status  */

LIN_ZPAGE LIN_BYTE      LIN_TmpSCIByte;             /* byte to receive byte from SCI                   */
                                                    /* it shoud be used only under disabled interrupts */
LIN_ZPAGE LIN_BYTE      LIN_ChkSum;                 /* byte to calculate checksum                      */
LIN_ZPAGE LIN_BYTE      LIN_MsgLength;              /* Message length [2, 4, 8]   */

LIN_ZPAGE LIN_BYTE      LIN_SaveIdx;                /* Current processed message index */

LIN_ZPAGE LIN_BYTE      LIN_BufCounter;             /* ProtBuf counter point to sended byte for FLAG_DATA_SEND         */
                                                    /* or to first free byte for FLAG_DATA_RECEIVE or FLAG_DATA_IGNORE */
#if defined(MASTER)
LIN_ZPAGE LINMsgIdType  LIN_SaveIdentifier;         /* Message identifier */
#endif /* defined(MASTER) */
 
#if defined(USEZEROPAGE)
#pragma DATA_SEG DEFAULT
#endif /* defined(USEZEROPAGE) */

/****************************************************************************
 * Functions 
 ***************************************************************************/
#pragma CODE_SEG .lintext

 /***************************************************************************
 * Function :   LIN_CopyToBuf
 *
 * Description: Copy data from src to LIN_ProtBuf
 *
 * Returns:     none
 *
 * Notes:       OPTIM
 **************************************************************************/
void near LIN_CopyToBuf( LIN_BYTE * src )
{
    LIN_BYTE i;

#if defined(LINAPI_1_0)

    /* reverse copy for LIN API */
        
    for( i = 0; i < LIN_MsgLength; i++ )
    {
        LIN_ProtBuf[i] = src[LIN_MsgLength - i - 1];
    }

#else /* !defined(LINAPI_1_0) */

    /* normal copy for Freescale API */
        
    for( i = 0; i < LIN_MsgLength; i++ )
    {
        LIN_ProtBuf[i] = src[i];
    }

#endif
}


/***************************************************************************
 * Function :   LIN_CopyFromBuf
 *
 * Description: Copy data from LIN_ProtBuf to dst 
 *
 * Returns:     none
 *
 * Notes:       OPTIM
 **************************************************************************/
void near LIN_CopyFromBuf( LIN_BYTE * dst )
{
    LIN_BYTE i;

#if defined(LINAPI_1_0)

    /* reverse copy for LIN API */
        
    for( i = 0; i < LIN_MsgLength; i++ )
    {
        dst[i] = LIN_ProtBuf[LIN_MsgLength - i - 1];
    }

#else /* !defined(LINAPI_1_0) */

    /* normal copy for Freescale API */
        
    for( i = 0; i < LIN_MsgLength; i++ )
    {
        dst[i] = LIN_ProtBuf[i];
    }

#endif
}


/***************************************************************************
 * Function :   LIN_ChkAddByte
 *
 * Description: Add byte with carry to LIN_ChkSum variable 
 *                       
 * Returns:     none
 *
 * Notes:       
 *
 **************************************************************************/
#if defined(CW12)
#pragma OPTION ADD handle_register "-Or"
#endif /* defined(CW12) */

void near LIN_ChkAddByte(LIN_BYTE byte)
{

#if defined(CW12)
    asm   
    {
        ADDB  LIN_ChkSum;
        ADCB  #0;
        STAB  LIN_ChkSum;
    }
#endif /* defined(CW12) */
}


#if defined(CW12)
#pragma OPTION DEL handle_register 
#endif /* defined(CW12) */


/***************************************************************************
 * Function :   LIN_Error
 *
 * Description: Set error and go to LIN_FLAG_IGNORE state
 * 
 * Returns:     none
 *
 * Notes:       Can be called only from states:
 *              MASTER: LIN_FLAG_SEND_HEADER,
 *                      LIN_FLAG_SEND_DATA,
 *                      LIN_FLAG_IGNORE_DATA,
 *                      LIN_FLAG_RECEIVE_DATA
 *              SLAVE:  LIN_FLAG_RECEIVE_SYNC,
 *                      LIN_FLAG_RECEIVE_ID,
 *                      LIN_FLAG_SEND_DATA,
 *                      LIN_FLAG_RECEIVE_DATA
 *
 **************************************************************************/
void near LIN_Error( void )
{
#if defined(MASTER)
    LIN_CancelTimeout();        /* Cancel MaxFrame timeout */
#endif /* defined(MASTER) */

    /* Check what type of the error occure -- Tx or Rx */

#if defined(MASTER)
    if ( LIN_StateFlags & ( LIN_FLAG_SEND_HEADER | LIN_FLAG_SEND_DATA ))
#endif /* defined(MASTER) */
#if defined(SLAVE)
    if ( LIN_StateFlags & LIN_FLAG_SEND_DATA )
#endif /* defined(SLAVE) */
    {
        LIN_SetTxErr();
    }
    else
    {
        LIN_SetRxErr();
    }

    LIN_StateFlags = LIN_FLAG_IGNORE;
}


/***************************************************************************
 * Function :   LIN_EndOfFrame
 *
 * Description: Non-error end of frame
 * 
 * Returns:     none
 *
 * Notes:       Can be called only from states:
 *              MASTER: 
 *                      LIN_FLAG_SEND_DATA,
 *                      LIN_FLAG_IGNORE_DATA,
 *                      LIN_FLAG_RECEIVE_DATA
 *              SLAVE:  
 *                      LIN_FLAG_RECEIVE_ID,
 *                      LIN_FLAG_SEND_DATA,
 *                      LIN_FLAG_RECEIVE_DATA
 *
 **************************************************************************/
void near LIN_EndOfFrame( void )
{
#if defined(MASTER)
    LIN_CancelTimeout();        /* Cancel MaxFrame timeout */
#endif /* defined(MASTER) */

    /* Check what type of frame ended -- Tx or Rx */
    if ( LIN_StateFlags & LIN_FLAG_SEND_DATA )
    {
        LIN_ShiftTxErr();
    }
    else
    {
        LIN_ShiftRxErr();
    }

#if !defined(LINAPI_1_0)

    /* Check Command Frame -- only for Freescale API -- OPTIM */

    if ( 
            /* We process Command Frame only if node configured to Receive or send data for it */        
            ( LIN_StateFlags & (LIN_FLAG_SEND_DATA | LIN_FLAG_RECEIVE_DATA) ) &&
        
            /* AND check frame's ID that we have just processed */

#if defined(MASTER)
            /* For Master: LIN_SaveIdentifier -- just processed frame's identifier */
            ( LIN_SaveIdentifier == LIN_REQUEST_COMMAND_FRAME ) 
#endif /* defined(MASTER) */

#if defined(SLAVE)
        /* For Slave: LinMsgId[LIN_SaveIdx] & LIN_MSG_INDEX_MASK -- just processed frame's identifier */
        /* NB: LIN_SaveIdx exists becouse we already check that we are not ignore this message */
            ( (LinMsgId[LIN_SaveIdx] & LIN_MSG_INDEX_MASK) == LIN_REQUEST_COMMAND_FRAME )
#endif /* defined(SLAVE) */
       )
    {
        /* yes, we have just processed Master Command Request Frame */

        /* Check Command code */
        if ( LIN_ProtBuf[0] == LIN_COMMAND_SLEEP )
        {
            /* Go to Sleep Mode command */

            LIN_StateFlags = LIN_FLAG_IGNORE | LIN_FLAG_SLEEP;
        }

        /* ... any other commands ... */

        else
        {
            /* not specific command */
            LIN_StateFlags = LIN_FLAG_IGNORE;
        }

        LIN_Command();        /* user hook after any Command */
    }
    else

#endif /* !defined(LINAPI_1_0) */

    {   /* no any commands */

        LIN_StateFlags = LIN_FLAG_IGNORE;
    }
}

#if defined(SLAVE)
/***************************************************************************
 * Function :   LIN_TxCompleted
 *
 * Description: Tx interrupt 
 * 
 * Returns:     none
 *
 * Notes:       
 *
 **************************************************************************/
void near LIN_TxCompleted( void )
{
    /**********************************************************************/
    /***       SLAVE:   LIN_FLAG_WAKEUP_TIMEOUT                ***/
    /**********************************************************************/
if (LIN_StateFlags & LIN_FLAG_WAKEUP_TIMEOUT)
        {
            LIN_SetIdleTimeout();                /* Set idle timeout again */
  
            LIN_StateFlags = LIN_FLAG_IGNORE;
        }

#if defined(LIN_DBG_CHECK_INTERNAL_ERROR)
        else
        {
            LIN_InternalError   = LIN_ERROR_7;
            while (1)
            {}
        }
#endif /* defined(LIN_DBG_CHECK_INTERNAL_ERROR) */
}
#endif /* defined(SLAVE) */


/***************************************************************************
 * Function :   LIN_RxCompleted
 *
 * Description: Rx interrupt 
 *              LIN_TmpSCIByte   = SCI Data Register 
 * 
 * Returns:     none
 *
 * Notes:       cases are in order of frequency of occuring
 *
 **************************************************************************/

void near LIN_RxCompleted( void )
{
	LIN_BYTE        tmp;      /* temporary variable: counter or message direction flags */

    /**********************************************************************/
    /***       MASTER & SLAVE : LIN_FLAG_RECEIVE_DATA                   ***/
    /**********************************************************************/
    if (LIN_StateFlags & LIN_FLAG_RECEIVE_DATA )
    {   
        if (LIN_BufCounter < LIN_MsgLength)        /* NB: LIN_MsgLength = 1..8 */
        {   
            /* not all bytes received */

            /* receive message data */ 
            LIN_ProtBuf[LIN_BufCounter] = LIN_TmpSCIByte;

            ++LIN_BufCounter;

            /* calculate checksum from received byte */
            LIN_ChkAddByte(LIN_TmpSCIByte);
        }
        else
        {   /* all data and checksum has been received */
            
            if ( (LIN_ChkSum + LIN_TmpSCIByte) != 0xff )
            {   
                /* Checksum error  */
                LIN_Error();	        /* Rx error */
            }
            else
            {   /* no error */
                
                /* Message received succesfuly so copy it to proper place and update flags */

                LIN_CopyFromBuf(LinMsgBuf[LIN_SaveIdx]);

#if defined(LINAPI_1_0)
                /* set flags for all signals placed into received message */

            	for( tmp = LinFlagLookup[LIN_SaveIdx]; tmp < LinFlagLookup[LIN_SaveIdx + 1]; tmp++ )
	            {
		            LinSigFlags[tmp] = 0xFFu;
	            }

#else /* defined(LINAPI_1_0) */
                /* set appropriate status for received message */

                if (( LinMsgStatus[LIN_SaveIdx] & ((LIN_BYTE)LIN_MSG_OK | (LIN_BYTE)LIN_MSG_OVERRUN )) != 0 )
                {
                    LinMsgStatus[LIN_SaveIdx] = LIN_MSG_OVERRUN; 
                }
                else  
                {
                    LinMsgStatus[LIN_SaveIdx] = LIN_MSG_OK; 
                } 
#endif /* defined(LINAPI_1_0) */

                LIN_EndOfFrame();
            }
        }     
    }

    /**********************************************************************/
    /***       MASTER & SLAVE:   LIN_FLAG_SEND_DATA                     ***/
    /**********************************************************************/
    else if (LIN_StateFlags & LIN_FLAG_SEND_DATA)
    {
        if (LIN_BufCounter < LIN_MsgLength)
        {   
            /* not all bytes sended */

            if (LIN_ProtBuf[LIN_BufCounter] != LIN_TmpSCIByte )
            { 
                /* bit error in data */
                LIN_Error();		        /* Tx error */
            }
            else
            {   /* send next byte */

                ++LIN_BufCounter;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美高清视频不卡网| 国产酒店精品激情| 欧美日韩精品三区| 性久久久久久久久久久久| 欧美日韩一区精品| 免费人成在线不卡| 精品福利在线导航| 国产高清精品在线| 亚洲欧美成aⅴ人在线观看| 精品污污网站免费看| 天天操天天干天天综合网| 91精品欧美久久久久久动漫 | 成人美女视频在线观看18| 国产精品欧美经典| 欧美在线播放高清精品| 日韩中文字幕不卡| 国产色一区二区| 91丨九色丨蝌蚪丨老版| 青青草97国产精品免费观看无弹窗版| 26uuu成人网一区二区三区| 岛国av在线一区| 一区二区在线看| 欧美一级片在线看| 国产91对白在线观看九色| 亚洲一区精品在线| 精品少妇一区二区三区日产乱码 | 91精品欧美一区二区三区综合在 | 日韩精品一区二区三区视频播放| 国产高清不卡二三区| 亚洲线精品一区二区三区八戒| 日韩视频免费直播| 成人激情小说乱人伦| 亚洲成在人线免费| 国产精品国产成人国产三级 | 欧美一级爆毛片| 成人18视频在线播放| 日韩精品一区第一页| 国产精品视频你懂的| 日韩欧美美女一区二区三区| 91一区二区三区在线观看| 美女视频网站久久| 亚洲裸体在线观看| 国产日产欧产精品推荐色| 欧美日韩国产另类不卡| 成人黄动漫网站免费app| 美洲天堂一区二卡三卡四卡视频| 亚洲天堂精品视频| 久久久久久免费| 日韩一级免费一区| 欧美午夜理伦三级在线观看| 成人午夜私人影院| 狠狠色丁香婷婷综合| 日韩精品免费视频人成| 一个色在线综合| 国产精品久久99| 国产清纯白嫩初高生在线观看91| 日韩免费观看高清完整版| 91成人国产精品| 91浏览器打开| 99久久精品一区| 成人综合日日夜夜| 另类成人小视频在线| 天天色综合成人网| 五月婷婷综合激情| 一区二区三区资源| 亚洲精品国产品国语在线app| 国产三级精品视频| 国产亚洲欧美激情| 国产亚洲成av人在线观看导航| 欧美一区二区精品在线| 91麻豆精品国产91久久久久久久久| 91在线观看一区二区| 99久久综合国产精品| 成人av电影在线观看| 成人影视亚洲图片在线| 国产成人av资源| 国产91在线观看| 高清成人免费视频| 成人黄色777网| 99国产欧美另类久久久精品| av爱爱亚洲一区| 91在线观看视频| 欧美亚洲高清一区| 欧美日韩精品欧美日韩精品 | 制服.丝袜.亚洲.中文.综合| 欧美精品一级二级三级| 91精品国模一区二区三区| 91精品久久久久久久久99蜜臂| 91.麻豆视频| 欧美成人r级一区二区三区| 欧美一级爆毛片| 国产视频一区在线观看| 国产精品美女久久久久久久久| 亚洲欧洲国产日韩| 亚洲一二三区在线观看| 五月天网站亚洲| 久久99国内精品| 国产69精品久久久久毛片| 91美女精品福利| 欧美美女黄视频| 精品国产一区久久| 中文字幕一区在线| 亚洲6080在线| 国产一区二区三区四区在线观看| 成人精品小蝌蚪| 欧美高清性hdvideosex| 久久九九久久九九| 亚洲精品视频在线观看免费| 亚洲444eee在线观看| 国产在线不卡一区| 色综合久久久久久久| 91精品国产综合久久精品图片| 精品国产乱码久久久久久闺蜜 | 欧美一级免费大片| 国产欧美日韩不卡| 亚洲成人一区二区在线观看| 久久av资源站| 91国偷自产一区二区三区成为亚洲经典 | 亚洲国产综合色| 久久97超碰色| 色综合久久中文字幕综合网| 日韩午夜电影在线观看| 一区二区中文视频| 久久国内精品自在自线400部| 91麻豆精品秘密| 日韩久久久精品| 亚洲一区二区美女| 国产综合久久久久久鬼色| 日本久久电影网| 日本一区二区三区四区| 午夜a成v人精品| 91麻豆免费在线观看| 精品欧美一区二区久久| 亚洲成av人片www| jlzzjlzz欧美大全| 久久女同性恋中文字幕| 日欧美一区二区| 91精品福利在线| 国产精品国产成人国产三级 | 欧美日韩在线播放三区四区| 精品国产免费久久| 亚洲成av人影院| 91美女视频网站| 亚洲国产成人在线| 精品一区二区免费| 日韩一区二区三区免费看| 一片黄亚洲嫩模| fc2成人免费人成在线观看播放| wwwwww.欧美系列| 美女脱光内衣内裤视频久久影院| 欧美性猛交xxxxxx富婆| 亚洲男人天堂av| 99视频热这里只有精品免费| 中文在线免费一区三区高中清不卡| 美国三级日本三级久久99| 欧美精品久久久久久久多人混战| 18欧美亚洲精品| 成人免费观看视频| 国产精品午夜免费| 成人影视亚洲图片在线| 国产日韩欧美激情| 国产91色综合久久免费分享| 久久久久久久久久久黄色 | 国产成人啪午夜精品网站男同| 欧美大片在线观看一区| 麻豆精品久久精品色综合| 日韩欧美一级二级三级| 看国产成人h片视频| 精品不卡在线视频| 国内成+人亚洲+欧美+综合在线| 日韩久久久精品| 国内精品视频一区二区三区八戒| 欧美tickling网站挠脚心| 韩日欧美一区二区三区| 久久久亚洲国产美女国产盗摄 | 欧美精品18+| 日日噜噜夜夜狠狠视频欧美人| 91精品国产综合久久精品性色| 日本强好片久久久久久aaa| 精品欧美乱码久久久久久 | 日韩亚洲欧美一区| 久久se精品一区精品二区| 久久精品一区二区三区不卡牛牛| 国产精品1区二区.| 国产精品第一页第二页第三页| 色呦呦国产精品| 天天色综合天天| 久久精品日韩一区二区三区| 岛国精品在线观看| 亚洲综合一区在线| 678五月天丁香亚洲综合网| 麻豆中文一区二区| 国产精品国产三级国产普通话三级 | 91精品一区二区三区在线观看| 久久99精品久久久久| 亚洲国产成人私人影院tom| 91黄色在线观看| 久久99精品一区二区三区三区| 久久久久88色偷偷免费| 91麻豆成人久久精品二区三区|