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

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

?? linprot.c

?? 基于FREESCALE單片機9S08DZ60的LIN從節點的應用層源代碼.LIN是通過UART串口來實現的.開發環境為CODEWARRIOR FOR HC08
?? C
?? 第 1 頁 / 共 2 頁
字號:
#define LINPROT_C
/******************************************************************************
*                                                       
*       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>

#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 */

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

/****************************************************************************
 * All common-purpose RAM variables shall be declared here.
 ***************************************************************************/
/****************************************************************************
 * Some of the variables (more often used) can be declared using LIN_ZPAGE
 * modifier.
 * It require to perform zero page RAM placement optimisation.
 ***************************************************************************/
#if defined(S08) && defined(CW08)
#pragma DATA_SEG SHORT ZeroSeg
#endif /* defined(S08) && defined(CW08) */

LIN_ZPAGE LIN_BYTE      LIN_StateFlags;             /* State machine status  */

LIN_ZPAGE LIN_BYTE      LIN_ProtBuf[LIN_PROT_BUF_LEN];   /* Protocol buffer */
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(S08) && defined(CW08)
#pragma DATA_SEG DEFAULT
#endif /* defined(S08) && defined(CW08) */

/****************************************************************************
 * Functions 
 ***************************************************************************/

 /***************************************************************************
 * Function :   LIN_CopyToBuf
 *
 * Description: Copy data from src to LIN_ProtBuf
 *
 * Returns:     none
 *
 * Notes:       OPTIM
 **************************************************************************/
void 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 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(S08) && defined(CW08)
#pragma OPTION ADD handle_register "-Or"
#endif /* defined(S08) && defined(CW08) */

void LIN_ChkAddByte(LIN_BYTE byte)
{
#if defined(S08) && defined(CW08)
    asm 
    {   
        ADD   LIN_ChkSum;
        ADC   #0;
        STA   LIN_ChkSum;
    }   
#endif /* defined(S08) && defined(CW08) */


}

#if defined(S08) && defined(CW08)
#pragma OPTION DEL handle_register 
#endif /* defined(S08) && defined(CW08) */


/***************************************************************************
 * 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 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 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;
    }
}


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

void 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;

                if (LIN_BufCounter == LIN_MsgLength)
                {   
                    /* send check sum */
                    LIN_ChkSum = ~LIN_ChkSum;

                    LIN_SCDRPut(LIN_ChkSum);
                }
                else
                {
                    LIN_ChkAddByte(LIN_ProtBuf[LIN_BufCounter]);    /* OPTIM */

                    LIN_SCDRPut(LIN_ProtBuf[LIN_BufCounter]);
                }
            }
        }
        else
        {   /* all data has been transfered so check biterror in checksum  */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精华液网站w| 国产日韩成人精品| 在线视频中文字幕一区二区| 大白屁股一区二区视频| 激情都市一区二区| 久久99国产精品尤物| 蜜臀av亚洲一区中文字幕| 日韩二区三区在线观看| 免费一级片91| 国产91在线观看丝袜| 成人激情黄色小说| 日本黄色一区二区| 欧美男生操女生| 精品国产伦理网| 国产亚洲精品aa午夜观看| 中文字幕一区二区三区乱码在线| 1024成人网| 亚洲风情在线资源站| 久久国产精品99久久久久久老狼| 粉嫩久久99精品久久久久久夜| 高清日韩电视剧大全免费| 一本色道久久综合亚洲91 | av高清久久久| 91成人在线精品| 日韩欧美在线一区二区三区| 国产精品久久久久久久午夜片 | 琪琪一区二区三区| 色哟哟一区二区| 日本一区二区三区久久久久久久久不| 日韩国产精品久久久久久亚洲| av资源网一区| 国产精品久久看| 99热这里都是精品| 欧美国产精品一区二区| 国产凹凸在线观看一区二区| 精品国产一区二区精华| 男女男精品网站| 91精品国模一区二区三区| 夜夜揉揉日日人人青青一国产精品| 成人亚洲精品久久久久软件| 久久久夜色精品亚洲| 国产一本一道久久香蕉| 久久综合视频网| 国产精品亚洲午夜一区二区三区| 久久久久久一级片| 成人精品小蝌蚪| 17c精品麻豆一区二区免费| 色婷婷国产精品综合在线观看| 亚洲免费成人av| 精品视频1区2区| 看电视剧不卡顿的网站| 久久蜜桃一区二区| 色88888久久久久久影院按摩| 亚洲国产精品一区二区久久| 69堂精品视频| 99re66热这里只有精品3直播| 亚洲综合在线视频| 精品国产欧美一区二区| av资源网一区| 精品一区二区久久久| 最新国产成人在线观看| 欧美一级片免费看| 成人免费视频视频| 日韩国产欧美在线播放| 久久久久99精品一区| 欧美色老头old∨ideo| 国产美女视频91| 亚洲国产成人tv| 久久综合一区二区| 884aa四虎影成人精品一区| 国产精品亚洲专一区二区三区 | 欧美午夜片在线观看| 麻豆成人91精品二区三区| 蓝色福利精品导航| 综合色中文字幕| 国产农村妇女毛片精品久久麻豆 | 色成年激情久久综合| 亚洲国产精品成人综合| 69av一区二区三区| 日韩一区二区三区在线| 欧美一级黄色片| 日韩一区二区三区在线| 26uuu久久天堂性欧美| 久久精品亚洲一区二区三区浴池 | 色婷婷久久久综合中文字幕| 99久久精品国产导航| 91丝袜高跟美女视频| 欧美日精品一区视频| 555夜色666亚洲国产免| 精品国产91乱码一区二区三区 | 91精品免费观看| 久久久久久一二三区| 国产三级欧美三级| 欧美高清在线一区二区| 国产精品网站导航| 亚洲成a人v欧美综合天堂| 亚洲一区二区成人在线观看| 国产精品乱码人人做人人爱| 精品国产青草久久久久福利| 日韩亚洲欧美中文三级| 日韩免费一区二区三区在线播放| 欧美群妇大交群中文字幕| 欧美视频精品在线| 欧美日韩在线播放一区| 91国偷自产一区二区开放时间| 在线日韩国产精品| 在线观看视频91| 欧美日韩www| 欧美三级乱人伦电影| 欧美喷水一区二区| 精品少妇一区二区三区在线播放| 欧美一区二区不卡视频| 在线成人小视频| 国产欧美一区二区精品久导航| 国产精品视频一二三区| 亚洲精品大片www| 奇米综合一区二区三区精品视频| 激情久久久久久久久久久久久久久久| 懂色av一区二区在线播放| 国产一区二区三区高清播放| 一本久久a久久免费精品不卡| 欧美午夜电影网| 国产亚洲欧美日韩在线一区| 亚洲日本中文字幕区| 一区二区三区 在线观看视频| 卡一卡二国产精品| 色欧美日韩亚洲| 久久先锋影音av鲁色资源网| 亚洲色图欧美激情| 国产精品高潮久久久久无| 日本欧美在线看| 在线观看亚洲精品视频| 26uuu色噜噜精品一区二区| 夜夜夜精品看看| 99re66热这里只有精品3直播| 日韩亚洲电影在线| 亚洲精品久久久久久国产精华液| 麻豆91在线观看| 日本精品视频一区二区| 中文字幕在线一区二区三区| 日本系列欧美系列| 91成人国产精品| 国产精品乱人伦| 91亚洲精品乱码久久久久久蜜桃| 欧美一级理论片| 三级在线观看一区二区| 色欧美88888久久久久久影院| 亚洲日韩欧美一区二区在线| 大桥未久av一区二区三区中文| 精品国产sm最大网站免费看| 日本va欧美va瓶| 精品国产露脸精彩对白| 精品影视av免费| 日韩欧美在线观看一区二区三区| 亚洲成a人片在线观看中文| av在线一区二区| 一个色综合av| 欧美日韩大陆一区二区| 天天免费综合色| 欧美精品一级二级| 久久国内精品视频| 精品国产伦一区二区三区观看体验 | 国产精品私人影院| 97久久人人超碰| 日韩精品久久理论片| 日韩精品一区二区三区在线观看 | 欧美性猛交xxxxxxxx| 日本中文字幕不卡| 精品国产在天天线2019| 粉嫩欧美一区二区三区高清影视 | 中文字幕一区二区三区蜜月| 欧美亚日韩国产aⅴ精品中极品| 亚洲黄色在线视频| 欧美人与性动xxxx| 久久国产精品无码网站| 国产精品国产三级国产有无不卡 | 麻豆精品在线视频| 一区二区三区在线免费视频| 精品视频在线视频| 国产美女av一区二区三区| 国产精品电影一区二区三区| 91社区在线播放| 麻豆精品一二三| 亚洲图片激情小说| 日韩天堂在线观看| 高清不卡一二三区| 美腿丝袜亚洲综合| 亚洲欧美日韩中文播放| 欧美成人免费网站| 欧美午夜一区二区| 99久久免费精品| 精品一区二区三区在线观看| 玉米视频成人免费看| 国产精品午夜久久| 久久综合av免费| 日韩一区二区免费视频| 欧美性欧美巨大黑白大战| 福利一区在线观看| 久久精品99国产精品日本| 一区二区三区不卡在线观看 |