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

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

?? can.c

?? uCOS-II V2.84 LM3S6965 TCPIP Demo
?? C
?? 第 1 頁 / 共 5 頁
字號:
    {
        //
        // Set the 29 bit version of the Identifier for this message object.
        //
        usArbReg[0] |= pMsgObject->ulMsgID & CAN_IFARB1_ID;
        usArbReg[1] |= (pMsgObject->ulMsgID >> 16) & CAN_IFARB2_ID;

        //
        // Mark the message as valid and set the extended ID bit.
        //
        usArbReg[1] |= CAN_IFARB2_MSGVAL | CAN_IFARB2_XTD;
    }
    else
    {
        //
        // Set the 11 bit version of the Identifier for this message object.
        // The lower 18 bits are set to zero.
        //
        usArbReg[1] |= (pMsgObject->ulMsgID << 2) & CAN_IFARB2_ID;

        //
        // Mark the message as valid.
        //
        usArbReg[1] |= CAN_IFARB2_MSGVAL;
    }

    //
    // Set the data length since this is set for all transfers.
    // This is also a single transfer and not a FIFO transfer so set EOB bit.
    //
    usMsgCtrl |= (pMsgObject->ulMsgLen & CAN_IFMCTL_DLC) | CAN_IFMCTL_EOB;

    //
    // Enable transmit interrupts if they should be enabled.
    //
    if(pMsgObject->ulFlags & MSG_OBJ_TX_INT_ENABLE)
    {
        usMsgCtrl |= CAN_IFMCTL_TXIE;
    }

    //
    // Enable receive interrupts if they should be enabled.
    //
    if(pMsgObject->ulFlags & MSG_OBJ_RX_INT_ENABLE)
    {
        usMsgCtrl |= CAN_IFMCTL_RXIE;
    }

    //
    // Write the data out to the CAN Data registers if needed.
    //
    if(bTransferData)
    {
        CANWriteDataReg(
            pMsgObject->pucMsgData,
            (unsigned long *)(ulBase + CAN_O_IF1DA1), pMsgObject->ulMsgLen);
    }

    //
    // Write out the registers to program the message object.
    //
    CANWriteReg(ulBase + CAN_O_IF1CMSK, usCmdMaskReg);
    CANWriteReg(ulBase + CAN_O_IF1MSK1, usMaskReg[0]);
    CANWriteReg(ulBase + CAN_O_IF1MSK2, usMaskReg[1]);
    CANWriteReg(ulBase + CAN_O_IF1ARB1, usArbReg[0]);
    CANWriteReg(ulBase + CAN_O_IF1ARB2, usArbReg[1]);
    CANWriteReg(ulBase + CAN_O_IF1MCTL, usMsgCtrl);

    //
    // Transfer the message object to the message object specifiec by ulObjID.
    //
    CANWriteReg(ulBase + CAN_O_IF1CRQ, ulObjID & CAN_IFCRQ_MNUM_MSK);

    return;
}

//*****************************************************************************
//
//! Reads a CAN message from one of the message object buffers
//!
//! \param ulBase is the base address of the CAN controller.
//! \param ulObjID is the object number to read (1-32)
//! \param pMsgObject points to a structure containing message object fields
//! \param bClrPendingInt indicates whether an associated interrupt should
//! be cleared
//!
//! This function is used to read the contents of one of the 32 message
//! objects in the CAN controller, and return it to the caller.  The data
//! returned is stored in the fields of the caller supplied structure pointed
//! to by \e pMsgObject.  The data consists of all of the parts of a CAN
//! message, plus some control and status information.
//!
//! Normally this is used to read a message object that has received and
//! stored a CAN message with a certain identifier.  However this could also be
//! used to read the contents of a message object in order to load the fields
//! of the structure in case only part of the structure needs to be changed
//! from a previous setting.
//!
//! When using CANMessageGet, all of the same fields of the structure are
//! populated in the same way as when the CANMessageSet() function is used,
//! with the following exceptions:
//!
//! \e pMsgObject->ulFlags:
//!
//! - MSG_OBJ_NEW_DATA indicates if this is new data since the last
//! time it was read
//! - MSG_OBJ_DATA_LOST indicates that at least one message was received
//! on this message object, and not read by the host before being
//! overwritten.
//!
//! \return None.
//
//*****************************************************************************
void
CANMessageGet(unsigned long ulBase, unsigned long ulObjID,
              tCANMsgObject *pMsgObject, tBoolean bClrPendingInt)
{
    unsigned short usCmdMaskReg;
    unsigned short usMaskReg[2];
    unsigned short usArbReg[2];
    unsigned short usMsgCtrl;

    //
    // Check the arguments.
    //
    ASSERT((ulBase == CAN0_BASE) ||
           (ulBase == CAN1_BASE));
    ASSERT((ulObjID <= 32) && (ulObjID != 0));

    //
    // This is always a read to the Message object as this call is setting
    // a message object.
    //
    usCmdMaskReg = CAN_IFCMSK_DATAA | CAN_IFCMSK_DATAB | CAN_IFCMSK_CONTROL |
                   CAN_IFCMSK_MASK | CAN_IFCMSK_ARB;

    //
    // Clear a pending interrupt and new data in a message object.
    //
    if(bClrPendingInt)
    {
        usCmdMaskReg |= CAN_IFCMSK_CLRINTPND;
    }

    //
    // Set up the request for data from the message object.
    //
    CANWriteReg(ulBase + CAN_O_IF2CMSK, usCmdMaskReg);

    //
    // Transfer the message object to the message object specifiec by ulObjID.
    //
    CANWriteReg(ulBase + CAN_O_IF2CRQ, ulObjID & CAN_IFCRQ_MNUM_MSK);

    //
    // Wait for busy bit to clear
    //
    while(CANReadReg(ulBase + CAN_O_IF2CRQ) & CAN_IFCRQ_BUSY)
    {
    }

    //
    // Read out the IF Registers.
    //
    usMaskReg[0] = CANReadReg(ulBase + CAN_O_IF2MSK1);
    usMaskReg[1] = CANReadReg(ulBase + CAN_O_IF2MSK2);
    usArbReg[0] = CANReadReg(ulBase + CAN_O_IF2ARB1);
    usArbReg[1] = CANReadReg(ulBase + CAN_O_IF2ARB2);
    usMsgCtrl = CANReadReg(ulBase + CAN_O_IF2MCTL);

    pMsgObject->ulFlags = MSG_OBJ_NO_FLAGS;

    //
    // Determine if this is a remote frame by checking the TXRQST and DIR bits.
    //
    if((!(usMsgCtrl & CAN_IFMCTL_TXRQST) && (usArbReg[1] & CAN_IFARB2_DIR)) ||
       ((usMsgCtrl & CAN_IFMCTL_TXRQST) && (!(usArbReg[1] & CAN_IFARB2_DIR))))
    {
        pMsgObject->ulFlags |= MSG_OBJ_REMOTE_FRAME;
    }

    //
    // Get the Identifier out of the register, the format depends on size of
    // the Mask.
    //
    if(usArbReg[1] & CAN_IFARB2_XTD)
    {
        //
        // Set the 29 bit version of the Identifier for this message object.
        //
        pMsgObject->ulMsgID = ((usArbReg[1] & CAN_IFARB2_ID) << 16) |
            usArbReg[0];

        pMsgObject->ulFlags |= MSG_OBJ_EXTENDED_ID;
    }
    else
    {
        //
        // The Identifier is an 11 bit value.
        //
        pMsgObject->ulMsgID = (usArbReg[1] & CAN_IFARB2_ID) >> 2;
    }

    //
    // Indicate that we lost some data.
    //
    if(usMsgCtrl & CAN_IFMCTL_MSGLST)
    {
        pMsgObject->ulFlags |= MSG_OBJ_DATA_LOST;
    }

    //
    // Set the flag to indicate if ID masking was used.
    //
    if(usMsgCtrl & CAN_IFMCTL_UMASK)
    {
        if(usArbReg[1] & CAN_IFARB2_XTD)
        {
            //
            // The Identifier Mask is assumed to also be a 29 bit value.
            //
            pMsgObject->ulMsgIDMask =
                ((usMaskReg[1] & CAN_IFMSK2_MSK) << 16) | usMaskReg[0];
            //
            // If this is a fully specified Mask and a remote frame then don't
            // set the MSG_OBJ_USE_ID_FILTER because the ID was not really
            // filtered.
            //
            if((pMsgObject->ulMsgIDMask != 0x1fffffff) ||
               ((pMsgObject->ulFlags & MSG_OBJ_REMOTE_FRAME) == 0))
            {
                pMsgObject->ulFlags |= MSG_OBJ_USE_ID_FILTER;
            }
        }
        else
        {
            //
            // The Identifier Mask is assumed to also be an 11 bit value.
            //
            pMsgObject->ulMsgIDMask = (usMaskReg[1] & CAN_IFMSK2_MSK) >> 2;

            //
            // If this is a fully specified Mask and a remote frame then don't
            // set the MSG_OBJ_USE_ID_FILTER because the ID was not really
            // filtered.
            //
            if((pMsgObject->ulMsgIDMask != 0x7ff) ||
               ((pMsgObject->ulFlags & MSG_OBJ_REMOTE_FRAME) == 0))
            {
                pMsgObject->ulFlags |= MSG_OBJ_USE_ID_FILTER;
            }
        }

        //
        // Indicate if the extended bit was used in filtering.
        //
        if(usMaskReg[1] & CAN_IFMSK2_MXTD)
        {
            pMsgObject->ulFlags |= MSG_OBJ_USE_EXT_FILTER;
        }

        //
        // Indicate if direction filtering was enabled.
        //
        if(usMaskReg[1] & CAN_IFMSK2_MDIR)
        {
            pMsgObject->ulFlags |= MSG_OBJ_USE_DIR_FILTER;
        }
    }

    //
    // Set the interupt flags.
    //
    if(usMsgCtrl & CAN_IFMCTL_TXIE)
    {
        pMsgObject->ulFlags |= MSG_OBJ_TX_INT_ENABLE;
    }
    if(usMsgCtrl & CAN_IFMCTL_RXIE)
    {
        pMsgObject->ulFlags |= MSG_OBJ_RX_INT_ENABLE;
    }

    //
    // See if there is new data available.
    //
    if(usMsgCtrl & CAN_IFMCTL_NEWDAT)
    {
        //
        // Get the amount of data needed to be read.
        //
        pMsgObject->ulMsgLen = (usMsgCtrl & CAN_IFMCTL_DLC);

        //
        // Don't read any data for a remote frame, there is nothing valid
        // in that buffer anyway.
        //
        if((pMsgObject->ulFlags & MSG_OBJ_REMOTE_FRAME) == 0)
        {
            //
            // Read out the data from the CAN registers.
            //
            CANReadDataReg(pMsgObject->pucMsgData,
                           (unsigned long *)(ulBase + CAN_O_IF2DA1),
                           pMsgObject->ulMsgLen);
        }

        //
        // Now clear out the new data flag.
        //
        CANWriteReg(ulBase + CAN_O_IF2CMSK, CAN_IFCMSK_NEWDAT);

        //
        // Transfer the message object to the message object specifiec by
        // ulObjID.
        //
        CANWriteReg(ulBase + CAN_O_IF2CRQ, ulObjID & CAN_IFCRQ_MNUM_MSK);

        //
        // Wait for busy bit to clear
        //
        while(CANReadReg(ulBase + CAN_O_IF2CRQ) & CAN_IFCRQ_BUSY)
        {
        }

        //
        // Indicate that there is new data in this message.
        //
        pMsgObject->ulFlags |= MSG_OBJ_NEW_DATA;
    }
    else
    {
        //
        // Along with the MSG_OBJ_NEW_DATA not being set the amount of data
        // needs to be set to zero if none was available.
        //
        pMsgObject->ulMsgLen = 0;
    }
}

//*****************************************************************************
//
//! Clears a message object so that it is no longer used
//!
//! \param ulBase is the base address of the CAN controller.
//! \param ulObjID is the message object number to disable (1-32)
//!
//! This function frees the specified message object from use.  Once a
//! message object has been "cleared" it will no longer automatically
//! send or receive messages, or generate interrupts.
//!
//! \return None.
//
//*****************************************************************************
void
CANMessageClear(unsigned long ulBase, unsigned long ulObjID)
{
    //
    // Check the arguments.
    //
    ASSERT((ulBase == CAN0_BASE) ||
           (ulBase == CAN1_BASE));
    ASSERT((ulObjID >= 1) && (ulObjID <= 32));

    //
    // Wait for busy bit to clear
    //
    while(CANReadReg(ulBase + CAN_O_IF1CRQ) & CAN_IFCRQ_BUSY)
    {
    }

    //
    // Clear the message value bit in the arbitration register.
    // This indicates the message is not valid.
    //
    CANWriteReg(ulBase + CAN_O_IF1CMSK, CAN_IFCMSK_WRNRD | CAN_IFCMSK_ARB);
    CANWriteReg(ulBase + CAN_O_IF1ARB1, 0);
    CANWriteReg(ulBase + CAN_O_IF1ARB2, 0);

    //
    // Initiate programming the message object
    //
    CANWriteReg(ulBase + CAN_O_IF1CRQ, ulObjID & CAN_IFCRQ_MNUM_MSK);
}

//*****************************************************************************
//
// Close the Doxygen group.
//! @}
//
//*****************************************************************************

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色偷偷大香| 男女男精品视频网| 日本一区二区高清| 久久综合色天天久久综合图片| 欧美日精品一区视频| 欧美日韩精品系列| 精品视频在线免费观看| 欧美视频在线观看一区二区| 日本一区二区成人在线| 国产一区二区中文字幕| 日韩综合在线视频| 亚州成人在线电影| 天天色天天爱天天射综合| 日韩av在线播放中文字幕| 亚洲精选视频在线| 婷婷久久综合九色综合绿巨人| 亚洲自拍偷拍图区| 蜜桃av一区二区| 久久不见久久见免费视频1| 国产一区二区日韩精品| 东方aⅴ免费观看久久av| 成人av资源站| 色综合网站在线| 69av一区二区三区| 国产性做久久久久久| 亚洲欧洲制服丝袜| 麻豆成人久久精品二区三区小说| 国产美女视频一区| 色综合色综合色综合| 3d动漫精品啪啪一区二区竹菊| 欧美大肚乱孕交hd孕妇| 中文一区一区三区高中清不卡| 亚洲色图清纯唯美| 日韩国产在线观看| 丁香婷婷综合网| 精品视频一区三区九区| 久久久久9999亚洲精品| 亚洲免费av观看| 视频一区欧美精品| 成人激情综合网站| 欧美日韩国产色站一区二区三区| 精品成人一区二区| 亚洲一区二区不卡免费| 美女国产一区二区| 色婷婷久久久久swag精品| 日韩亚洲欧美一区| 亚洲青青青在线视频| 一区二区三区在线看| 日韩二区三区四区| 成人免费观看av| 日韩午夜激情av| 国产色婷婷亚洲99精品小说| 一区二区久久久久久| 麻豆国产精品一区二区三区| 在线一区二区三区做爰视频网站| 精品久久久久久久久久久久包黑料 | 午夜久久电影网| 国内久久婷婷综合| 欧美视频一区二区三区四区| 久久精子c满五个校花| 香蕉久久夜色精品国产使用方法 | 精品久久久三级丝袜| 亚洲综合在线免费观看| 成人aa视频在线观看| 久久青草欧美一区二区三区| 午夜精品久久久久久久久久| 91女厕偷拍女厕偷拍高清| 欧美大肚乱孕交hd孕妇| 亚洲成在人线在线播放| 国产精品888| 精品99999| 亚瑟在线精品视频| 欧美久久久久久久久久| 亚洲午夜影视影院在线观看| 97se亚洲国产综合自在线不卡| 久久婷婷国产综合国色天香| 国产自产高清不卡| 日韩视频一区二区| 天天色天天爱天天射综合| 在线播放国产精品二区一二区四区| 亚洲欧美另类久久久精品| eeuss鲁片一区二区三区| 欧美国产精品中文字幕| 国产精品99久久久久久久vr | 中文字幕一区二区不卡| 国内精品写真在线观看| 欧美成人a在线| 午夜电影一区二区三区| 色婷婷久久久久swag精品| 国产精品成人免费| av电影天堂一区二区在线| 久久精品一区四区| av在线综合网| 亚洲一区二区在线播放相泽| 欧美日韩国产bt| 日韩电影免费一区| 亚洲精品在线观| 国产成人夜色高潮福利影视| 自拍偷拍国产精品| 色播五月激情综合网| 午夜精品久久久久久久| 日韩一区二区三区免费观看| 伦理电影国产精品| 久久青草欧美一区二区三区| 久久精品av麻豆的观看方式| 久久精品在线免费观看| 91黄色激情网站| 麻豆91在线播放免费| 日韩三级视频在线看| 懂色av一区二区在线播放| 亚洲摸摸操操av| 日韩三级免费观看| 国产不卡在线视频| 婷婷久久综合九色综合伊人色| www日韩大片| 99精品一区二区| 免费在线看成人av| 亚洲免费av在线| 精品sm捆绑视频| 日本高清不卡aⅴ免费网站| 视频一区视频二区中文| 国产精品国产精品国产专区不片 | 午夜精品久久久久影视| 精品国产欧美一区二区| 91老师片黄在线观看| 精品一区二区久久| 国产精品热久久久久夜色精品三区| 欧美喷潮久久久xxxxx| 岛国av在线一区| 美腿丝袜亚洲三区| 一区在线播放视频| 国产亚洲精品久| 欧美午夜视频网站| 91久久一区二区| 9人人澡人人爽人人精品| 精品一区二区三区在线播放视频| 国产精品无人区| 精品处破学生在线二十三| 欧美网站大全在线观看| 成人综合在线观看| 麻豆成人免费电影| 亚洲视频狠狠干| 国产精品美女久久久久久久久久久| 99久久国产综合精品色伊| 精品亚洲porn| 日韩**一区毛片| 亚洲午夜电影网| 亚洲最新在线观看| 亚洲欧美日韩国产综合| 国产精品每日更新在线播放网址| 26uuu国产在线精品一区二区| 日韩欧美一区中文| 欧美午夜免费电影| 91.com视频| 欧美老人xxxx18| 欧美久久高跟鞋激| 欧美在线综合视频| 欧美视频在线一区| 在线观看日产精品| 色婷婷综合激情| 色拍拍在线精品视频8848| 色美美综合视频| 91热门视频在线观看| 国产a区久久久| 99久久亚洲一区二区三区青草 | 久久精品一区二区| 日韩精品中午字幕| 精品国产一区二区三区久久影院| 欧美人体做爰大胆视频| 欧美一级xxx| 久久精品欧美日韩| 久久精品水蜜桃av综合天堂| 国产精品美女视频| 一区二区三区在线视频免费| 亚洲福利一二三区| 亚洲一区二区三区四区不卡| 一区二区三区在线免费| 亚洲一二三区在线观看| 日本亚洲天堂网| 国产一区高清在线| av激情综合网| 欧美日韩不卡一区二区| 日韩小视频在线观看专区| 国产欧美精品一区二区色综合 | 精品亚洲成a人| 成人一区二区三区在线观看| 在线观看视频一区| 精品国产sm最大网站免费看| 国产精品久久久久一区| 亚洲成a人片综合在线| 国产一区二区三区综合| 97se亚洲国产综合自在线| 日韩欧美的一区二区| 亚洲色大成网站www久久九九| 偷拍日韩校园综合在线| 国产麻豆9l精品三级站| 欧美自拍丝袜亚洲| 欧美—级在线免费片| 亚洲大尺度视频在线观看| 国产成人一级电影|