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

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

?? esd_pc104_200.c

?? CAN例程 源碼 CAN例程 源碼
?? 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一区二区三区免费野_久草精品视频
欧美三级在线看| 亚洲色图欧洲色图婷婷| 91浏览器打开| 国产不卡在线视频| 国产在线视频不卡二| 亚洲va欧美va天堂v国产综合| 亚洲日本电影在线| 免费高清在线视频一区·| 日本欧美一区二区在线观看| 日韩精品一二三| 五月天中文字幕一区二区| 三级久久三级久久久| 99视频精品在线| 91浏览器入口在线观看| 久久久久久免费| 综合久久综合久久| 国产精品一区在线| 色综合久久中文综合久久牛| 日本高清成人免费播放| 欧美视频日韩视频| 日韩免费观看高清完整版| 精品国产麻豆免费人成网站| xvideos.蜜桃一区二区| 亚洲欧美在线高清| 亚洲成av人综合在线观看| 97se狠狠狠综合亚洲狠狠| 欧美日韩高清不卡| 久久综合色婷婷| 喷水一区二区三区| 91精品国产麻豆国产自产在线 | 2020日本不卡一区二区视频| 亚洲精品成人悠悠色影视| 亚洲激情av在线| 97精品国产露脸对白| 国产日产精品一区| 亚洲国产aⅴ天堂久久| 久草在线在线精品观看| www.欧美精品一二区| 国产偷国产偷精品高清尤物| 亚洲美女偷拍久久| 激情综合色播激情啊| 欧美mv和日韩mv的网站| 亚洲男人的天堂在线观看| 97久久精品人人爽人人爽蜜臀| 国产精品久久久久影院亚瑟| 免费高清视频精品| 欧美成人video| 麻豆精品一区二区| 欧美中文一区二区三区| 久久精品欧美日韩精品| 成人伦理片在线| 91精品国产综合久久精品图片 | 秋霞国产午夜精品免费视频| 欧美一区二区三区在线观看视频| 日韩国产精品大片| 久久亚洲免费视频| 99视频在线精品| 视频一区在线播放| 精品日韩一区二区| av亚洲精华国产精华精华| 一区二区三区中文字幕在线观看| 国产成人精品影视| 欧美成人乱码一区二区三区| 国产成人在线看| 亚洲精品亚洲人成人网| 欧美精品色综合| 亚洲午夜精品17c| 日韩三级在线观看| 日本三级亚洲精品| 欧美国产亚洲另类动漫| 国产一区二区精品久久99| 91精品国产入口在线| 国产成人av网站| 一区二区三区免费| 精品处破学生在线二十三| 99在线精品一区二区三区| 日韩成人午夜电影| 国产精品大尺度| 日韩一区二区精品葵司在线| 成人一区在线看| 日韩精品1区2区3区| 国产精品―色哟哟| 不卡av电影在线播放| 中文字幕欧美日韩一区| 69精品人人人人| 91在线免费看| 国产美女在线观看一区| 亚洲成人午夜电影| 中文字幕一区免费在线观看| 日韩欧美国产三级| 欧美性猛交xxxxxx富婆| 东方欧美亚洲色图在线| 美国三级日本三级久久99| 亚洲狠狠丁香婷婷综合久久久| 久久久久久久性| 欧美一卡在线观看| 欧美亚洲一区三区| 波多野结衣中文一区| 精品一区二区三区久久久| 亚洲国产成人高清精品| 成人免费一区二区三区在线观看| 精品精品国产高清a毛片牛牛| 欧美视频在线一区| 色婷婷精品久久二区二区蜜臀av| 国产成人在线看| 国产精品一区一区三区| 久久99久久久久久久久久久| 国产欧美日韩亚州综合| 欧美不卡视频一区| 日韩一区二区三区三四区视频在线观看 | 久久青草欧美一区二区三区| 日韩午夜av一区| 8v天堂国产在线一区二区| 欧美网站一区二区| 在线免费观看日本欧美| 91麻豆国产精品久久| 91论坛在线播放| 日本乱人伦一区| 91美女在线视频| 欧美中文字幕久久| 欧美视频在线观看一区二区| 欧美影院精品一区| 欧美日韩精品欧美日韩精品| 欧美日韩成人综合在线一区二区| 欧美男同性恋视频网站| 91精品国产欧美一区二区| 欧美一区二区三区免费| 日韩精品一区二区在线观看| 欧美成人精品福利| 国产三级精品在线| 国产精品成人免费| 一个色综合网站| 日日夜夜精品视频免费| 男女男精品网站| 国产麻豆精品视频| 成人爽a毛片一区二区免费| 91在线云播放| 欧美精三区欧美精三区| 精品美女一区二区| 国产精品久久久久国产精品日日| 国产精品丝袜在线| 亚洲国产精品人人做人人爽| 美女视频黄频大全不卡视频在线播放| 免费看日韩a级影片| 国产福利91精品一区二区三区| 成人激情电影免费在线观看| 在线观看三级视频欧美| 日韩午夜激情免费电影| 中文字幕成人网| 亚洲动漫第一页| 韩国精品在线观看| 91丨porny丨户外露出| 91麻豆精品国产91久久久久久| 久久先锋影音av鲁色资源网| 亚洲精品欧美专区| 麻豆国产精品一区二区三区| www.久久精品| 欧美一级片在线观看| 国产精品免费看片| 日日噜噜夜夜狠狠视频欧美人| 国产剧情一区二区| 欧美性受xxxx黑人xyx| 久久久久久久久久久黄色| 一区二区三区四区视频精品免费| 另类欧美日韩国产在线| 99久久精品免费看国产| 欧美va亚洲va香蕉在线| 亚洲精品一二三四区| 国产成人亚洲综合a∨婷婷图片| 欧美性色综合网| 中文字幕欧美一| 九九国产精品视频| 欧美日韩在线播放三区四区| 国产视频一区二区三区在线观看| 亚洲国产人成综合网站| proumb性欧美在线观看| 欧美电视剧在线观看完整版| 亚洲一区在线观看免费观看电影高清| 亚洲精品一卡二卡| 国产成人鲁色资源国产91色综| 欧美理论在线播放| 亚洲欧美国产毛片在线| 国产酒店精品激情| 日韩一区二区三区观看| 亚洲综合偷拍欧美一区色| 国产91在线看| 26uuu精品一区二区三区四区在线| 亚洲国产视频一区| 日本高清不卡在线观看| 亚洲特级片在线| 成人午夜视频在线观看| 久久伊人蜜桃av一区二区| 另类成人小视频在线| 在线不卡一区二区| 亚洲福利电影网| 欧美日本国产视频| 午夜久久久影院| 欧美日韩国产a| 日韩精品国产欧美| 在线不卡一区二区|