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

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

?? esd_pc104_200.c

?? CANOPen通信的一些源碼
?? C
字號:
/* esd_can_pc104_200.c - implementation of Board Interface for ESD CAN PC104/200 *//* Copyright 2001 Wind River Systems, Inc. *//* modification history --------------------27nov01,dnb written*//* DESCRIPTIONThis file contains the functions that provide a board-level interfaceto the ESD CAN PC104/200 card.*//* includes */#include <vxWorks.h>#include <errnoLib.h>#include <intLib.h>#include <iv.h>#include <sysLib.h>#include <string.h> /* for strtok_r */#include <CAN/wnCAN.h>#include <CAN/canController.h>#include <CAN/canBoard.h>#include <CAN/i82527.h>#include <CAN/sja1000.h>#include <CAN/private/esd_can_pc104_200.h>#if (CPU != SH7750)static const char deviceName[] ="ESD CAN PC104/200";                      const UINT esd_can_pc104_200_i82527_ndx = 0;const UINT esd_can_pc104_200_sja1000_ndx = 1;UINT max_esd_can_pc104_200_boards;struct ESD_CAN_PC104_200_DeviceEntry *esd_can_pc104_200_DeviceArray;/* external reference */STATUS CAN_DEVICE_establishLinks(WNCAN_DEVICE *pDev, WNCAN_BoardType brdType,                      WNCAN_ControllerType ctrlType);/************************************************************************** esd_can_pc104_200_setirq - sets the IRQ level of the ESD PC104/200 board*** RETURNS: N/A*   * ERRNO: N/A**/    void esd_can_pc104_200_setirq(    ULONG ioBase,    UINT irqLevel){    UINT l, l1, stat;    int oldLevel;    /* Lock out all interrupts */    oldLevel = intLock();    /* Assign interrupt level on card */    l1 = irqLevel;    for (l = 0; l < 4; l++)    {        stat=l;        if (l1 & 0x01)            stat |= 0x80;        sysOutByte(ioBase+3,stat);        l1 = l1 >> 1;    }    /* Change the IRQ-output from Tri-state into driven status. */#if (CPU_FAMILY == I80X86)    sysOutByte(ioBase+3, (char)0x87);#else    sysOutByte(ioBase+3, 0x87);#endif    /* latch 1000 times */    for(l = 0; l < 1000; l++)    {        sysOutByte(ioBase+3, 5);    }       /* Unlock interrupts */    intUnlock(oldLevel);    return;}/************************************************************************** esd_can_pc104_200_isr - board-level isr*** RETURNS: N/A*   * ERRNO: N/A**/    static void esd_can_pc104_200_isr(    ULONG param){    struct ESD_CAN_PC104_200_DeviceEntry *pDE;    pDE = (struct ESD_CAN_PC104_200_DeviceEntry *)param;    /* disabling the interrupt. Deactivate the bits in the latch.*/    sysOutByte(pDE->ioAddress+3,0x06);    if(pDE->allocated[esd_can_pc104_200_i82527_ndx])    {        i82527ISR((ULONG)&pDE->canDevice[esd_can_pc104_200_i82527_ndx]);    }    if(pDE->allocated[esd_can_pc104_200_sja1000_ndx])    {        sja1000ISR((ULONG)&pDE->canDevice[esd_can_pc104_200_sja1000_ndx]);    }    /* Enable the interrupt. This enabling pin is also used for disabling        interrupts without changing the state of the outputs to tristate.        Writing 0x06 to the same address disables interrupts, writing 0x86       reenables interrupts */#if (CPU_FAMILY == I80X86)    sysOutByte(pDE->ioAddress+3, (char)0x86);#else    sysOutByte(pDE->ioAddress+3, 0x86);#endif}/************************************************************************** esd_can_pc104_200_new - install driver for pc104/200 board*** RETURNS: OK or ERROR*   * ERRNO: S_can_out_of_memory**/STATUS esd_can_pc104_200_new(    ULONG ioAddress,    UINT irq){    UINT          i;    UINT          brdNdx=0;    int           oldLevel;    STATUS        retCode;    VOIDFUNCPTR*  irqVec = 0;        struct  WNCAN_Device *pDev[2];    struct  ESD_CAN_PC104_200_DeviceEntry *pDeviceEntry;                retCode = ERROR;      /* pessimistic */    pDeviceEntry = 0;        /* find a free device data structure */    for(i = 0 ; i < max_esd_can_pc104_200_boards; i++)    {        if(esd_can_pc104_200_DeviceArray[i].inUse == 0)        {            esd_can_pc104_200_DeviceArray[i].inUse = 1;            pDeviceEntry = &esd_can_pc104_200_DeviceArray[i];            brdNdx = i;            break;        }                }        if(i == (max_esd_can_pc104_200_boards + 1))    {        retCode = ERROR;        errnoSet(S_can_out_of_memory);        goto exit;    }        if(!pDeviceEntry)    {        errnoSet(S_can_out_of_memory);        retCode = ERROR;        goto exit;    }        /* setup data structures */    for(i = 0 ; i < 2 ; i++)    {        pDev[i]        = &pDeviceEntry->canDevice[i];        pDev[i]->pCtrl = &pDeviceEntry->canControllerArray[i];        pDev[i]->pBrd  =  &pDeviceEntry->canBoardArray[i];        pDev[i]->deviceName = deviceName;        pDev[i]->pBrd->irq = irq;        pDev[i]->pBrd->ioAddress = ioAddress;        pDev[i]->pBrd->xtalFreq = _16MHZ;		/* set default baud rate to 250 Kbits/sec */        pDev[i]->pCtrl->brp = 1;               pDev[i]->pCtrl->sjw = 0;          pDev[i]->pCtrl->tseg1 = 0xc;        pDev[i]->pCtrl->tseg2 = 0x1;		pDev[i]->pCtrl->samples = 0;    }    pDev[esd_can_pc104_200_i82527_ndx]->pCtrl->chnType = g_i82527chnType;    pDev[esd_can_pc104_200_i82527_ndx]->pCtrl->numChn  = I82527_MAX_MSG_OBJ;    pDev[esd_can_pc104_200_i82527_ndx]->pCtrl->chnMode = &pDeviceEntry->i82527chnMode[0];	pDev[esd_can_pc104_200_i82527_ndx]->pCtrl->csData = &pDeviceEntry->can82527;    pDev[esd_can_pc104_200_sja1000_ndx]->pCtrl->chnType = g_sja1000chnType;    pDev[esd_can_pc104_200_sja1000_ndx]->pCtrl->numChn  = SJA1000_MAX_MSG_OBJ;    pDev[esd_can_pc104_200_sja1000_ndx]->pCtrl->chnMode = &pDeviceEntry->sja1000chnMode[0];    pDev[esd_can_pc104_200_sja1000_ndx]->pCtrl->csData  = &pDeviceEntry->txMsg;	 	    if(CAN_DEVICE_establishLinks(pDev[esd_can_pc104_200_i82527_ndx],        WNCAN_ESD_PC104_200, WNCAN_I82527) == ERROR)    {        pDev[esd_can_pc104_200_i82527_ndx] = 0;                    goto exit;    }                if(CAN_DEVICE_establishLinks(pDev[esd_can_pc104_200_sja1000_ndx],        WNCAN_ESD_PC104_200, WNCAN_SJA1000) == ERROR)    {        pDev[esd_can_pc104_200_sja1000_ndx] = 0;        goto exit;    }	pDev[esd_can_pc104_200_i82527_ndx]->deviceId = (brdNdx << 8);                pDev[esd_can_pc104_200_sja1000_ndx]->deviceId = (brdNdx << 8) | esd_can_pc104_200_sja1000_ndx;                        /* set the irq on the board */    esd_can_pc104_200_setirq(ioAddress, irq);    /* connect to isr */    oldLevel = intLock();    #if CPU_FAMILY == I80X86        irqVec = INUM_TO_IVEC(irq+0x20);    #elif CPU_FAMILY == PPC        irqVec = INUM_TO_IVEC(irq+0x40);    #else        #warning irqVec not defined     #endif        intConnect(irqVec,esd_can_pc104_200_isr,(ULONG)pDeviceEntry);        /* activate IRQ at the board and CPU level */    #if (CPU_FAMILY == I80X86)        sysOutByte(ioAddress+3, (char)0x86);        sysIntEnablePIC(irq);    #elif CPU_FAMILY == PPC        sysOutByte(ioAddress+3, 0x86);        intEnable(irq+0x40);    #else        #warning interrupts cannot be enabled    #endif    intUnlock(oldLevel);        pDeviceEntry->ioAddress = ioAddress;    pDeviceEntry->irq       = irq;    retCode = OK;    exit:    return retCode;}/************************************************************************** esd_can_pc104_enableIrq - enable irq on board*** RETURNS: N/A*   * ERRNO: N/A**/static void esd_can_pc104_enableIrq(    struct WNCAN_Device *pDev){ #if (CPU_FAMILY == I80X86)       sysOutByte(pDev->pBrd->ioAddress+3, (char)0x86);#else       sysOutByte(pDev->pBrd->ioAddress+3, 0x86);#endif    return;}/************************************************************************** esd_can_pc104_disableIrq - disable irq on board*** RETURNS: N/A*   * ERRNO: N/A**/static void esd_can_pc104_disableIrq(    struct WNCAN_Device *pDev){    sysOutByte(pDev->pBrd->ioAddress+3, 0x06);    return;}/************************************************************************** esd_can_pc104_canInByteForI82527*** RETURNS: *   * ERRNO: **/static UCHAR esd_can_pc104_canInByteForI82527(    struct WNCAN_Device *pDev,    unsigned int offset){    sysOutByte(pDev->pBrd->ioAddress + 7,offset);    return sysInByte(pDev->pBrd->ioAddress+4);}/************************************************************************** esd_can_pc104_canOutByteForI82527*** RETURNS: *   * ERRNO: **/static void esd_can_pc104_canOutByteForI82527(    struct WNCAN_Device *pDev,    unsigned int offset,    UCHAR value){    sysOutByte(pDev->pBrd->ioAddress + 7,offset);    sysOutByte(pDev->pBrd->ioAddress + 4, value);}        /************************************************************************** esd_can_pc104_canInByteForSJA1000*** RETURNS: *   * ERRNO: **/static UCHAR esd_can_pc104_canInByteForSJA1000(    struct WNCAN_Device *pDev,    unsigned int offset){    sysOutByte(pDev->pBrd->ioAddress + 1,offset);    return sysInByte(pDev->pBrd->ioAddress);}/************************************************************************** esd_can_pc104_canOutByteForSJA1000*** RETURNS: *   * ERRNO: **/static void esd_can_pc104_canOutByteForSJA1000(    struct WNCAN_Device *pDev,    unsigned int offset,    UCHAR value){    sysOutByte(pDev->pBrd->ioAddress + 1,offset);    sysOutByte(pDev->pBrd->ioAddress, value);}/************************************************************************** esd_can_pc104_200_establishLinks - set up function pointers*** RETURNS: OK or ERROR*   * ERRNO: S_can_illegal_config**/STATUS esd_can_pc104_200_establishLinks(struct WNCAN_Device *pDev){    STATUS retCode = OK;    pDev->pBrd->onEnterISR = 0;    pDev->pBrd->onLeaveISR = 0;    pDev->pBrd->enableIrq  = esd_can_pc104_enableIrq;    pDev->pBrd->disableIrq = esd_can_pc104_disableIrq;    if(pDev->pCtrl->ctrlType == WNCAN_I82527)    {        pDev->pBrd->canInByte = esd_can_pc104_canInByteForI82527;        pDev->pBrd->canOutByte = esd_can_pc104_canOutByteForI82527;    }    else if(pDev->pCtrl->ctrlType == WNCAN_SJA1000)    {        pDev->pBrd->canInByte = esd_can_pc104_canInByteForSJA1000;        pDev->pBrd->canOutByte = esd_can_pc104_canOutByteForSJA1000;    }    else    {        errnoSet(S_can_illegal_config);        retCode = ERROR;    }    return retCode;}/************************************************************************** esd_can_pc104_200_open - open a CAN device** RETURNS: pointer to a WNCAN_Device structure or 0 if error*   * ERRNO: S_can_illegal_board_no*        S_can_illegal_ctrl_no*        S_can_busy**/struct WNCAN_Device *esd_can_pc104_200_open(UINT brdNdx, UINT ctrlNdx){    struct WNCAN_Device *pRet = 0;   /* pessimistic */        if((brdNdx >= max_esd_can_pc104_200_boards) ||       (esd_can_pc104_200_DeviceArray[brdNdx].inUse == 0))    {        errnoSet(S_can_illegal_board_no);    }    else if(ctrlNdx >= 2)    {        errnoSet(S_can_illegal_ctrl_no);    }    else if(esd_can_pc104_200_DeviceArray[brdNdx].allocated[ctrlNdx] == 1)    {        errnoSet(S_can_busy);    }    else    {        esd_can_pc104_200_DeviceArray[brdNdx].allocated[ctrlNdx] = 1;        pRet = &esd_can_pc104_200_DeviceArray[brdNdx].canDevice[ctrlNdx];    }    return pRet;}/************************************************************************** esd_can_pc104_200_close - close the CAN device** RETURNS: N/A*   * ERRNO: N/A**/void esd_can_pc104_200_close(struct WNCAN_Device *pDev){    UINT   brdNdx;    UINT   ctrlNdx;        if(pDev != 0)    {        brdNdx = ((pDev->deviceId) & 0xFFFFFF00) >> 8;        ctrlNdx = (pDev->deviceId) & 0xFF;        esd_can_pc104_200_DeviceArray[brdNdx].allocated[ctrlNdx] = 0;    }    return;}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av电影免费在线播放| 91免费在线播放| 成人综合婷婷国产精品久久免费| 95精品视频在线| 欧美zozozo| 亚洲一线二线三线视频| 国产电影精品久久禁18| 欧美日本在线视频| 亚洲欧美日韩电影| 国产精品自拍一区| 日韩欧美电影在线| 夜夜亚洲天天久久| av电影在线观看不卡| 日韩精品一区国产麻豆| 一级做a爱片久久| av激情亚洲男人天堂| 久久综合成人精品亚洲另类欧美| 亚洲国产精品一区二区www| 99久久99精品久久久久久| 久久女同性恋中文字幕| 美腿丝袜亚洲一区| 欧美一区二区成人| 午夜精品免费在线| 欧美视频一区二| 亚洲激情综合网| 色综合久久综合| 亚洲欧美国产高清| 91片黄在线观看| 亚洲欧洲国产日本综合| eeuss国产一区二区三区| 国产三级三级三级精品8ⅰ区| 青青草97国产精品免费观看 | 99久久精品国产麻豆演员表| 久久综合精品国产一区二区三区| 视频一区二区三区中文字幕| 欧美老肥妇做.爰bbww| 亚洲色图欧美在线| 色综合视频在线观看| 一区二区三区日韩| 欧美视频一区二区在线观看| 亚洲综合一二区| 欧美日韩国产高清一区二区三区 | 亚洲色图清纯唯美| 91色.com| 亚洲大型综合色站| 在线播放中文字幕一区| 免费高清在线视频一区·| 555www色欧美视频| 免费一级欧美片在线观看| 日韩欧美一二三四区| 国产综合色在线| 欧美国产欧美亚州国产日韩mv天天看完整| 国产福利一区二区三区视频在线 | 蜜臀av亚洲一区中文字幕| 日韩精品最新网址| 懂色av一区二区三区蜜臀| 亚洲精品写真福利| 一本大道久久a久久精二百| 亚洲综合激情网| 日韩一区二区三免费高清| 精品一区二区免费在线观看| 久久久亚洲欧洲日产国码αv| 国产sm精品调教视频网站| 亚洲精品视频在线看| 777色狠狠一区二区三区| 国产乱妇无码大片在线观看| 亚洲视频一区在线| 91精品国产色综合久久不卡蜜臀| 国产美女精品人人做人人爽| 亚洲毛片av在线| 欧美videossexotv100| 北条麻妃一区二区三区| 天天射综合影视| 日本一区二区三区电影| 欧美精品久久一区| 成人丝袜视频网| 日韩精品久久理论片| 国产片一区二区| 欧美日韩国产精选| 懂色av一区二区三区免费观看 | 欧美极品美女视频| 欧美日韩卡一卡二| 波多野洁衣一区| 精品一区二区三区日韩| 亚洲美女免费视频| 久久久久久麻豆| 欧美日韩国产首页在线观看| 国产风韵犹存在线视精品| 偷拍一区二区三区四区| 国产精品人人做人人爽人人添| 91麻豆精品国产91久久久久久| 成人av在线观| 国内精品在线播放| 日韩和欧美的一区| 一区二区三区在线视频观看58| 久久久久国产精品免费免费搜索| 欧美日韩国产系列| 日本精品一级二级| 波波电影院一区二区三区| 精品一区二区三区在线视频| 亚洲国产aⅴ天堂久久| 亚洲色图.com| 国产精品入口麻豆原神| 久久久一区二区三区| 欧美一区二区黄| 3d动漫精品啪啪一区二区竹菊 | 日本美女一区二区| 亚洲福中文字幕伊人影院| 亚洲欧美日韩人成在线播放| 国产精品欧美久久久久无广告| 欧美大胆人体bbbb| 欧美一区二区三区白人| 欧美电影一区二区| 91麻豆精品国产91久久久久久 | 成人av网在线| 成人av资源下载| 成人高清av在线| 不卡的av网站| av资源网一区| 色www精品视频在线观看| 91美女片黄在线观看| 91麻豆精品秘密| 91官网在线观看| 欧美日韩视频在线观看一区二区三区 | 丝袜脚交一区二区| 爽爽淫人综合网网站| 亚洲国产视频在线| 日本成人在线电影网| 污片在线观看一区二区| 奇米888四色在线精品| 久久99精品一区二区三区三区| 麻豆视频一区二区| 国产.精品.日韩.另类.中文.在线.播放 | 欧美日韩精品一区二区天天拍小说| 色婷婷亚洲精品| 欧美日韩国产综合一区二区| 欧美日韩高清不卡| 久久亚洲捆绑美女| 中文字幕一区二区三区在线播放| 尤物av一区二区| 免费成人深夜小野草| 国产91精品免费| 欧美日韩精品一区二区在线播放| 欧美一级一区二区| 亚洲国产高清在线| 亚洲自拍都市欧美小说| 美腿丝袜在线亚洲一区| 国产高清不卡一区| 欧美日韩色综合| 国产人成亚洲第一网站在线播放| 国产精品乱码久久久久久| 亚洲综合网站在线观看| 另类小说欧美激情| 色综合久久综合网| 精品国产一区a| 亚洲视频在线观看三级| 蜜桃视频免费观看一区| 99久久免费视频.com| 3d动漫精品啪啪一区二区竹菊| 国产香蕉久久精品综合网| 亚洲一区二区四区蜜桃| 狠狠色综合日日| 欧美日韩综合一区| 中文字幕欧美激情一区| 日韩中文字幕91| www.在线欧美| 久久亚洲二区三区| 亚洲成av人影院| 99久久精品免费精品国产| 91精品蜜臀在线一区尤物| 综合激情成人伊人| 国产在线一区二区综合免费视频| 欧美亚一区二区| 日本一区二区成人| 精品写真视频在线观看| 在线一区二区视频| 国产精品国产三级国产普通话三级| 日日摸夜夜添夜夜添精品视频| 99re8在线精品视频免费播放| 欧美大片一区二区| 成人免费毛片片v| 欧美videos大乳护士334| 五月天丁香久久| 欧美主播一区二区三区美女| 国产日韩高清在线| 韩国一区二区视频| 日韩视频在线你懂得| 五月激情六月综合| 欧美亚洲综合一区| 亚洲欧美激情一区二区| 成人免费视频视频在线观看免费 | 国产精品自产自拍| 日韩西西人体444www| 午夜影院久久久| 精品视频一区二区三区免费| 一区二区三区四区激情| 色综合天天综合网国产成人综合天 | 国产欧美精品一区二区色综合| 韩国在线一区二区| 久久久精品蜜桃|