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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? linprot.c

?? 基于FREESCALE單片機(jī)9S08DZ60的LIN從節(jié)點(diǎn)的應(yīng)用層源代碼.LIN是通過(guò)UART串口來(lái)實(shí)現(xiàn)的.開(kāi)發(fā)環(huán)境為CODEWARRIOR FOR HC08
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):

            if (LIN_ChkSum != LIN_TmpSCIByte )
            { 
                /* bit error in checksum */
                LIN_Error();		            /* Tx error */
            }
            else
            {
                /* Message transfered succesfuly so update flags -- for Freescale API only */

#if !defined(LINAPI_1_0)
                /* NB: LIN_MSG_UPDATED set only with LIN_MSG_NOCHANGE */
                
                if ( ( LinMsgStatus[LIN_SaveIdx] & LIN_MSG_UPDATED ) == 0 )
                {
                    /* msg has not been changed since start of transmission */
                    LinMsgStatus[LIN_SaveIdx] = LIN_MSG_OK;
                }

                /* if msg has been changed since start of transmission then we
                   keep current state (LIN_MSG_UPDATED | LIN_MSG_NOCHANGE)      */

#endif /* !defined(LINAPI_1_0) */

                /* For LIN API: message state is already LIN_MSG_OK -- for any type of message */

                LIN_EndOfFrame();
            }
        }
    }

    /**********************************************************************/
    /***       MASTER & SLAVE :   LIN_FLAG_SLEEP                ***/
    /**********************************************************************/ 
    else if (LIN_StateFlags & LIN_FLAG_SLEEP)
    {
        if ((LIN_TmpSCIByte == WAKEUP_BYTE) || (LIN_TmpSCIByte == 0xC0) || (LIN_TmpSCIByte == 0x00))
        {
            LIN_SetIdleTimeout();                /* Set idle timeout again */

#if defined(SLAVE)
            LIN_StateFlags = LIN_FLAG_IGNORE;
#endif /* defined(SLAVE) */

#if defined(MASTER)
            LIN_SetTimeout(LIN_CfgConst.LIN_to_wakeup_delimiter);                    
            LIN_StateFlags = LIN_FLAG_WAKEUP_TIMEOUT;
#endif /* defined(MASTER) */
        }  
    }


#if defined(MASTER)
    /**********************************************************************/
    /***       MASTER : LIN_FLAG_IGNORE_DATA                            ***/
    /**********************************************************************/
    else if ( LIN_StateFlags & LIN_FLAG_IGNORE_DATA )
    {
        ++LIN_BufCounter;
        
        if (LIN_BufCounter > LIN_MsgLength)         /* NB: LIN_MsgLength = 1..8 */
        {   
            LIN_EndOfFrame();
        }
    }

    
    /**********************************************************************/
    /***       MASTER:   LIN_FLAG_SEND_HEADER                           ***/
    /**********************************************************************/
    else if (LIN_StateFlags & LIN_FLAG_SEND_HEADER)
    {
        if ( LIN_BufCounter == 0 )
        {   
            /* after SYNC byte sended */
        
            if ( LIN_TmpSCIByte == LIN_SYNC_FIELD )
            {
                ++LIN_BufCounter;
                /* send ID byte */
                LIN_SCDRPut(LIN_ProtBuf[LIN_BufCounter]);
            }
            else if ( LIN_TmpSCIByte != 0 )
            { 
                /* bit error in SYNC byte */
                LIN_Error();                /* Tx error */
            }
            /* If LIN_TmpSCIByte == 0 it may be Rx interrupt after break,
               so we must ignore it */
        }
        else
        {
            /* after ID byte sended */

            if ( LIN_TmpSCIByte != LIN_ProtBuf[LIN_BufCounter] )
            { 
                /* bit error in ID byte */
                LIN_Error();                /* Tx error */
            }
            else
            {   
                /* header has been transfered so process message ID */
    
                LIN_DBG_SET_PORT_6;

                /* LIN_SaveIdentifier was set in LIN_RequestMsg() */

                /* We must count bytes in IGNORE_DATA state also,
                   so we always need LIN_BufCounter */
                LIN_BufCounter  = 0;

                /* LIN_MsgLength is already set -- in LIN_RequestMsg */

                /* Check what we should do with this message */
                tmp = LinLookupTable[LIN_SaveIdentifier];
                /* Now tmp contains ID and msg flags */

                LIN_SaveIdx = tmp & LIN_MSG_INDEX_MASK;

                if ( !(tmp & LIN_MSG_NOT_IGNORED) )
                {
                    /* We did not find this id */
                    LIN_StateFlags = LIN_FLAG_IGNORE_DATA;
                }
                else if ( tmp & LIN_MSG_SEND ) /* if we probably send the message (SEND or SEND_UPDATED) */
                {   
                    /* check do we really should send data */

                    if ( (   ( LinMsgStatus[LIN_SaveIdx] & LIN_MSG_NODATA  ) != 0      ) ||
                         ( ( ( tmp & LIN_MSG_SEND_UPDATED                  ) != 0 ) &&
                           ( ( LinMsgStatus[LIN_SaveIdx] & LIN_MSG_UPDATED ) == 0 )    )   )
                    {
                        /* the data is not initialized  or
                           we should send only updated data but the data has not updated */
                        /* -> we ignore this message and don't change msg state */
                        /* NB: Tmaxframe (Rx) error should occure */

                        LIN_StateFlags = LIN_FLAG_IGNORE_DATA;
                    }
                    else
                    {   /* we should send data for this message */

                        /* new state of the msg */
                        if ( ( tmp & LIN_MSG_SEND_UPDATED ) != 0 )
                        {
                            /* if we are sending only updated data then we should reset
                               updated state of msg at all */
                            LinMsgStatus[LIN_SaveIdx] = LIN_MSG_OK;
                        }
                        else
                        {     
                            /* if we are sending msg always then we should clear updated flag,
                               so LIN_MSG_NOCHANGE flag can be keep */
                            LinMsgStatus[LIN_SaveIdx] &= ~(LINStatusType)LIN_MSG_UPDATED;
                        }
                        
                        LIN_CopyToBuf(LinMsgBuf[LIN_SaveIdx]);
                
                        LIN_SCDRPut(LIN_ProtBuf[0]);   /* Send first byte of buffer */

                        LIN_StateFlags  = LIN_FLAG_SEND_DATA;
                        LIN_ChkSum      = LIN_ProtBuf[0];
                    }
                }
                else    
                {   /* we receive data from this message */

                    LIN_StateFlags = LIN_FLAG_RECEIVE_DATA;        
                    LIN_ChkSum = 0;
                }

                LIN_DBG_CLR_PORT_6;
            }
        }
    }
#endif /* defined(MASTER) */

    
#if defined(SLAVE)
    /**********************************************************************/
    /***       SLAVE:   LIN_FLAG_RECEIVE_SYNC                           ***/
    /**********************************************************************/
    else if (LIN_StateFlags & LIN_FLAG_RECEIVE_SYNC)
    {
        if (LIN_TmpSCIByte != LIN_SYNC_FIELD )
        {
            LIN_Error();		/* Rx */
        }
        else
        {
            LIN_StateFlags = LIN_FLAG_RECEIVE_ID;
        }
    }


    /**********************************************************************/
    /***       SLAVE:   LIN_FLAG_RECEIVE_ID                             ***/
    /**********************************************************************/
    else if (LIN_StateFlags & LIN_FLAG_RECEIVE_ID)
    {
        /* header has been received so process message ID */

        LIN_DBG_SET_PORT_6;

        /* Cut the parity bits off and search message */
        tmp = LinLookupTable[LIN_TmpSCIByte & LIN_MSG_INDEX_MASK];
        /* Now tmp contains ID and msg flags */

        LIN_SaveIdx = tmp & LIN_MSG_INDEX_MASK;
        
        if ( ( !(tmp & LIN_MSG_NOT_IGNORED) ) || ( LinMsgId[LIN_SaveIdx] != LIN_TmpSCIByte ) )
        {
            /* We did not find this id or parity did not match. */
            /* NB: we don't store information about Parity Error ! */
            LIN_EndOfFrame();
        }
        else 
        {   
            LIN_BufCounter  = 0;
            LIN_MsgLength = LinMsgLen[LIN_SaveIdx];

            if ( tmp & LIN_MSG_SEND ) /* if we probably send the message (SEND or SEND_UPDATED) */
            {   
                /* check do we really should send data */

                if ( (   ( LinMsgStatus[LIN_SaveIdx] & LIN_MSG_NODATA  ) != 0      ) ||
                     ( ( ( tmp & LIN_MSG_SEND_UPDATED                  ) != 0 ) &&
                       ( ( LinMsgStatus[LIN_SaveIdx] & LIN_MSG_UPDATED ) == 0 )    )   )
                {
                    /* the data is not initialized  or
                       we should send only updated data but the data has not updated */
                    /* -> we ignore this message and don't change msg state */
                    /* NB: Tmaxframe (Rx) error should occure */

                    LIN_EndOfFrame();
                }
                else
                {   /* we should send data for this message */

                    /* set new state of the msg */

#if defined(LINAPI_1_0)

                    /* for LIN API: any transmitted message always go to state LIN_MSG_OK */
                    LinMsgStatus[LIN_SaveIdx] = LIN_MSG_OK;

#else   /* !defined(LINAPI_1_0) */

                    /* for Freescale API: LIN_SEND and LIN_SEND_UPDATED messages processed differently */

                    if ( ( tmp & LIN_MSG_SEND_UPDATED ) != 0 )
                    {
                        /* if we are sending only updated data then we should reset
                           updated state of msg at all */
                        LinMsgStatus[LIN_SaveIdx] = LIN_MSG_OK;
                    }
                    else
                    {     
                        /* if we are sending msg always then we should clear updated flag,
                           so LIN_MSG_NOCHANGE flag can be keep */
                        LinMsgStatus[LIN_SaveIdx] &= ~(LINStatusType)LIN_MSG_UPDATED;
                    }

#endif  /* !defined(LINAPI_1_0) */

                    LIN_CopyToBuf(LinMsgBuf[LIN_SaveIdx]);
        
                    LIN_SCDRPut(LIN_ProtBuf[0]);   /* Send first byte of buffer */

                    LIN_StateFlags  = LIN_FLAG_SEND_DATA;
                    LIN_ChkSum      = LIN_ProtBuf[0];
                }
            }

            else    
            {   /* we receive data from this message */

                LIN_StateFlags = LIN_FLAG_RECEIVE_DATA;        
                LIN_ChkSum = 0;
            }
        }

        LIN_DBG_CLR_PORT_6;
    }
#endif /* defined(SLAVE) */

    /* Ignored: */
    /**********************************************************************/
    /***       MASTER & SLAVE : LIN_FLAG_IGNORE,                        ***/
    /***                        LIN_FLAG_SLEEP, LIN_FLAG_WAKEUP_TIMEOUT ***/
    /**********************************************************************/
    /***       MASTER  :        LIN_FLAG_SEND_BREAK                     ***/
    /***                        Wait for timeout.                       ***/
    /**********************************************************************/
    /***       LIN_API :        LIN_FLAG_DISCONNECT, LIN_FLAG_NOINIT    ***/
    /**********************************************************************/
    /* NB: in Sleep mode LIN_FLAG_IGNORE and LIN_FLAG_SLEEP flags are set */
    /* For LIN API -- no LIN_FLAG_SLEEP                                   */
    /**********************************************************************/
}


/***************************************************************************
 * Function :   LIN_FrameError
 *
 * Description: Frame Error interrupt 
 * 
 * Returns:     none
 *
 * Notes:       MASTER: no parameters
 *              SLAVE:  input parameter
 *                      LIN_FRAMEERROR  -- frame error like break;
 *                      LIN_NORMALBREAK -- normal break received.
 *              Slave should ignore break in sleep mode
 **************************************************************************/

#if defined(MASTER)
void LIN_FrameError( void )
{
    /**********************************************************************/
    /***       MASTER:   LIN_FLAG_SEND_BREAK                            ***/
    /**********************************************************************/
    if (LIN_StateFlags & LIN_FLAG_SEND_BREAK)           
    {
        LIN_SetIdleTimeout();           /* valid break transmited -> set idle timeout */
 
        /* Set MaxFrame timeout depended on the message size */
        LIN_SetTimeout(LIN_MsgLength);

        LIN_StateFlags = LIN_FLAG_SEND_HEADER;

        /* Send Synchronization field */
        LIN_SCDRPut(LIN_SYNC_FIELD);
        /* LIN_ProtBuf[1] and BufCounter has been prepared in LIN_RequestMsg() */
    } 
    else if (LIN_StateFlags & ( LIN_FLAG_SEND_HEADER  | LIN_FLAG_SEND_DATA | 
                                LIN_FLAG_RECEIVE_DATA | LIN_FLAG_IGNORE_DATA ))
    {
        LIN_Error();        /* set Tx or Rx error for previous message */
    }
    /* in all other states -- ignoring */
}
#endif /* defined(MASTER) */

#if defined(SLAVE)
void LIN_FrameError( LIN_BYTE breakType )
{
        LIN_SetIdleTimeout();           /* break received -> set idle timeout */

        if ( (LIN_StateFlags & ( LIN_FLAG_RECEIVE_SYNC | LIN_FLAG_RECEIVE_ID | 
                                 LIN_FLAG_RECEIVE_DATA | LIN_FLAG_SEND_DATA ))&& 
                               ( breakType == LIN_FRAMEERROR ) )
        {
    
            LIN_Error();                /* set Tx or Rx error for previous message and goto IGNORE */
        } 
        else if  ( breakType == LIN_NORMALBREAK )
        {
          
            /* IGNORE or WAKEUP states -> goto RECEIVE_55 */
            LIN_StateFlags = LIN_FLAG_RECEIVE_SYNC;
        }         
}
#endif /* defined(SLAVE) */


#if defined(MASTER)
/***************************************************************************
 * Function :   LIN_Timeout
 *
 * Description: Timeout interrupt 
 * 
 * Returns:     none
 *
 * Notes:       only for Master node
 *
 **************************************************************************/
void LIN_Timeout( void )
{
    if ( LIN_StateFlags & ( LIN_FLAG_SEND_HEADER | LIN_FLAG_SEND_DATA | 
                            LIN_FLAG_RECEIVE_DATA | LIN_FLAG_IGNORE_DATA))
    {
        LIN_Error();        /* Rx or Tx error */
    }

    else if (LIN_StateFlags & LIN_FLAG_WAKEUP_TIMEOUT )
    {
                            /* Wakeup delimiter timeout expired */
        LIN_StateFlags = LIN_FLAG_IGNORE;
    } 

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

}
#endif /* defined(MASTER) */


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜在线电影| 香港成人在线视频| 欧美午夜精品久久久久久孕妇| 天天av天天翘天天综合网| 久久久99精品久久| 欧洲视频一区二区| 成人免费视频播放| 日韩av一二三| 亚洲激情图片小说视频| 久久精品这里都是精品| 51精品视频一区二区三区| 成人美女在线观看| 精品一区二区在线播放| 一区二区不卡在线播放| 国产蜜臀97一区二区三区| 91精品久久久久久蜜臀| 欧美这里有精品| 91在线视频网址| 懂色av一区二区夜夜嗨| 男人的天堂亚洲一区| 一区二区三区日本| 中文av字幕一区| 久久香蕉国产线看观看99| 欧美一区二区三区免费大片| 在线观看免费视频综合| 一本色道a无线码一区v| www.成人网.com| www.在线欧美| 97aⅴ精品视频一二三区| 国产99久久久久久免费看农村| 久久精品国产第一区二区三区| 亚洲图片欧美综合| 国产精品福利一区二区| 国产精品久久久久久久岛一牛影视 | 亚洲男人都懂的| 2019国产精品| 91麻豆精品91久久久久久清纯| 色综合久久综合网| 国产成人在线视频播放| 久久精品国产精品亚洲红杏 | 成人精品电影在线观看| 蜜芽一区二区三区| 亚洲主播在线观看| 亚洲欧洲精品一区二区三区| 国产婷婷色一区二区三区四区 | 欧美一区二区免费| 欧美专区在线观看一区| 国产成人av电影在线观看| 男女视频一区二区| 石原莉奈在线亚洲二区| 午夜精品在线看| 亚洲影院久久精品| 一区二区三区中文免费| 亚洲日本护士毛茸茸| 国产精品不卡在线| 中文一区一区三区高中清不卡| 26uuu色噜噜精品一区二区| 欧美大片一区二区| 欧美一区二区三区爱爱| 欧洲一区在线观看| 91国产精品成人| 欧美私模裸体表演在线观看| 色狠狠综合天天综合综合| 97aⅴ精品视频一二三区| 91无套直看片红桃| 91丝袜国产在线播放| 色综合久久中文字幕综合网| 一本久久a久久免费精品不卡| 99免费精品视频| 日本高清不卡在线观看| 欧美丝袜自拍制服另类| 欧美年轻男男videosbes| 欧美久久久影院| 日韩一级二级三级| www国产成人免费观看视频 深夜成人网| 日韩精品最新网址| 国产农村妇女毛片精品久久麻豆| 国产精品欧美综合在线| 国产精品乱人伦| 樱花影视一区二区| 亚洲123区在线观看| 日本美女一区二区三区| 精品一区二区三区免费播放 | 日本一区二区不卡视频| 青青草精品视频| 精品一区二区在线视频| 成人免费电影视频| 在线一区二区三区| 欧美日韩一区二区欧美激情| 日韩欧美国产电影| 久久综合久久久久88| 综合欧美亚洲日本| 视频一区欧美日韩| 国产成人精品亚洲午夜麻豆| av一区二区三区| 7777精品伊人久久久大香线蕉| 日韩你懂的在线播放| 欧美韩国日本不卡| 一区二区三区.www| 久久丁香综合五月国产三级网站| 国产福利精品导航| 欧洲精品视频在线观看| 日韩精品一区二区三区在线播放 | 国产精品一二三四五| 99久久国产综合精品色伊| 91精品国产一区二区三区香蕉| 欧美r级电影在线观看| 久久精品一区二区| 国产视频一区二区在线| 亚洲美女免费在线| 激情图区综合网| 欧美特级限制片免费在线观看| 久久久午夜精品理论片中文字幕| 一区二区三区在线观看网站| 久久99久久99精品免视看婷婷 | 欧美日韩一区二区电影| 亚洲精品在线观| 亚洲第一精品在线| 99国产欧美久久久精品| 欧美一区二区黄色| 亚洲欧洲日韩在线| 日本视频一区二区三区| 99精品欧美一区二区蜜桃免费 | 奇米影视一区二区三区| 91香蕉视频污在线| 精品国产在天天线2019| 亚洲欧美激情视频在线观看一区二区三区 | 欧美色综合网站| 中文字幕免费不卡在线| 五月天网站亚洲| 波多野结衣中文字幕一区| 91精品欧美福利在线观看| 亚洲国产成人porn| 一本大道av伊人久久综合| 欧美一区二区三区色| 中文字幕一区二区三区在线不卡| 国产99久久久精品| 欧美电视剧免费全集观看| 无码av免费一区二区三区试看| 91浏览器打开| 亚洲欧美日韩国产手机在线| 国产一区二区看久久| 欧美电影精品一区二区| 丝瓜av网站精品一区二区| 在线精品视频小说1| 成人欧美一区二区三区小说| 国产91精品精华液一区二区三区| 欧美大片日本大片免费观看| 偷拍一区二区三区四区| 欧美在线高清视频| 日韩一区在线免费观看| 国产乱子轮精品视频| 日韩欧美在线综合网| 天堂蜜桃一区二区三区| 在线成人午夜影院| 亚洲成人一区二区在线观看| 在线国产电影不卡| 亚洲国产你懂的| 色婷婷精品久久二区二区蜜臂av | 日韩欧美在线一区二区三区| 天天综合天天做天天综合| 欧美私人免费视频| 亚洲国产综合色| 欧美福利一区二区| 人禽交欧美网站| 日韩欧美在线不卡| 久久av中文字幕片| 久久九九国产精品| 成人a级免费电影| 亚洲女人****多毛耸耸8| 色久综合一二码| 日韩在线播放一区二区| 欧美精品v国产精品v日韩精品| 青青青爽久久午夜综合久久午夜| 欧美一级欧美一级在线播放| 免费观看久久久4p| 久久日一线二线三线suv| 国产91高潮流白浆在线麻豆 | 亚洲妇熟xx妇色黄| 日韩无一区二区| 国产精品91xxx| 亚洲精品国产视频| 91精品国产91热久久久做人人| 久久精品国产成人一区二区三区 | 日韩一区二区在线免费观看| 午夜天堂影视香蕉久久| 欧美一区二区三区系列电影| 午夜视频久久久久久| 久久久国产精品不卡| 91视频91自| 亚洲一区在线观看网站| 精品国产伦一区二区三区免费| 国产suv精品一区二区6| 亚洲主播在线观看| 2020国产精品自拍| 色老汉av一区二区三区| 精品亚洲国内自在自线福利| 欧美激情一区二区三区蜜桃视频| 在线观看国产日韩| 激情文学综合插|