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

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

?? esd_pc104_200.c

?? cpc-1631的BSP包for VxWorks操作系統(tǒng)
?? C
字號(hào):
/* esd_can_pc104_200.c - implementation of Board Interface for ESD CAN PC104/200 */

/* Copyright 2001 Wind River Systems, Inc. */

/* 
modification history 
--------------------
01b,03sep04,lag set default baud rate to 125 Kbps
01a,27nov01,dnb written

*/

/* 

  DESCRIPTION
  This file contains the functions that provide a board-level interface
  to 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;

    sja1000ISR((ULONG)&pDE->canDevice[0]);

}

/************************************************************************
*
* 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 < 1/*ESD_CAN_PC104_200_MAX_CONTROLLERS */; 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 =12000000/* _16MHZ*/; /*12M*/

	/* set default baud rate to 125 Kbits/sec */
	pDev[i]->pCtrl->brp = 0x42/*3*/;       
	pDev[i]->pCtrl->sjw = 0;  
	pDev[i]->pCtrl->tseg1 = 0xc;
	pDev[i]->pCtrl->tseg2 = 0x1;
	pDev[i]->pCtrl->samples = 0;

	pDev[i]->pCtrl->chnType = g_sja1000chnType;
	pDev[i]->pCtrl->numChn  = SJA1000_MAX_MSG_OBJ;
	pDev[i]->pCtrl->chnMode = &pDeviceEntry->sja1000chnMode[0];
	pDev[i]->pCtrl->csData  = &pDeviceEntry->txMsg;

    }
	
    if(CAN_DEVICE_establishLinks(pDev[0], 
        WNCAN_ESD_PC104_200, WNCAN_SJA1000) == ERROR)
    {
        pDev[0] = 0;
        goto exit;
    }
    
    pDev[0]->deviceId = (brdNdx << 8);            
    
     intConnect(irq,esd_can_pc104_200_isr,(ULONG)pDeviceEntry);
    sysIntEnablePIC(irq);

    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: 
*
*/
UCHAR esd_can_pc104_canInByteForSJA1000
(
 struct WNCAN_Device *pDev,
 unsigned int offset
 )
{	
	*(volatile UINT8 *)(pDev->pBrd->ioAddress) = offset;
	
	return *(volatile UINT8 *)(pDev->pBrd->ioAddress+0x100000);
}

/************************************************************************
*
* esd_can_pc104_canOutByteForSJA1000
*
*
* RETURNS: 
*   
* ERRNO: 
*
*/
void esd_can_pc104_canOutByteForSJA1000
(
 struct WNCAN_Device *pDev,
 unsigned int offset,
 UCHAR value
 )
{
	*(volatile UINT8 *)(pDev->pBrd->ioAddress) = offset;
	
	*(volatile UINT8 *)(pDev->pBrd->ioAddress+0x100000) = value;

}

void sja1000_out(int offset,UINT8 value)
{
	*(volatile UINT8 *)(0xffa00000) = offset;
	
	*(volatile UINT8 *)(0xffb00000) = value;

}
UINT8 sja1000_in(int offset)
{
	*(volatile UINT8 *)(0xffa00000) = offset;
	
	return *(volatile UINT8 *)(0xffb00000);
}

/************************************************************************
*
* 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;
    }
 */   
     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 >= 1/*ESD_CAN_PC104_200_MAX_CONTROLLERS*/)
    {
        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

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线观看视频在线| 欧美日韩一卡二卡| 亚洲午夜三级在线| 久久先锋资源网| 欧美在线观看一二区| 国产成人精品免费一区二区| 亚洲sss视频在线视频| 国产精品乱码人人做人人爱| 欧美一区二区精品| 色婷婷av一区二区三区gif| 欧美亚洲动漫精品| 国产精品一区二区男女羞羞无遮挡| 一区二区三区美女视频| 国产精品入口麻豆原神| 精品免费国产二区三区| 制服丝袜激情欧洲亚洲| 91电影在线观看| 99久久婷婷国产综合精品| 精品一区二区三区久久久| 亚洲国产日韩一级| 亚洲三级视频在线观看| 国产女主播一区| 欧美精品一区二区三区蜜臀| 欧美一区二区福利在线| 欧美日韩色一区| 日本韩国欧美国产| 成人美女视频在线观看18| 国产麻豆欧美日韩一区| 黑人巨大精品欧美黑白配亚洲| 日韩不卡手机在线v区| 性做久久久久久免费观看| 亚洲一区自拍偷拍| 一区二区三区四区高清精品免费观看| 国产精品久久久久久久久久久免费看 | 欧美日韩精品一二三区| 色域天天综合网| 一本色道a无线码一区v| av亚洲产国偷v产偷v自拍| 国产精品18久久久久久久久 | 亚洲欧美日韩国产成人精品影院| 国产精品免费av| 国产精品高潮呻吟| 国产精品电影一区二区三区| 国产精品久久久久9999吃药| 国产精品国产a| 一区二区三区在线视频播放| 亚洲国产美女搞黄色| 天堂影院一区二区| 九九国产精品视频| 国产一区二区三区日韩| 成人午夜电影久久影院| 波多野结衣在线aⅴ中文字幕不卡| 成人免费高清在线观看| 91免费视频网址| 欧美日韩精品系列| 精品国产91亚洲一区二区三区婷婷| 26uuu另类欧美| 中文文精品字幕一区二区| 亚洲色图第一区| 亚洲va欧美va天堂v国产综合| 欧美亚洲免费在线一区| 色av综合在线| 91精品国产综合久久精品app| 日韩一本二本av| 久久久精品tv| 亚洲激情图片qvod| 美女任你摸久久 | 成人中文字幕合集| 色播五月激情综合网| 欧美蜜桃一区二区三区| 久久女同精品一区二区| 亚洲欧洲av色图| 天天av天天翘天天综合网色鬼国产 | 欧美哺乳videos| 中文字幕不卡一区| 亚洲精品一二三区| 久久国产精品99久久人人澡| 成人久久18免费网站麻豆| 在线观看av不卡| 精品99一区二区| 日韩美女啊v在线免费观看| 视频一区国产视频| 成人av资源网站| 欧美一区二区三区精品| 久久综合久久99| 亚洲一区自拍偷拍| 国产美女视频91| 欧美色网一区二区| 国产女人水真多18毛片18精品视频| 亚洲视频在线一区观看| 麻豆成人91精品二区三区| av不卡在线播放| 久久―日本道色综合久久| 亚洲影视在线观看| 成人午夜在线播放| 日韩三级在线免费观看| 亚洲免费高清视频在线| 日本亚洲电影天堂| 日本精品视频一区二区三区| 精品国产亚洲一区二区三区在线观看| 一区二区三区日韩欧美| 福利一区二区在线| 国产精品精品国产色婷婷| 日韩国产精品91| 91浏览器在线视频| 国产三级三级三级精品8ⅰ区| 日韩精品久久久久久| 99国产精品久久久久久久久久久| 日韩手机在线导航| 亚洲va欧美va天堂v国产综合| jlzzjlzz欧美大全| 国产亚洲精品福利| 麻豆国产精品官网| 欧美一区二区三区视频在线| 亚洲自拍欧美精品| 色综合天天综合狠狠| 欧美国产成人在线| 国产精品系列在线观看| 日韩亚洲欧美在线| 日韩一区精品字幕| 欧美日韩视频不卡| 亚洲v日本v欧美v久久精品| 99国产精品视频免费观看| 国产精品欧美一级免费| 国产一区二区三区在线观看精品| 精品免费一区二区三区| 欧美aⅴ一区二区三区视频| 欧美精品丝袜久久久中文字幕| 亚洲精品美国一| 在线观看日韩精品| 一区二区三区日韩精品| 色婷婷国产精品久久包臀| 亚洲欧美欧美一区二区三区| 成人黄色a**站在线观看| 国产精品麻豆网站| 99国产欧美久久久精品| a级精品国产片在线观看| 亚洲国产精品传媒在线观看| 国产精品99久久不卡二区| 国产亚洲精品bt天堂精选| 国产精品中文有码| 国产精品日日摸夜夜摸av| 99视频精品免费视频| 亚洲视频一二区| 欧美性视频一区二区三区| 亚洲观看高清完整版在线观看| 欧美猛男超大videosgay| 婷婷久久综合九色综合绿巨人| 7777精品伊人久久久大香线蕉经典版下载| 亚洲成精国产精品女| 91精品国产色综合久久不卡蜜臀 | 美女免费视频一区| 久久综合色鬼综合色| 成人国产精品免费网站| 亚洲欧美激情一区二区| 欧美三级日本三级少妇99| 日韩电影一区二区三区四区| 精品久久五月天| 成人午夜激情影院| 一区二区免费视频| 欧美精品亚洲二区| 国产精品一区免费在线观看| 亚洲视频免费在线观看| 欧美日韩一区二区三区免费看| 欧美96一区二区免费视频| 亚洲国产高清不卡| 欧美性大战久久久| 久久国产剧场电影| 国产精品国产三级国产三级人妇 | 日韩电影一区二区三区| 久久精品一区四区| 91黄视频在线| 久久99国产精品久久99果冻传媒| 国产精品久久久久久亚洲毛片 | 久久久www免费人成精品| 成av人片一区二区| 日韩电影在线观看网站| 中文字幕不卡三区| 欧美日韩二区三区| 国产福利不卡视频| 香蕉成人啪国产精品视频综合网| 一区二区在线观看免费视频播放 | 欧洲av在线精品| 精品伊人久久久久7777人| 亚洲欧美日韩系列| 日韩精品一区二区三区视频 | 色综合天天做天天爱| 久久精品国产77777蜜臀| 亚洲丝袜精品丝袜在线| 日韩精品一区二区三区三区免费 | 2欧美一区二区三区在线观看视频| av在线不卡网| 精品一区二区三区免费观看| 亚洲理论在线观看| 久久久精品国产免大香伊| 欧美精品黑人性xxxx| 99re8在线精品视频免费播放| 麻豆精品蜜桃视频网站| 亚洲一区二区三区美女| 国产欧美日韩不卡|