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

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

?? esd_pci_200.c

?? 將CAN現場總線移植到UCOS2中的驅動程序
?? C
字號:
/* esd_pci_200.c - implementation of Board Interface for ESD CAN PCI/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 PCI/200 card.*//* includes */#include <vxWorks.h>#include <errnoLib.h>#include <intLib.h>#include <iv.h>#include <sysLib.h>#include "CAN/wnCAN.h"#include "CAN/canController.h"#include "CAN/canBoard.h"#include "CAN/i82527.h"#include "CAN/sja1000.h"#include "CAN/private/esd_pci_200.h"/* external reference */extern STATUS sys_ESD_PCI_200_Init(UINT brdNum);UINT ESD_PCI_200_MaxBrdNumGet(void);struct ESD_PCI_200_DeviceEntry* ESD_PCI_200_DeviceEntryGet(UINT brdNum);void sys_ESD_PCI_200_canOutByte(struct WNCAN_Device *pDev, unsigned int reg,                                UCHAR value);UCHAR sys_ESD_PCI_200_canInByte(struct WNCAN_Device *pDev, unsigned int reg);void sys_ESD_PCI_200_IntConnect(UINT brdNum);/*****************************************************************************		 * ESD_PCI_200_EnableIRQ - The ESD specific function for enabling interrupts * on the PCI bus by the PLX 9052 bridge. *                *	RETURNS:		N/A * * ERRNO: N/A */void ESD_PCI_200_EnableIRQ(    struct WNCAN_Device *pDev){    UINT32 offset = pDev->pBrd->bar0;    ULONG  memBase = pDev->pBrd->ioAddress;    UCHAR data;    UCHAR *addr;    addr = (UCHAR*)memBase + offset + 0x4c;    data = *(addr);    data |=  0x41;    *(addr) = data;    #ifdef DEBUG        data = *(addr);    #endif    return;}/*****************************************************************************		 * ESD_PCI_200_DisableIRQ - The ESD specific function for disabling interrupts * on the PCI bus by the PLX 9052 bridge. *                *	RETURNS:		N/A * * ERRNO: N/A */void ESD_PCI_200_DisableIRQ(    struct WNCAN_Device *pDev){    UINT32 offset = pDev->pBrd->bar0;    ULONG  memBase = pDev->pBrd->ioAddress;    UCHAR  data;    data = *((UCHAR*)memBase + offset + 0x4c);    data &= ~0x41;    *((UCHAR*)memBase + offset + 0x4c) = data;    return;}/************************************************************************** ESD_PCI_200_IntConnect - connect board-level interrupts** This routine connects and enables the board level interrupt of the * specified ESD PCI/200 CAN card.** RETURNS: N/A*   * ERRNO: N/A**/    void ESD_PCI_200_IntConnect(    UINT brdNum){    sys_ESD_PCI_200_IntConnect(brdNum);    return;}/************************************************************************** ESD_PCI_200_IntConnectAll - connect all board-level interrupts** This routine connects and enables the board level interrupts of all * installed ESD PCI/200 CAN cards.** RETURNS: N/A*   * ERRNO: N/A**/    void ESD_PCI_200_IntConnectAll(    void){    int brdNum = ESD_PCI_200_MaxBrdNumGet();    int i;    struct ESD_PCI_200_DeviceEntry *pDE;    for (i = 0; i < brdNum; i++)    {       if ((pDE = ESD_PCI_200_DeviceEntryGet(i)) == NULL)           continue;       else       {          if (pDE->intConnect == FALSE)            sys_ESD_PCI_200_IntConnect(i);       }    }    return;}/************************************************************************** esd_can_pci_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_pci_200_open(    UINT brdNdx,     UINT ctrlNdx){    struct WNCAN_Device *pRet = 0;   /* pessimistic */    UINT maxBrdNum;    struct ESD_PCI_200_DeviceEntry *pDE;    maxBrdNum = ESD_PCI_200_MaxBrdNumGet();        pDE = ESD_PCI_200_DeviceEntryGet(brdNdx);       if((brdNdx >= maxBrdNum) || (pDE->inUse == FALSE))    {        errnoSet(S_can_illegal_board_no);    }    else if(ctrlNdx >= 2)    {        errnoSet(S_can_illegal_ctrl_no);    }    else if(pDE->allocated[ctrlNdx] == 1)    {        errnoSet(S_can_busy);    }    else    {        pDE->allocated[ctrlNdx] = 1;        pRet = &(pDE->canDevice[ctrlNdx]);    }    return pRet;}/************************************************************************** esd_can_pci_200_close - close a CAN device** RETURNS: N/A*   * ERRNO: N/A**/void esd_can_pci_200_close(    struct WNCAN_Device *pDev){    UINT   brdNdx;    UINT   ctrlNdx;    struct ESD_PCI_200_DeviceEntry *pDE;        if(pDev != 0)    {        brdNdx = ((pDev->deviceId) & 0xFFFFFF00) >> 8;        ctrlNdx = (pDev->deviceId) & 0xFF;        pDE = ESD_PCI_200_DeviceEntryGet(brdNdx);        pDE->allocated[ctrlNdx] = 0;    }    return;}/************************************************************************** ESD_PCI_200_Init - install driver for the ESD PCI/200 board** This routine initializes the ESD PCI/200 by calling the BSP dependent* routine sys_ESD_PCI_200_Init().** RETURNS: OK or ERROR*   * ERRNO: N/A**/STATUS ESD_PCI_200_Init(    UINT brdNum){    STATUS status;    status = sys_ESD_PCI_200_Init(brdNum);    return(status);}/************************************************************************** ESD_PCI_200_InitAll - init all installed ESD PCI/200 boards.** RETURNS: N/A*   * ERRNO: N/A**/void ESD_PCI_200_InitAll(void){    UINT i,          maxBrds;    /* get the maximum number of ESD PCI/200 boards */    maxBrds = ESD_PCI_200_MaxBrdNumGet();    for(i = 0; i < maxBrds; i++)    {        ESD_PCI_200_Init(i);    }    return;}/******************************************************************* *  ESD_PCI_200_canOutByte - The ESD specific function for CAN writes  *  on the PCI/200 board. * * RETURNS: NONE * * ERRNO: N/A */void ESD_PCI_200_canOutByte(    struct WNCAN_Device *pDev,    unsigned int reg,    UCHAR value){    sys_ESD_PCI_200_canOutByte(pDev,reg,value);    return;}/******************************************************************* *  ESD_PCI_200_canInByte - The ESD specific function for CAN reads  *  on the PCI/200 board. * * RETURNS: UCHAR - The register contents * * ERRNO: N/A */UCHAR ESD_PCI_200_canInByte(    struct WNCAN_Device *pDev,    unsigned int reg){    UCHAR value;    value = sys_ESD_PCI_200_canInByte(pDev,reg);    return(value);}/************************************************************************** esd_can_pci_200_establishLinks - set up function pointers*** RETURNS: OK or ERROR*   * ERRNO: S_can_illegal_config**/STATUS esd_can_pci_200_establishLinks(struct WNCAN_Device *pDev){    STATUS retCode = OK;    if(pDev->pCtrl->ctrlType == WNCAN_SJA1000)    {        pDev->pBrd->onEnterISR = 0;        pDev->pBrd->onLeaveISR = 0;        pDev->pBrd->enableIrq  = ESD_PCI_200_EnableIRQ;        pDev->pBrd->disableIrq = ESD_PCI_200_DisableIRQ;        pDev->pBrd->canInByte = ESD_PCI_200_canInByte;        pDev->pBrd->canOutByte = ESD_PCI_200_canOutByte;    }    else    {        errnoSet(S_can_illegal_config);        retCode = ERROR;    }    return retCode;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区啦啦啦在线观看| 欧美精品一二三四| 色国产综合视频| 日韩一区二区精品| 亚洲天堂久久久久久久| 韩国精品在线观看| 91超碰这里只有精品国产| 国产精品久久久久久久久快鸭| 亚洲午夜免费视频| 99久久久免费精品国产一区二区| 日韩一区二区影院| 亚洲国产成人精品视频| 丰满放荡岳乱妇91ww| 日韩一区二区在线播放| 亚洲电影一级黄| 色婷婷av一区二区三区软件| 国产亚洲午夜高清国产拍精品| 天天影视涩香欲综合网| 日本黄色一区二区| 中文字幕五月欧美| 高清不卡一区二区| 久久综合资源网| 免费精品99久久国产综合精品| 欧美在线你懂得| 一区二区三区资源| 成人av电影在线网| 国产精品女主播av| 高清av一区二区| 中文一区二区在线观看| 国产伦精品一区二区三区免费| 日韩视频免费观看高清完整版在线观看 | 亚洲婷婷在线视频| a在线播放不卡| 国产精品福利一区二区三区| 国产91在线观看丝袜| 欧美激情一区二区三区四区| 国产成人免费视频网站| 国产日韩欧美综合一区| 国产999精品久久久久久| 久久精品视频一区二区三区| 国产精品77777| 国产欧美精品国产国产专区| 国产成人免费网站| 国产视频一区在线播放| 成人激情图片网| 亚洲女人的天堂| 欧美性xxxxxx少妇| 日精品一区二区三区| 日韩欧美在线123| 精品亚洲porn| 日本一二三不卡| yourporn久久国产精品| 亚洲 欧美综合在线网络| 日本电影亚洲天堂一区| 天堂va蜜桃一区二区三区| 日韩欧美激情一区| 国产精品1区2区| 亚洲欧美福利一区二区| 欧美日本在线看| 黄一区二区三区| 18欧美乱大交hd1984| 欧美体内she精高潮| 久久不见久久见中文字幕免费| 国产日韩v精品一区二区| 91年精品国产| 日韩激情一二三区| 中文在线资源观看网站视频免费不卡| 色吧成人激情小说| 奇米影视一区二区三区| 国产精品三级av| 欧美日韩久久久| 粉嫩13p一区二区三区| 亚洲电影视频在线| 国产欧美日韩视频在线观看| 欧美色图在线观看| 成人做爰69片免费看网站| 视频一区在线播放| 国产精品久久久久毛片软件| 91精品国产一区二区三区香蕉| 成人午夜视频福利| 久久国产尿小便嘘嘘| 日韩毛片精品高清免费| 欧美va天堂va视频va在线| 色悠悠久久综合| 国产精品综合一区二区三区| 水野朝阳av一区二区三区| 亚洲同性gay激情无套| 久久这里只有精品6| 欧美精品久久久久久久多人混战| www.欧美色图| 国产成人日日夜夜| 久久av资源网| 日韩电影在线看| 亚洲男女一区二区三区| 久久精品一区二区三区四区| 欧美另类变人与禽xxxxx| 色综合av在线| 91色乱码一区二区三区| 国产黑丝在线一区二区三区| 精品综合免费视频观看| 五月综合激情网| 亚洲欧美激情在线| 日韩美女视频一区| 中文字幕二三区不卡| 欧美精品一区二区三区四区 | 精品少妇一区二区三区视频免付费| 色综合久久综合| 99久久精品国产麻豆演员表| 国产精品亚洲成人| 激情久久五月天| 国产制服丝袜一区| 国内外成人在线| 国产在线看一区| 国产米奇在线777精品观看| 国产一区二区三区免费观看| 久久99国内精品| 久久av老司机精品网站导航| 裸体健美xxxx欧美裸体表演| 免费成人结看片| 麻豆91小视频| 国产成人精品免费网站| 国产mv日韩mv欧美| 99这里只有久久精品视频| 北条麻妃国产九九精品视频| 色哟哟国产精品免费观看| 在线视频综合导航| 欧美群妇大交群中文字幕| 在线播放欧美女士性生活| 欧美一卡2卡三卡4卡5免费| 日韩免费电影网站| 久久影院午夜片一区| 国产视频视频一区| 亚洲日穴在线视频| 亚洲成av人综合在线观看| 久久av中文字幕片| 不卡电影一区二区三区| 91福利视频久久久久| 欧美剧在线免费观看网站| 精品少妇一区二区三区在线视频| 国产欧美日韩不卡免费| 亚洲欧美另类图片小说| 日欧美一区二区| 国产激情精品久久久第一区二区| 91蜜桃在线观看| 欧美一区二区三区免费视频 | 日韩一区二区三区电影| 国产午夜精品久久久久久免费视| ...xxx性欧美| 肉色丝袜一区二区| 国产福利91精品| 色婷婷精品大在线视频| 日韩欧美你懂的| 亚洲精选在线视频| 免播放器亚洲一区| 91视视频在线观看入口直接观看www | 韩国精品久久久| 欧洲av在线精品| 久久精品一二三| 亚洲国产一区二区三区青草影视 | 99久久99久久综合| 在线综合亚洲欧美在线视频| 欧美高清在线视频| 午夜精品久久久久影视| 福利一区二区在线观看| 正在播放亚洲一区| 亚洲欧美一区二区三区孕妇| 美女网站一区二区| 欧洲一区二区av| 国产欧美一区二区精品性色超碰| 亚洲在线一区二区三区| 国产69精品一区二区亚洲孕妇 | 三级精品在线观看| www.av亚洲| 久久日一线二线三线suv| 香蕉久久夜色精品国产使用方法| 成人av在线网站| 欧美成人一区二区三区| 性久久久久久久久久久久| 成人av集中营| 国产欧美精品日韩区二区麻豆天美| 日韩在线观看一区二区| 在线免费观看视频一区| 亚洲欧洲精品天堂一级| 国产91精品在线观看| 久久综合一区二区| 久久99精品久久只有精品| 7777精品伊人久久久大香线蕉超级流畅| 中文字幕亚洲一区二区av在线| 国产精品综合二区| 精品久久久久一区| 蜜桃视频在线观看一区二区| 欧美日韩激情一区| 亚洲成av人在线观看| 欧美三级电影精品| 亚洲自拍偷拍av| 欧美性高清videossexo| 亚洲高清在线精品| 欧美日韩久久一区二区| 天天射综合影视| 欧美精品丝袜中出|