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

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

?? wdf_cypress_lib.c

?? 使用Jungo Windriver開發的USB driver 及其firmware,類型為mass storage,應用於FX2(Cypress CY68013A)上.
?? C
字號:
/******************************************************************************
*   File:     wdf_cypress_lib.c                                               *
*                                                                             *
*   Contents:  Implementation of firmware library functions for the           *
*              Cypress FX2 CY7C68013 and FX2LP CY7C68013A development boards  *
*                                                                             *
*   Code was generated by DriverWizard v8.02 - http://www.jungo.com           *
*   Copyright (c) 2008 Jungo Ltd.  http://www.jungo.com                       *
*******************************************************************************/

#include "wdf_cypress_lib.h"

#define READ TRUE
#define WRITE FALSE

static void DataToggleReset(int ep, EP_DIR dir)
{
    // TOGCTL.3..0 - Ep number (1, 2, 4, 6 or 8)
    // TOGCTL.4 - Ep direction
    // TOGCTL.5 - Clear bit
    TOGCTL = (ep | (dir << 4));
    TOGCTL = (ep | (dir << 4) | bmBIT5);
}

void WDF_EP1INConfig(EP_TYPE type)
{
    EP1INCFG = bmBIT7;  			// Enable EP1 In: EP1INCFG.7
    EP1INCFG |= (type << 4); 			// EP1IN type: 	  EP1INCFG.5..4
    DataToggleReset(0x1, DIR_IN);
}

void WDF_EP1OUTConfig(EP_TYPE type)
{
    EP1OUTCFG = bmBIT7;  			// Enable EP1 Out: EP1OUTCFG.7
    EP1OUTCFG |= (type << 4);   		// EP1OUT type:    EP1OUTCFG.5..4
    DataToggleReset(0x1, DIR_OUT);
}

void WDF_EP2Config(EP_DIR dir, EP_TYPE type, EP_BUFFERING buffering, int size,
    int nPacketPerMF)
{
    EP2CFG = bmBIT7; 				// Enable EP2: 	      	EP2CFG.7
    DELAY;
    EP2CFG |= (dir << 6); 			// EP2 direction: 	EP2CFG.6
    DELAY;
    EP2CFG |= (type << 4);			// EP2 type:      	EP2CFG.5..4
    DELAY;
    EP2CFG |= (size == 1024 ? bmBIT3 : 0); 	// EP2 size: 		EP2CFG.3
    DELAY;
    EP2CFG |= buffering; 			// EP2 buffering method:EP2CFG.1..0
    DELAY;

    if (type == ISOCHRONOUS && dir == DIR_IN)
    {
        EP2ISOINPKTS = bmBIT7; 	// Automatically send zero length packet when there is
                                 // no data in EP FIFO
        EP2ISOINPKTS |= nPacketPerMF;	// Packet Per Microframe: EP2ISOINPKTS.1..0
        DELAY;
    }
    DataToggleReset(0x2, dir);
}

void WDF_EP4Config(EP_DIR dir, EP_TYPE type)
{
    EP4CFG = bmBIT7; 				// Enable EP4: 	      	EP4CFG.7
    EP4CFG |= (dir << 6); 			// EP4 direction: 	EP4CFG.6
    EP4CFG |= (type << 4);			// EP4 type:      	EP4CFG.5..4

    if (type == ISOCHRONOUS && dir == DIR_IN)
    {
        EP4ISOINPKTS = bmBIT7; 	// Automatically send zero length packet when there is
                                 // no data in EP FIFO
        DELAY;
    }
    DataToggleReset(0x4, dir);
}

void WDF_EP6Config(EP_DIR dir, EP_TYPE type, EP_BUFFERING buffering, int size,
    int nPacketPerMF)
{
    EP6CFG = bmBIT7; 				// Enable EP6: 	      	EP6CFG.7
    DELAY;
    EP6CFG |= (dir << 6); 			// EP6 direction: 	EP6CFG.6
    DELAY;
    EP6CFG |= (type << 4);			// EP6 type:      	EP6CFG.5..4
    DELAY;
    EP6CFG |= (size == 1024 ? bmBIT3 : 0); 	// EP6 size: 		EP6CFG.3
    DELAY;
    EP6CFG |= buffering; 			// EP6 buffering method:EP6CFG.1..0
    DELAY;

    if (type == ISOCHRONOUS && dir == DIR_IN)
    {
        DELAY;
        EP6ISOINPKTS = bmBIT7; 		// Automatically send zero length packet when there is
                                         // no data in EP FIFO
        EP6ISOINPKTS |= nPacketPerMF;	// Packet Per Microframe: EP6ISOINPKTS.1..0
        DELAY;
    }
    DataToggleReset(0x6, dir);
}

void WDF_EP8Config(EP_DIR dir, EP_TYPE type)
{
    EP8CFG = bmBIT7; 				// Enable EP8: 	      	EP8CFG.7
    EP8CFG |= (dir << 6); 			// EP8 direction: 	EP8CFG.6
    EP8CFG |= (type << 4);			// EP8 type:      	EP8CFG.5..4

    if (type == ISOCHRONOUS && dir == DIR_IN)
    {
        EP8ISOINPKTS = bmBIT7; 	// Automatically send zero length packet when there is
                                 // no data in EP FIFO
        DELAY;
    }
    DataToggleReset(0x8, dir);
}

void WDF_FIFOReset (int ep)
{
    FIFORESET = 0x80;		// NAK all transfers from the host
    DELAY;
    FIFORESET = ep;		// Reset EP FIFO
    DELAY;
    FIFORESET = 0x00;		// Restore normal operation
    DELAY;
}

void WDF_SkipOutPacket(int ep)
{
    switch (ep)
    {
    case 0x1:
        DELAY;
        EP1OUTBC = 0x0;
        break;
    case 0x2:
        DELAY;
        EP2BCL = 0x80; 		// arm EP2OUT by writing byte count w/skip. 
        break;
    case 0x4:
        DELAY;
        EP4BCL = 0x80; 		// arm EP4OUT by writing byte count w/skip. 
        break;
    case 0x6:
        DELAY;
        EP6BCL = 0x80; 		// arm EP6OUT by writing byte count w/skip. 
        break;
    case 0x8:
        DELAY;
        EP8BCL = 0x80; 		// arm EP8OUT by writing byte count w/skip. 
        break;
    }
}

static void WDF_FIFOAccess(int ep, BYTE buf[], int size, BOOL fIsRead)
{
    int i;
    BYTE *epFifo;

    switch (ep)
    {
    case 0x1:
        epFifo = EP1OUTBUF;
        break;
    case 0x81:
        epFifo = EP1INBUF;
        break;
    case 0x2:
    case 0x82:
        epFifo = EP2FIFOBUF;
        break;
    case 0x4:
    case 0x84:
        epFifo = EP4FIFOBUF;
        break;
    case 0x6:
    case 0x86:
        epFifo = EP6FIFOBUF;
        break;
    case 0x8:
    case 0x88:
        epFifo = EP8FIFOBUF;
        break;
    }    

    APTR1H = MSB(buf);
    APTR1L = LSB(buf);

    AUTOPTRH2 = MSB(epFifo);
    AUTOPTRL2 = LSB(epFifo);

    for(i=0; i<size; i++)
    {
        if (fIsRead)
            EXTAUTODAT1 = EXTAUTODAT2;
        else
            EXTAUTODAT2 = EXTAUTODAT1;
    }
}

void WDF_FIFOWrite(int ep, BYTE buf[], int size)
{
    WDF_FIFOAccess(ep, buf, size, WRITE);
}

void WDF_FIFORead(int ep, BYTE buf[], int size)
{
    WDF_FIFOAccess(ep, buf, size, READ);
}

BOOL WDF_FIFOEmpty(int ep)
{
    BOOL ret;

    switch (ep)
    {
    case 0x1:
        ret = (EP1OUTCS & bmEPBUSY);
        break;
    case 0x81:
        ret = !(EP1INCS & bmEPBUSY);
        break;
    case 0x2:
    case 0x82:
        ret = (EP2468STAT & bmEP2EMPTY);
        break;
    case 0x4:
    case 0x84:
        ret = (EP2468STAT & bmEP4EMPTY);
        break;
    case 0x6:
    case 0x86:
        ret = (EP2468STAT & bmEP6EMPTY);
        break;
    case 0x8:
    case 0x88:
        ret = (EP2468STAT & bmEP8EMPTY);
        break;
    }
    return ret;
}

BOOL WDF_FIFOFull(int ep)
{
    BOOL ret;

    switch (ep)
    {
    case 0x1:
        ret = !(EP1OUTCS & bmEPBUSY);
        break;
    case 0x81:
        ret = (EP1INCS & bmEPBUSY);
        break;
    case 0x2:
    case 0x82:
        ret = (EP2468STAT & bmEP2FULL);
        break;
    case 0x4:
    case 0x84:
        ret = (EP2468STAT & bmEP4FULL);
        break;
    case 0x6:
    case 0x86:
        ret = (EP2468STAT & bmEP6FULL);
        break;
    case 0x8:
    case 0x88:
        ret = (EP2468STAT & bmEP8FULL);
        break;
    }
    return ret;
}

void WDF_SetEPByteCount(int ep, WORD bytes_count)
{
    BYTE *epBytesCntLow, *epBytesCntHigh;

    switch (ep)
    {
    case 0x1:
        epBytesCntHigh = 0;
        epBytesCntLow = &EP1OUTBC;
        break;
    case 0x81:
        epBytesCntHigh = 0;
        epBytesCntLow = &EP1INBC;
        break;
    case 0x2:
    case 0x82:
        epBytesCntHigh = &EP2BCH;
        epBytesCntLow = &EP2BCL;
        break;
    case 0x4:
    case 0x84:
        epBytesCntHigh = &EP4BCH;
        epBytesCntLow = &EP4BCL;
        break;
    case 0x6:
    case 0x86:
        epBytesCntHigh = &EP6BCH;
        epBytesCntLow = &EP6BCL;
        break;
    case 0x8: 
    case 0x88:
        epBytesCntHigh = &EP8BCH;
        epBytesCntLow = &EP8BCL;
        break;
    }

    if (epBytesCntHigh)
    {
        DELAY;
        *epBytesCntHigh = MSB(bytes_count);
    }
    DELAY;
    *epBytesCntLow = LSB(bytes_count);
    
}

WORD WDF_GetEPByteCount(int ep)
{
    WORD ret;

    switch (ep)
    {
    case 0x1:
        ret = EP1OUTBC;
        break;
    case 0x81:
        ret = EP1INBC;
        break;
    case 0x2:
    case 0x82:
        ret = (EP2BCH << 8) + EP2BCL;
        break;
    case 0x4:
    case 0x84:
        ret = (EP4BCH << 8) + EP4BCL;
        break;
    case 0x6:
    case 0x86:
        ret = (EP6BCH << 8) + EP6BCL;
        break;
    case 0x8:
    case 0x88:
        ret = (EP8BCH << 8) + EP8BCL;
        break;
    }

    return ret;
}

void WDF_I2CInit()
{
    EZUSB_InitI2C();
}

BOOL WDF_I2CWrite(BYTE addr, BYTE len, BYTE xdata *dat)
{
    return EZUSB_WriteI2C(addr, len, dat);
}

BOOL WDF_I2CRead(BYTE addr, BYTE len, BYTE xdata *dat)
{
    return EZUSB_ReadI2C(addr, len, dat);
}

void WDF_I2CWaitForEEPROMWrite(BYTE addr)
{
    EZUSB_WaitForEEPROMWrite(addr);
}

int WDF_I2CGetStatus()
{
    return I2CPckt.status;
}

void WDF_I2CClearStatus()
{
    if ((I2CPckt.status == I2C_BERROR) || (I2CPckt.status == I2C_NACK))
	I2CPckt.status = I2C_IDLE;
}

#define LED_ADDR		0x21
void WDF_SetDigitLed(int digit)
{
    BYTE xdata led_data;
    BYTE xdata digits[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 
	0xf8, 0x80, 0x98, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e };

    if (digit < 0x0 || digit > 0xE)
        led_data = 0x0; // Turn led off
    else
        led_data = digits[digit];

    WDF_I2CWrite(LED_ADDR, 0x01, &led_data);
    WDF_I2CWaitForEEPROMWrite(LED_ADDR);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品午夜久久福利影院 | 久久久国际精品| 精品视频一区 二区 三区| 99在线精品视频| 在线观看欧美日本| 一本色道**综合亚洲精品蜜桃冫| 成人av电影免费在线播放| 成人激情午夜影院| 91麻豆精东视频| 欧美精品在线一区二区| 欧美精品国产精品| 欧美成人免费网站| 日韩精品乱码免费| 亚洲一区在线观看免费| 一区二区三区免费网站| 亚洲444eee在线观看| 手机精品视频在线观看| 老色鬼精品视频在线观看播放| 免费国产亚洲视频| 精品一区二区免费| 91尤物视频在线观看| 欧美色精品天天在线观看视频| 欧美精品在线一区二区三区| 精品少妇一区二区三区在线播放 | 欧美日韩精品欧美日韩精品一| 欧美色精品天天在线观看视频| 欧美老女人第四色| 国产欧美日韩视频在线观看| 亚洲欧美成人一区二区三区| 日韩精品免费视频人成| 国产成人午夜片在线观看高清观看| youjizz国产精品| 欧美日韩精品一区二区天天拍小说 | 亚洲国产激情av| 亚洲高清一区二区三区| 国产精品一区二区免费不卡| 在线看日韩精品电影| 精品成人a区在线观看| 一区二区不卡在线播放 | 亚洲精品在线免费观看视频| 国产精品免费视频一区| 日韩福利视频导航| 亚洲综合久久久久| 欧美精品国产精品| 国产欧美精品区一区二区三区| 亚洲一区av在线| 国产福利精品导航| 欧美片网站yy| 亚洲欧美偷拍卡通变态| 国产一区二区福利视频| 在线亚洲一区观看| 国产精品乱码久久久久久| 秋霞午夜av一区二区三区| 一本久久综合亚洲鲁鲁五月天| 久久男人中文字幕资源站| 日韩国产精品久久久久久亚洲| 97精品久久久久中文字幕| 久久亚区不卡日本| 蜜臀av亚洲一区中文字幕| 欧美日韩综合一区| 一区二区三区欧美久久| 一本久久综合亚洲鲁鲁五月天 | 性久久久久久久久| 97精品电影院| 中文字幕在线视频一区| 国内精品第一页| 日韩精品中午字幕| 美女国产一区二区| 日韩免费视频一区二区| 人人精品人人爱| 91精品国产综合久久久久久漫画| 亚洲丰满少妇videoshd| 欧美亚洲日本国产| 亚洲午夜激情网页| 欧美久久久久久蜜桃| 午夜成人免费电影| 91 com成人网| 蜜臀久久久99精品久久久久久| 欧美久久久久中文字幕| 日韩av高清在线观看| 在线不卡欧美精品一区二区三区| 婷婷成人激情在线网| 91精品综合久久久久久| 免费成人av资源网| 日韩精品一区二区三区四区| 狠狠狠色丁香婷婷综合久久五月| 久久青草国产手机看片福利盒子 | 国产精品国产三级国产普通话蜜臀 | 欧美色视频在线| 天天爽夜夜爽夜夜爽精品视频| 欧美日韩免费视频| 麻豆免费看一区二区三区| 日韩精品一区二区三区视频播放| 美女精品自拍一二三四| 欧美国产成人精品| 色综合视频一区二区三区高清| 一区二区在线观看视频在线观看| 欧美日韩高清一区| 国内精品久久久久影院色| 国产精品视频看| 欧美色大人视频| 黄色资源网久久资源365| 中文字幕成人网| 欧美日韩国产片| 国产精品系列在线播放| 亚洲美女少妇撒尿| 精品日韩成人av| 95精品视频在线| 青青草97国产精品免费观看| 国产午夜精品美女毛片视频| 91色.com| 国产一区二区三区四区五区入口 | 欧美亚洲禁片免费| 国内外精品视频| 亚洲最新在线观看| 久久久午夜电影| 欧美色窝79yyyycom| 国产尤物一区二区| 亚洲二区视频在线| 日本一区二区三区国色天香| 欧美精品亚洲一区二区在线播放| 国产成人免费视频网站| 亚洲国产精品精华液网站| 国产女主播一区| 欧美一级日韩不卡播放免费| 一本大道久久a久久精二百| 精品在线播放免费| 丝袜a∨在线一区二区三区不卡| 欧美激情一区二区三区在线| 日韩亚洲欧美在线观看| 色网站国产精品| 丰满少妇久久久久久久| 日韩精品电影一区亚洲| 一区二区三区精品久久久| 国产精品欧美经典| 久久久国产一区二区三区四区小说 | 中文无字幕一区二区三区| 欧美一区二区在线免费观看| 日本乱人伦一区| 99视频国产精品| 国产成人免费在线观看| 国产乱码精品一区二区三区av | 国产精品卡一卡二卡三| 国产亚洲视频系列| 精品国产亚洲在线| 日韩欧美精品在线视频| 欧美一级欧美一级在线播放| 欧美日韩三级在线| 欧美日韩国产一级| 在线不卡欧美精品一区二区三区| 欧美亚洲日本国产| 欧美伊人久久久久久久久影院 | 亚洲另类一区二区| 国产精品免费免费| 国产精品美女久久久久高潮| 欧美国产国产综合| 国产精品家庭影院| 成人免费在线观看入口| 国产精品激情偷乱一区二区∴| 国产精品久久久99| 亚洲最大成人网4388xx| 亚洲高清视频中文字幕| 日韩成人免费电影| 麻豆中文一区二区| 成人妖精视频yjsp地址| 99精品欧美一区二区蜜桃免费| 91免费看片在线观看| 欧美色爱综合网| 日韩免费成人网| 中文字幕第一页久久| 一区二区三区欧美日韩| 日本视频免费一区| 国产一区免费电影| 99久久综合狠狠综合久久| 在线日韩av片| 日韩午夜激情视频| 欧美韩国一区二区| 日韩毛片高清在线播放| 图片区小说区区亚洲影院| 精品一区二区三区在线播放视频| 国产传媒一区在线| 欧美专区在线观看一区| 欧美成人综合网站| 国产精品国产馆在线真实露脸 | 国产精品久久久久久久久快鸭 | 波多野结衣91| 欧美日韩一区二区电影| 亚洲精品在线电影| 一区二区三区 在线观看视频| 玖玖九九国产精品| av在线综合网| 欧美一级一区二区| 最新久久zyz资源站| 日韩经典一区二区| 99久久免费精品| 久久蜜桃av一区二区天堂| 夜夜嗨av一区二区三区| 国产1区2区3区精品美女| 88在线观看91蜜桃国自产| 成人免费在线观看入口|