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

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

?? os_dcc.c

?? mcb2100下的基于ucos-ii的CAN驅動
?? C
字號:
/*
*********************************************************************************************************
*                                               uC/OS-II
*                                         The Real-Time Kernel
*
*
*                             (c) Copyright 1992-2006, Micrium, Weston, FL
*                                          All Rights Reserved
*
*                                           Generic ARM Port
*                                          DCC Communication
*
* File      : OS_DCC.C
* Version   : V1.81
*
* For       : ARM7 or ARM9
* Mode      : ARM or Thumb
* Toolchain : IAR's EWARM V4.40a and higher
*********************************************************************************************************
*/

#include <ucos_ii.h>
                                                     /* This directive suppresses warnings for non-... */
#pragma  diag_suppress=Pe940                         /* ...void functions with no return values.       */

#if OS_CPU_ARM_DCC_EN > 0

/*
*********************************************************************************************************
*                                           CONSTANTS
*********************************************************************************************************
*/

#define  OS_DCC_OP_READ_U32     0x01000000
#define  OS_DCC_OP_READ_U16     0x02000000
#define  OS_DCC_OP_READ_U8      0x04000000
#define  OS_DCC_OP_GET_CAPS     0x08000000
#define  OS_DCC_OP_WRITE_U32    0x10000000
#define  OS_DCC_OP_WRITE_U16    0x20000000
#define  OS_DCC_OP_WRITE_U8     0x40000000
#define  OS_DCC_OP_ODD_ADDR     0x80000000
#define  OS_DCC_OP_COMMAND      0x00000001

#define  OS_DCC_COMM_CTRL_RD    0x00000001
#define  OS_DCC_COMM_CTRL_WR    0x00000002

#define  OS_DCC_SIGNATURE       0x91CA0000
#define  OS_DCC_CONFIG          0x00000077

/*
*********************************************************************************************************
*                                          LOCAL VARIABLES
*********************************************************************************************************
*/

static  INT32U  OSDCC_Cmd;
static  INT32U  OSDCC_Addr;
static  INT32U  OSDCC_ItemCnt;
static  INT32U  OSDCC_Data;

/*
*********************************************************************************************************
*                                       OSDCC_ReadCtrl()
*
* Description: This function retrieves data from the comms control register.
*
* Arguments  : none
*
* Returns    : The contents of the comms control register
*
* Notes      : 1) This function uses a coprocessor register transfer instruction to place the contents
*                 of the comms control register in R0.  Thus, the function does not contain an
*                 explicit return statement.  "#pragma diag_suppress=Pe940", which appears at the
*                 top of this file, is used to suppress the warning that normally results from non-
*                 void functions lacking return statements.
*********************************************************************************************************
*/

static  __arm  INT32U  OSDCC_ReadCtrl (void)
{
    __asm("mrc  P14,0,R0,C0,C0");
}

/*
*********************************************************************************************************
*                                         OSDCC_Read()
*
* Description: This function retrieves data from the comms data read register.
*
* Arguments  : none
*
* Returns    : The contents of the comms data read register
*
* Notes      : 1) This function uses a coprocessor register transfer instruction to place the contents
*                 of the comms data read register in R0.  Thus, the function does not contain an
*                 explicit return statement.  "#pragma diag_suppress=Pe940", which appears at the
*                 top of this file, is used to suppress the warning that normally results from non-
*                 void functions lacking return statements.
*********************************************************************************************************
*/

static  __arm  INT32U  OSDCC_Read (void)
{
    __asm("mrc  P14,0,R0,C1,C0");
}

/*
*********************************************************************************************************
*                                        OSDCC_Write()
*
* Description: This function places data in the comms data write register.
*
* Arguments  : none
*
* Returns    : none
*********************************************************************************************************
*/

static  __arm  void  OSDCC_Write (INT32U data)
{
    __asm("mcr  P14,0,R0,C1,C0");
}

/*
*********************************************************************************************************
*                                        OSDCC_Handler()
*
* Description: This function reads commands from the DCC comms data read register.  Data may be
*              transferred to or from memory based on those commands.
*
* Arguments  : none
*
* Returns    : none
*
* Notes      : 1) This function should be called periodically.  If OS_CPU_ARM_DCC_EN is '1', this
*                 function will be called from both the idle task hook and the tick interrupt hook.
*********************************************************************************************************
*/

void  OSDCC_Handler (void)
{
    INT32U  reg_val;

                                                     /* Check for the presence of new data             */
    if ((OSDCC_ReadCtrl() & OS_DCC_COMM_CTRL_RD) != 0) {
        reg_val = OSDCC_Read();                      /* Read the new data                              */

        if ((reg_val & OS_DCC_OP_COMMAND) != 0) {    /* Determine whether a command has been received  */
            OSDCC_Cmd = reg_val;
                                                     /* Check for an odd address in the next operation */
            if ((OSDCC_Cmd & OS_DCC_OP_ODD_ADDR) != 0) {
                OSDCC_Addr |= 1;
            }
                                                     /* If data will be read, adjust OSDCC_ItemCnt     */
            if ((OSDCC_Cmd & (OS_DCC_OP_READ_U32 | OS_DCC_OP_READ_U16 | OS_DCC_OP_READ_U8
                                                 |  OS_DCC_OP_GET_CAPS)) != 0) {
                OSDCC_ItemCnt = (OSDCC_Cmd >> 2) & 0xffff;
            } else {                                 /* Data will be written; initialize OSDCC_Data    */
                if ((OSDCC_Cmd & OS_DCC_OP_WRITE_U32) != 0) {
                    OSDCC_Data |= (OSDCC_Cmd << 14) & 0xffff0000;
                } else {
                    OSDCC_Data = (OSDCC_Cmd >> 2) & 0xffff;
                }
                                                     /* Write a single byte                            */
                if ((OSDCC_Cmd & OS_DCC_OP_WRITE_U8) != 0) {
                    *(INT8U *)OSDCC_Addr = OSDCC_Data;
                    OSDCC_Addr += 1;
                }
                                                     /* Write two bytes                                */
                if ((OSDCC_Cmd & OS_DCC_OP_WRITE_U16) != 0) {
                    *(INT16U *)OSDCC_Addr = OSDCC_Data;
                    OSDCC_Addr += 2;
                }
                                                     /* Write four bytes                               */
                if ((OSDCC_Cmd & OS_DCC_OP_WRITE_U32) != 0) {
                    *(INT32U *)OSDCC_Addr =OSDCC_Data;
                    OSDCC_Addr += 4;
                }
            }
            return;
        }
        OSDCC_Addr = reg_val;                        /* An address was received; OSDCC_Addr is updated */
    }
    if (OSDCC_ItemCnt != 0) {                        /* Determine whether data must be read            */
                                                     /* Confirm that the comms data write register...  */
                                                     /* ...is free from the processor point of view    */
        if ((OSDCC_ReadCtrl() & OS_DCC_COMM_CTRL_WR) == 0) {
            reg_val = (OS_DCC_CONFIG | OS_DCC_SIGNATURE);
                                                     /* Read a single byte                             */
            if ((OSDCC_Cmd & OS_DCC_OP_READ_U8) != 0) {
                reg_val = *(INT8U *)OSDCC_Addr;
                OSDCC_Addr += 1;
            }
                                                     /* Read two bytes                                 */
            if ((OSDCC_Cmd & OS_DCC_OP_READ_U16) != 0) {
                reg_val = *(INT16U *)OSDCC_Addr;
                OSDCC_Addr += 2;
            }
                                                     /* Read four bytes                                */
            if ((OSDCC_Cmd & OS_DCC_OP_READ_U32) != 0) {
                reg_val = *(INT32U *)OSDCC_Addr;
                OSDCC_Addr += 4;
            }

            OSDCC_Write(reg_val);                    /* Place data in the comms data write register    */
            OSDCC_ItemCnt--;                         /* Decrement the number of items to be read       */
        }
    }
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区五区| 在线观看视频欧美| 国产九色sp调教91| 捆绑紧缚一区二区三区视频| 蜜臀av一区二区在线免费观看| 亚洲 欧美综合在线网络| 爽好久久久欧美精品| 日本亚洲欧美天堂免费| 蜜桃一区二区三区在线观看| 看国产成人h片视频| 国产麻豆精品theporn| 粉嫩绯色av一区二区在线观看| 懂色av一区二区三区免费看| 91在线观看视频| 欧美自拍偷拍一区| 91精品国产91久久久久久最新毛片 | 亚洲亚洲人成综合网络| 午夜久久久影院| 久久精品国产99国产精品| 国产精品一色哟哟哟| www.激情成人| 欧美日韩在线综合| 日韩女优电影在线观看| 国产三级精品在线| 国产精品夫妻自拍| 亚洲成人www| 精品在线观看视频| 91丝袜美腿高跟国产极品老师 | 色综合一区二区三区| 日韩免费视频一区二区| 久久影院午夜片一区| 国产女主播视频一区二区| 一个色综合网站| 日韩—二三区免费观看av| 国产一区二区在线视频| 99久久久国产精品免费蜜臀| 宅男噜噜噜66一区二区66| 久久久午夜电影| 一区二区三区日韩精品视频| 久久99精品国产麻豆婷婷洗澡| 成人永久aaa| 欧美日韩国产精选| www国产精品av| 亚洲一区在线视频观看| 国产精品一卡二卡在线观看| 色婷婷av一区二区三区gif | 久久国产麻豆精品| 97se亚洲国产综合在线| 制服丝袜中文字幕一区| 国产精品色哟哟| 日本不卡高清视频| 一本大道久久a久久精品综合| 精品国产免费人成在线观看| 亚洲激情图片小说视频| 激情六月婷婷久久| 欧美日韩日日摸| 国产精品护士白丝一区av| 美国三级日本三级久久99| 99久久精品99国产精品| 精品免费一区二区三区| 一区二区三区欧美| 丁香亚洲综合激情啪啪综合| 91精品国产综合久久精品图片 | 精品一区二区三区久久| 日本道免费精品一区二区三区| 欧美精品一区二区三区高清aⅴ | 色诱亚洲精品久久久久久| 精品99一区二区| 天堂影院一区二区| 91极品美女在线| 中文字幕一区日韩精品欧美| 国产高清久久久| 日韩欧美自拍偷拍| 亚洲v精品v日韩v欧美v专区| av一二三不卡影片| 国产精品色噜噜| 国产91在线看| www欧美成人18+| 久色婷婷小香蕉久久| 欧美日韩中文字幕一区二区| 亚洲欧美日韩国产成人精品影院| 成人高清视频在线观看| 久久久久久久综合日本| 黑人精品欧美一区二区蜜桃| 日韩一区二区精品| 日韩制服丝袜av| 91麻豆精品久久久久蜜臀| 一区二区激情小说| 日本精品一区二区三区四区的功能| 欧美韩国日本一区| 成人福利视频在线看| 国产色产综合产在线视频| 国产一区二区三区免费观看| 日韩欧美的一区| 久久99精品国产麻豆婷婷| 精品久久免费看| 国产一区二区精品久久99 | 麻豆精品一区二区av白丝在线| 欧美日韩国产天堂| 天天综合色天天综合色h| 欧美视频一区二区三区| 亚洲黄一区二区三区| 日本乱码高清不卡字幕| 亚洲一级不卡视频| 欧美日本一区二区| 人人超碰91尤物精品国产| 7777精品伊人久久久大香线蕉经典版下载| 亚洲成人动漫精品| 日韩一二三四区| 韩国午夜理伦三级不卡影院| 久久久久久久久久久久电影| 丁香网亚洲国际| 亚洲精品乱码久久久久| 欧美片在线播放| 蜜臀久久99精品久久久久宅男| 日韩欧美精品在线| 国产盗摄女厕一区二区三区| 亚洲欧洲另类国产综合| 91精品福利视频| 日韩高清一级片| www成人在线观看| 99国产精品99久久久久久| 亚洲午夜三级在线| 精品剧情v国产在线观看在线| 粉嫩av一区二区三区在线播放| 中文字幕日韩一区| 欧美男生操女生| 久久国产三级精品| 国产精品美女久久福利网站| 在线亚洲人成电影网站色www| 日本v片在线高清不卡在线观看| 亚洲精品一区二区在线观看| 国产98色在线|日韩| 亚洲国产精品一区二区久久| 精品入口麻豆88视频| 成人免费观看男女羞羞视频| 亚洲综合久久久| 欧美不卡激情三级在线观看| 99久久久精品| 免费成人在线视频观看| 国产精品女同互慰在线看| 欧美视频一区二区三区四区| 国产专区综合网| 亚洲精品亚洲人成人网在线播放| 欧美一区二区三区思思人| 成人在线视频一区二区| 香蕉久久夜色精品国产使用方法 | 中文字幕一区二区三区在线观看 | 欧美人妖巨大在线| 国产99久久久精品| 亚洲.国产.中文慕字在线| 国产亚洲精品bt天堂精选| 欧美日韩日日摸| 不卡av在线网| 激情深爱一区二区| 一区2区3区在线看| 久久九九久久九九| 欧美一区二区久久| 色菇凉天天综合网| 国产精品亚洲а∨天堂免在线| 亚洲国产另类av| 国产精品对白交换视频| 精品理论电影在线| 欧美日韩国产影片| 91丨porny丨中文| 国产美女主播视频一区| 日韩精品视频网| 亚洲美女偷拍久久| 欧美大度的电影原声| 欧美中文字幕一区二区三区亚洲 | 精品乱人伦一区二区三区| 欧洲另类一二三四区| 成人性色生活片| 老司机精品视频线观看86| 亚洲一区二区三区不卡国产欧美| 日本一区二区三级电影在线观看 | 日韩欧美一区二区三区在线| 一本大道久久a久久精品综合| 国产在线不卡视频| 奇米影视一区二区三区| 亚洲黄色免费电影| 成人免费一区二区三区在线观看| 精品国产一区a| 欧美一级片在线看| 欧美日韩在线亚洲一区蜜芽| 91最新地址在线播放| 成人午夜在线播放| 国产99久久久国产精品| 国产一区二区按摩在线观看| 久久精品国产99国产| 日本美女一区二区三区| 亚洲成人在线观看视频| 一区二区三区中文在线| 亚洲色图制服诱惑 | 国产精品99久久久久久久vr| 免费观看日韩av| 日韩国产欧美三级| 三级欧美在线一区| 热久久久久久久| 麻豆精品在线观看|