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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ppc5xxcan.c

?? CAN例程 源碼 CAN例程 源碼
?? C
字號(hào):
/* ppc5xxCAN.c - implementation of Board Interface for PPC5XX *//* Copyright 2001 Wind River Systems, Inc. *//* modification history --------------------14jan02,lsg written*//* DESCRIPTIONThis file contains the functions that provide a board-level interfaceto the PPC5xx.*//* 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>#if (CPU==PPC555)#include <CAN/toucan.h>#include <CAN/PRIVATE/ppc5xxCAN.h>static const char ppc5xxCAN_deviceName[] ="PPC5xx CAN Controller";#define VECTOR_TABLE_OFFSET_FROM_LEVEL(n) (2*n + 1)UINT max_ppc5xx_can_devices;struct ppc5xxCAN_DeviceEntry *ppc5xxCAN_DeviceArray;/*external references*/ extern UINT32 vxImemBaseGet(void);extern STATUS CAN_DEVICE_establishLinks(WNCAN_DEVICE *pDev,            WNCAN_BoardType brdType,WNCAN_ControllerType ctrlType);extern void TouCANISR(ULONG context);/************************************************************************** ppc5xxCAN_new - install driver for ppc board*** RETURNS: OK or ERROR*   * ERRNO: N/A**/STATUS ppc5xxCAN_new(XtalFreq xf, UINT ppc5xxIlevel, UINT ppc5xxRxmode, UINT ppc5xxTxmode, UINT devnum){        int           oldLevel;    STATUS        retCode;      struct  WNCAN_Device *pDev;    struct  ppc5xxCAN_DeviceEntry *pDeviceEntry;    struct canAccess *pcanAccess;    UINT32 tblOffset = 0;    volatile USHORT irl = 0;    volatile USHORT ilbs = 0;                retCode = ERROR;      /* pessimistic */    pDeviceEntry = 0;    /* find a free device data structure */    if(ppc5xxCAN_DeviceArray[devnum].inUse == 0)    {               ppc5xxCAN_DeviceArray[devnum].inUse = 1;        pDeviceEntry = &ppc5xxCAN_DeviceArray[devnum];                if(!pDeviceEntry)                       {            errnoSet(S_can_out_of_memory);            goto exit;        }    }/*if device in use ends*/        /* setup data structures */    pDev = &pDeviceEntry->canDevice;    pDev->pCtrl = &pDeviceEntry->canController;    pDev->pBrd  =  &pDeviceEntry->canBoard;                    /*Initialise parameters in the WNCAN_Board struct*/        /*Oscillator frequency is fixed for a particular board */    pDev->pBrd->xtalFreq = xf;        /*Initialise all other non applicable parameters to 0 value*/    pDev->pBrd->irq = 0;    pDev->pBrd->ioAddress = 0;    pDev->pBrd->bar0 = 0;    pDev->pBrd->bar1 = 0;    pDev->pBrd->bar2 = 0;        /*    * The rest of the members of the WNCAN_Board struct,    * namely the function pointers will be assigned values    * by calling CAN_Device_establishLinks shortly    */        /*    * Initialise parameters in the WNCAN_CanController struct    * for each CAN controller contained in the board    */      pDev->pCtrl->ctrlID = (UCHAR)devnum;    pDev->pCtrl->pDev = pDev;       pDev->pCtrl->chnType = &g_TOUCANchnType[0];         pDev->pCtrl->numChn = TOUCAN_MAX_MSG_OBJ;               pDev->pCtrl->chnMode = &pDeviceEntry->TouCANchnMode[0];     pDev->pCtrl->csData = &pDeviceEntry->canRegAccess;    /*    * Get pointer to TouCAN registers.            */    pcanAccess = (struct canAccess *)pDev->pCtrl->csData;        pcanAccess->pTouCanRegs = (TouCAN)(TOUCAN_CHANNEL_A_BASE + (pDev->pCtrl->ctrlID * TOUCAN_REGS_OFFSET));    pcanAccess->pTouCanBufs = (TouCANBuf)(TOUCAN_BUFFERS_A_BASE + (pDev->pCtrl->ctrlID * TOUCAN_REGS_OFFSET));          pcanAccess->TouCANAutoPowersSave = 0;    pcanAccess->TouCANSupv = 0;     pcanAccess->TouCANLBuf = TOUCAN_LBUF_LOWEST_ID_FIRST;       pcanAccess->TouCANTimerSync = TOUCAN_TSYNC_ENABLE;         /*Initialise hardware related controller parameters*/    /************************************************************************/       /* Compute ILBS and IRL values from user chosen ILEVEL */       /*     * TouCAN_ILEVEL can have  a value between 0 and 31, as there are 32 possible     * interrupt levels. The value of IRL is the least significant three bits     * and ILBS is the first two most significant bits     * TouCAN_ILEVEL -> 4 3  2 1 0     *                  ilbs  irl     */           irl = ((USHORT)ppc5xxIlevel) & 0x7;    ilbs = ((USHORT)ppc5xxIlevel & 0x0018) >> 3;    pcanAccess->pTouCanRegs->can_ICR = (USHORT)((irl << 8) | (ilbs << 6));        /*Set RxMode and TxMode*/       pcanAccess->pTouCanRegs->can_CR0 = (ppc5xxRxmode << 2) | ppc5xxTxmode;                /*Set default baud rate to 250 Kbp/s*/    /*Assuming a sys clock frequency of 40 MHz*/    /*    * These value will be directly written into the control regsiters. The values have been     * decremented by 1    * 1 bittime = 1 + (PROPSEG + 1) + (TSEG1 + 1) + (TSEG2 + 1) time quanta    */    pcanAccess->ToucanPropseg = 7;        pDev->pCtrl->brp = 7;    pDev->pCtrl->sjw = 0;    pDev->pCtrl->tseg1 = 7;    pDev->pCtrl->tseg2 = 2;         pDev->pCtrl->samples = 0;             if(CAN_DEVICE_establishLinks(pDev, WNCAN_PPC5XX, WNCAN_TOUCAN) == ERROR)    {        pDev = 0;                    goto exit;    }        /*Assign the device name and id*/    pDev->deviceName = ppc5xxCAN_deviceName;        /*brdnum is 0*/    pDev->deviceId = devnum;           /* connect to isr */    oldLevel = intLock();    tblOffset = VECTOR_TABLE_OFFSET_FROM_LEVEL(ppc5xxIlevel);    intConnect((void *)tblOffset,TouCANISR,(ULONG)pDev);        intUnlock(oldLevel);        retCode = OK;exit:    return retCode;}/************************************************************************** ppc5xxCAN_establishLinks - set up function pointers*** RETURNS: OK always*   * ERRNO: N/A**/STATUS ppc5xxCAN_establishLinks(struct WNCAN_Device *pDev){        pDev->pBrd->onEnterISR = 0;    pDev->pBrd->onLeaveISR = 0;    pDev->pBrd->enableIrq  = 0;    pDev->pBrd->disableIrq = 0;    pDev->pBrd->canInByte = 0;    pDev->pBrd->canOutByte = 0;        return OK;}/************************************************************************** ppc5xxCAN_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 *ppc5xxCAN_open(UINT deviceNdx){    struct WNCAN_Device *pRet = 0;   /* pessimistic */        if((deviceNdx >= max_ppc5xx_can_devices) ||       (ppc5xxCAN_DeviceArray[deviceNdx].inUse == 0))    {        errnoSet(S_can_illegal_board_no);    }    else if(ppc5xxCAN_DeviceArray[deviceNdx].allocated == 1)    {        errnoSet(S_can_busy);    }    else    {        ppc5xxCAN_DeviceArray[deviceNdx].allocated = 1;        pRet = &ppc5xxCAN_DeviceArray[deviceNdx].canDevice;    }    return pRet;}/************************************************************************** ppc5xxCAN_close - close a CAN device** RETURNS: OK or ERROR*   * ERRNO: S_can_illegal_board_no*        S_can_illegal_ctrl_no**/STATUS ppc5xxCAN_close(    struct WNCAN_Device *pDev){    STATUS retVal   = ERROR;   /* pessimistic */    UINT   deviceNdx;                   if(pDev != 0)    {                deviceNdx = (pDev->deviceId) & 0xFF;        if((deviceNdx >= max_ppc5xx_can_devices) ||           (ppc5xxCAN_DeviceArray[deviceNdx].inUse == 0))        {            errnoSet(S_can_illegal_ctrl_no);        }        else        {            ppc5xxCAN_DeviceArray[deviceNdx].allocated = 0;            retVal = OK;        }    }    return retVal;}#endif /* CPU == PPC555 */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美久久一二三四区| caoporen国产精品视频| 亚洲永久精品国产| 亚洲私人黄色宅男| 国产精品传媒入口麻豆| 久久久久久久久久看片| 精品国产1区2区3区| 亚洲精品一线二线三线无人区| 欧美日韩国产影片| 欧美一区二区三区四区久久| 欧美久久久久久久久| 在线播放/欧美激情| 精品国偷自产国产一区| 日本一区二区三级电影在线观看| 国产日韩欧美精品综合| 国产精品国产三级国产a| 亚洲色大成网站www久久九九| 亚洲手机成人高清视频| 亚洲影院免费观看| 天天色图综合网| 国内精品伊人久久久久av影院| 久久不见久久见免费视频7| 国产一区高清在线| 色综合久久中文字幕综合网| 欧美日韩精品一二三区| 欧美mv和日韩mv的网站| 国产精品欧美综合在线| 亚洲第一av色| 国产精品538一区二区在线| 91亚洲男人天堂| 91精品国产欧美日韩| 国产三级精品在线| 亚洲午夜久久久久久久久久久| 久久国产精品免费| 91免费国产在线| 日韩精品在线一区二区| 日韩一区欧美一区| 日av在线不卡| 日本高清无吗v一区| 欧美电影免费观看高清完整版在线观看| 国产欧美日韩综合精品一区二区| 亚洲一区二区三区四区五区黄| 国产一区二区三区免费| 欧美日韩一区二区在线观看| 国产欧美日韩在线看| 午夜av电影一区| av在线播放不卡| 欧美精品一区二区三区四区| 一区二区视频在线| 国产成人午夜高潮毛片| 这里只有精品电影| 夜色激情一区二区| 成人福利电影精品一区二区在线观看| 欧美喷水一区二区| 亚洲免费资源在线播放| 大白屁股一区二区视频| 精品国产伦一区二区三区观看方式 | 欧美亚洲一区二区在线| 久久老女人爱爱| 五月婷婷综合在线| 欧美在线观看视频在线| 中文字幕色av一区二区三区| 国产麻豆成人精品| 精品久久人人做人人爰| 免费观看在线综合| 7799精品视频| 五月婷婷久久丁香| 欧美日韩免费一区二区三区| 亚洲欧洲美洲综合色网| 成人99免费视频| 国产欧美日产一区| 国产乱码字幕精品高清av| 日韩亚洲欧美在线| 日韩综合小视频| 欧美一区三区四区| 老司机精品视频导航| 精品欧美黑人一区二区三区| 免费高清在线一区| 精品久久久三级丝袜| 黄色小说综合网站| 日本一区二区免费在线| 国产suv精品一区二区三区| 欧美国产禁国产网站cc| 大尺度一区二区| 亚洲精品视频在线| 色成年激情久久综合| 亚洲v精品v日韩v欧美v专区| 欧美一区二区三区在线看| 麻豆久久久久久| 中文字幕精品—区二区四季| 99精品久久免费看蜜臀剧情介绍| 亚洲美女在线国产| 欧美高清性hdvideosex| 精品一区二区影视| 亚洲欧洲美洲综合色网| 欧美综合欧美视频| 久久精品国产在热久久| 国产午夜精品一区二区三区视频 | 欧美另类久久久品| 麻豆国产精品视频| 国产欧美在线观看一区| 91麻豆国产香蕉久久精品| 亚洲成人av福利| 337p日本欧洲亚洲大胆色噜噜| 成人午夜精品在线| 婷婷国产v国产偷v亚洲高清| 国产三级一区二区| 欧美三级日韩在线| 激情综合网激情| 亚洲一区自拍偷拍| 久久免费精品国产久精品久久久久 | 亚洲成人av电影| 精品国产乱码久久久久久久久| 97久久超碰精品国产| 美女网站在线免费欧美精品| 自拍视频在线观看一区二区| 日韩三级在线观看| 91视频在线观看| 极品美女销魂一区二区三区| 一级做a爱片久久| 久久久久久亚洲综合| 欧美人伦禁忌dvd放荡欲情| 成人免费毛片高清视频| 青青草国产精品97视觉盛宴 | 色婷婷av一区二区三区gif| 蜜臀91精品一区二区三区 | 在线播放中文字幕一区| 岛国精品一区二区| 精品一区二区三区久久久| 亚洲国产wwwccc36天堂| 国产精品福利电影一区二区三区四区| 日韩天堂在线观看| 欧美日韩国产综合一区二区| 91亚洲国产成人精品一区二区三| 韩国v欧美v日本v亚洲v| 日本vs亚洲vs韩国一区三区二区| 亚洲色图视频网| 国产精品色在线观看| 欧美一区二区黄色| 欧美精品粉嫩高潮一区二区| 色婷婷精品久久二区二区蜜臂av| 国产+成+人+亚洲欧洲自线| 国产乱码一区二区三区| 韩国视频一区二区| 麻豆视频观看网址久久| 蜜臀久久99精品久久久久宅男| 亚洲综合久久久| 一区二区三区四区高清精品免费观看| 国产精品人人做人人爽人人添 | 丁香啪啪综合成人亚洲小说| 国产中文字幕精品| 国产在线一区二区| 黄页网站大全一区二区| 国产揄拍国内精品对白| 国产精品一线二线三线| 国产成人精品一区二区三区四区| 国产高清在线精品| 成人亚洲精品久久久久软件| 99精品黄色片免费大全| 色综合久久久久| 欧美性大战久久久久久久蜜臀| 在线观看亚洲精品视频| 欧美视频在线播放| 日韩一区和二区| 久久综合色播五月| 国产三级三级三级精品8ⅰ区| 国产偷国产偷精品高清尤物| 欧美激情在线一区二区三区| 日韩一区日韩二区| 亚洲成av人片一区二区| 日韩vs国产vs欧美| 国产一区二区三区免费看| 成人精品电影在线观看| 色香蕉成人二区免费| 91精品久久久久久久久99蜜臂| 精品国产成人系列| 亚洲欧洲精品成人久久奇米网| 亚洲日本韩国一区| 日韩福利视频导航| 国产精品一区专区| 色视频一区二区| 欧美mv日韩mv| 亚洲欧洲精品天堂一级| 日韩不卡一区二区三区 | 综合中文字幕亚洲| 日韩国产欧美一区二区三区| 国产综合色产在线精品| 欧美日韩国产经典色站一区二区三区| 欧美在线观看18| 精品国产一区二区在线观看| 日韩美女啊v在线免费观看| 日韩**一区毛片| 久久久综合网站| 亚洲第一av色| 国产精品一区专区| 欧美高清视频不卡网| 成人免费在线视频观看| 日本美女一区二区三区视频| av亚洲产国偷v产偷v自拍| 欧美刺激午夜性久久久久久久|