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

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

?? usbd_udphs.c

?? AT91SAM9263的USB Device端口驅動
?? C
?? 第 1 頁 / 共 5 頁
字號:
//------------------------------------------------------------------------------
void USBD_SetAddress( unsigned char address )
{
    volatile unsigned int i;

    trace_LOG(trace_DEBUG, "SetAddr(%d) ", address);

    if( USBD_IsHighSpeed() ) {
        // Timeout after 6 HUBs
        AT91C_BASE_UDPHS->UDPHS_EPT[0].UDPHS_EPTSETSTA = AT91C_UDPHS_TX_PK_RDY;
        i=0;
        while( (0 != (AT91C_BASE_UDPHS->UDPHS_EPT[0].UDPHS_EPTSTA & AT91C_UDPHS_TX_PK_RDY ))
            && (i< BOARD_MCK/10000) ) {  
            i++; // around 5 ms
        }
    }

    // Set address
    AT91C_BASE_UDPHS->UDPHS_CTRL &= ~AT91C_UDPHS_DEV_ADDR; // RAZ Address
    AT91C_BASE_UDPHS->UDPHS_CTRL |= address | AT91C_UDPHS_FADDR_EN;

    // If the address is 0, the device returns to the Default state
    if (address == 0) {
        deviceState = USBD_STATE_DEFAULT;
    }
    // If the address is non-zero, the device enters the Address state
    else {
        deviceState = USBD_STATE_ADDRESS;
    }
}

//------------------------------------------------------------------------------
// Changes the device state from Address to Configured, or from
//         Configured to Address.
//         This method directly access the last received SETUP packet to
//         decide on what to do.
//------------------------------------------------------------------------------
void USBD_SetConfiguration( unsigned char cfgnum )
{
    trace_LOG(trace_DEBUG, "SetCfg(%d) ", cfgnum);

    // Check the request
    if( cfgnum != 0 ) {

        // Enter Configured state
        deviceState = USBD_STATE_CONFIGURED;
    }
    // If the configuration number is zero, the device goes back to the Address
    // state
    else  {

        // Go back to Address state
        deviceState = USBD_STATE_ADDRESS;

        // Abort all transfers
        UDPHS_DisableEndpoints();
    }
}

//------------------------------------------------------------------------------
// Enables the pull-up on the D+ line to connect the device to the USB.
//------------------------------------------------------------------------------
void USBD_Connect( void )
{
    trace_LOG(trace_DEBUG, "Conn ");
#if defined(BOARD_USB_PULLUP_INTERNAL)
    AT91C_BASE_UDPHS->UDPHS_CTRL &= ~AT91C_UDPHS_DETACH;   // Pull Up on DP
    AT91C_BASE_UDPHS->UDPHS_CTRL |= AT91C_UDPHS_PULLD_DIS; // Disable Pull Down

#elif defined(BOARD_USB_PULLUP_INTERNAL_BY_MATRIX)
    trace_LOG(trace_DEBUG, "PUON 1\n\r");
    AT91C_BASE_MATRIX->MATRIX_USBPCR |= AT91C_MATRIX_USBPCR_PUON;

#elif defined(BOARD_USB_PULLUP_EXTERNAL)

#ifdef PIN_USB_PULLUP
    const Pin pinPullUp = PIN_USB_PULLUP;
    if( pinPullUp.attribute == PIO_OUTPUT_0 ) {

        PIO_Set(&pinPullUp);
    }
    else {

        PIO_Clear(&pinPullUp);
    }
#else
    #error unsupported now
#endif

#elif !defined(BOARD_USB_PULLUP_ALWAYSON)
    #error Unsupported pull-up type.

#endif
}

//------------------------------------------------------------------------------
// Disables the pull-up on the D+ line to disconnect the device from the bus.
//------------------------------------------------------------------------------
void USBD_Disconnect( void )
{
    trace_LOG(trace_DEBUG, "Disc ");

#if defined(BOARD_USB_PULLUP_INTERNAL)
    AT91C_BASE_UDPHS->UDPHS_CTRL |= AT91C_UDPHS_DETACH; // detach
    AT91C_BASE_UDPHS->UDPHS_CTRL &= ~AT91C_UDPHS_PULLD_DIS; // Enable Pull Down

#elif defined(BOARD_USB_PULLUP_INTERNAL_BY_MATRIX)
    AT91C_BASE_MATRIX->MATRIX_USBPCR &= ~AT91C_MATRIX_USBPCR_PUON;

#elif defined(BOARD_USB_PULLUP_EXTERNAL)

#ifdef PIN_USB_PULLUP
    const Pin pinPullUp = PIN_USB_PULLUP;
    if (pinPullUp.attribute == PIO_OUTPUT_0) {

        PIO_Clear(&pinPullUp);
    }
    else {

        PIO_Set(&pinPullUp);
    }
#else
    #error unsupported now
#endif

#elif !defined(BOARD_USB_PULLUP_ALWAYSON)
    #error Unsupported pull-up type.

#endif

    // Device returns to the Powered state
    if (deviceState > USBD_STATE_POWERED) {    

        deviceState = USBD_STATE_POWERED;
    }
}

//------------------------------------------------------------------------------
// Certification test for High Speed device.
// bIndex char for the test choice
//------------------------------------------------------------------------------
void USBD_Test( unsigned char bIndex )
{
    char          *pFifo;
    unsigned char i;

    AT91C_BASE_UDPHS->UDPHS_IEN &= ~AT91C_UDPHS_DET_SUSPD; // remove suspend for TEST
    AT91C_BASE_UDPHS->UDPHS_TST |= AT91C_UDPHS_SPEED_CFG_HS; // force High Speed (remove suspend)

    switch( bIndex ) {

        case USBFeatureRequest_TESTPACKET:
            trace_LOG(trace_DEBUG, "TEST_PACKET ");

            AT91C_BASE_UDPHS->UDPHS_DMA[1].UDPHS_DMACONTROL = 0;
            AT91C_BASE_UDPHS->UDPHS_DMA[2].UDPHS_DMACONTROL = 0;

            // Configure endpoint 2, 64 bytes, direction IN, type BULK, 1 bank
            AT91C_BASE_UDPHS->UDPHS_EPT[2].UDPHS_EPTCFG = AT91C_UDPHS_EPT_SIZE_64 | AT91C_UDPHS_EPT_DIR_IN | AT91C_UDPHS_EPT_TYPE_BUL_EPT | AT91C_UDPHS_BK_NUMBER_1;
            while( (signed int)(AT91C_BASE_UDPHS->UDPHS_EPT[2].UDPHS_EPTCFG & AT91C_UDPHS_EPT_MAPD) != (signed int)AT91C_UDPHS_EPT_MAPD ) {}

            AT91C_BASE_UDPHS->UDPHS_EPT[2].UDPHS_EPTCTLENB =  AT91C_UDPHS_EPT_ENABL;

            // Write FIFO
            pFifo = (char*)((unsigned int *)(AT91C_BASE_UDPHS_EPTFIFO->UDPHS_READEPT0) + (16384 * 2));
            //pFifo = (char*)&(AT91C_BASE_UDPHS_EPTFIFO->UDPHS_READEPT0[bEndpoint*16384]);
            for( i=0; i<sizeof(test_packet_buffer); i++) {
                pFifo[i] = test_packet_buffer[i];
            }
            // Tst PACKET
            AT91C_BASE_UDPHS->UDPHS_TST |= AT91C_UDPHS_TST_PKT;
            // Send packet
            AT91C_BASE_UDPHS->UDPHS_EPT[2].UDPHS_EPTSETSTA = AT91C_UDPHS_TX_PK_RDY;
            break;

        case USBFeatureRequest_TESTJ:
            trace_LOG(trace_DEBUG, "TEST_J ");
            AT91C_BASE_UDPHS->UDPHS_TST = AT91C_UDPHS_TST_J;
            break;

        case USBFeatureRequest_TESTK:
            trace_LOG(trace_DEBUG, "TEST_K ");
            AT91C_BASE_UDPHS->UDPHS_TST = AT91C_UDPHS_TST_K;
            break;

        case USBFeatureRequest_TESTSE0NAK:
            trace_LOG(trace_DEBUG, "TEST_SEO_NAK ");
            AT91C_BASE_UDPHS->UDPHS_IEN = 0;  // for test
            break;

        case USBFeatureRequest_TESTSENDZLP:
            //while( 0 != (AT91C_BASE_UDPHS->UDPHS_EPT[0].UDPHS_EPTSTA & AT91C_UDPHS_TX_PK_RDY ) ) {}
            AT91C_BASE_UDPHS->UDPHS_EPT[0].UDPHS_EPTSETSTA = AT91C_UDPHS_TX_PK_RDY;
            //while( 0 != (AT91C_BASE_UDPHS->UDPHS_EPT[0].UDPHS_EPTSTA & AT91C_UDPHS_TX_PK_RDY ) ) {}
            trace_LOG(trace_DEBUG, "SEND_ZLP ");
            break;
    }
    trace_LOG(trace_DEBUG, "\n\r");
}


//------------------------------------------------------------------------------
// Initializes the specified USB driver
//         This function initializes the current FIFO bank of endpoints,
//         configures the pull-up and VBus lines, disconnects the pull-up and
//         then trigger the Init callback.
//------------------------------------------------------------------------------
void USBD_Init( void )
{
    unsigned char i;

    trace_LOG(trace_DEBUG, "USBD Init()\n\r");

    // Reset endpoint structures
    UDPHS_ResetEndpoints();

    // Enables the USB Clock
    UDPHS_EnableUsbClock();

    // Configure the pull-up on D+ and disconnect it
#if defined(BOARD_USB_PULLUP_INTERNAL)
    AT91C_BASE_UDPHS->UDPHS_CTRL |= AT91C_UDPHS_DETACH; // detach
    AT91C_BASE_UDPHS->UDPHS_CTRL |= AT91C_UDPHS_PULLD_DIS; // Disable Pull Down

#elif defined(BOARD_USB_PULLUP_INTERNAL_BY_MATRIX)
    trace_LOG(trace_DEBUG, "PUON 0\n\r");
    AT91C_BASE_MATRIX->MATRIX_USBPCR &= ~AT91C_MATRIX_USBPCR_PUON;

#elif defined(BOARD_USB_PULLUP_EXTERNAL)
#ifdef PIN_USB_PULLUP
    const Pin pinPullUp = PIN_USB_PULLUP;
    PIO_Configure(&pinPullUp, 1);
    if (pinPullUp.attribute == PIO_OUTPUT_0) {

        PIO_Clear(&pinPullUp);
    }
    else {

        PIO_Set(&pinPullUp);
    }
#else
    #error unsupported now
#endif
#elif !defined(BOARD_USB_PULLUP_ALWAYSON)
    #error Unsupported pull-up type.

#endif

    // Reset and enable IP UDPHS
    AT91C_BASE_UDPHS->UDPHS_CTRL &= ~AT91C_UDPHS_EN_UDPHS;
    AT91C_BASE_UDPHS->UDPHS_CTRL |= AT91C_UDPHS_EN_UDPHS;
    // Enable and disable of the transceiver is automaticaly done by the IP.

    // With OR without DMA !!!
    // Initialization of DMA
    for( i=1; i<=((AT91C_BASE_UDPHS->UDPHS_IPFEATURES & AT91C_UDPHS_DMA_CHANNEL_NBR)>>4); i++ ) {

        // RESET endpoint canal DMA:
        // DMA stop channel command
        AT91C_BASE_UDPHS->UDPHS_DMA[i].UDPHS_DMACONTROL = 0;  // STOP command

        // Disable endpoint
        AT91C_BASE_UDPHS->UDPHS_EPT[i].UDPHS_EPTCTLDIS = AT91C_UDPHS_SHRT_PCKT
                                                       | AT91C_UDPHS_BUSY_BANK
                                                       | AT91C_UDPHS_NAK_OUT
                                                       | AT91C_UDPHS_NAK_IN
                                                       | AT91C_UDPHS_STALL_SNT
                                                       | AT91C_UDPHS_RX_SETUP
                                                       | AT91C_UDPHS_TX_PK_RDY
                                                       | AT91C_UDPHS_TX_COMPLT
                                                       | AT91C_UDPHS_RX_BK_RDY
                                                       | AT91C_UDPHS_ERR_OVFLW
                                                       | AT91C_UDPHS_MDATA_RX
                                                       | AT91C_UDPHS_DATAX_RX
                                                       | AT91C_UDPHS_NYET_DIS
                                                       | AT91C_UDPHS_INTDIS_DMA
                                                       | AT91C_UDPHS_AUTO_VALID
                                                       | AT91C_UDPHS_EPT_DISABL;

        // Reset endpoint config
        AT91C_BASE_UDPHS->UDPHS_EPT[i].UDPHS_EPTCTLENB = 0;

        // Reset DMA channel (Buff count and Control field)
        AT91C_BASE_UDPHS->UDPHS_DMA[i].UDPHS_DMACONTROL = AT91C_UDPHS_LDNXT_DSC;  // NON STOP command

        // Reset DMA channel 0 (STOP)
        AT91C_BASE_UDPHS->UDPHS_DMA[i].UDPHS_DMACONTROL = 0;  // STOP command

        // Clear DMA channel status (read the register for clear it)
        AT91C_BASE_UDPHS->UDPHS_DMA[i].UDPHS_DMASTATUS = AT91C_BASE_UDPHS->UDPHS_DMA[i].UDPHS_DMASTATUS;

    }

    AT91C_BASE_UDPHS->UDPHS_TST = 0;
    AT91C_BASE_UDPHS->UDPHS_IEN = 0;
    AT91C_BASE_UDPHS->UDPHS_CLRINT = AT91C_UDPHS_UPSTR_RES
                                   | AT91C_UDPHS_ENDOFRSM
                                   | AT91C_UDPHS_WAKE_UP
                                   | AT91C_UDPHS_ENDRESET
                                   | AT91C_UDPHS_IEN_SOF
                                   | AT91C_UDPHS_MICRO_SOF
                                   | AT91C_UDPHS_DET_SUSPD;
    
    // Detach
    //USBD_Disconnect();
//jcb to be tested

    // Device is in the Attached state
    deviceState = USBD_STATE_SUSPENDED;
    previousDeviceState = USBD_STATE_POWERED;

    // Disable interrupts
    AT91C_BASE_UDPHS->UDPHS_IEN = AT91C_UDPHS_ENDOFRSM
                                | AT91C_UDPHS_WAKE_UP
                                | AT91C_UDPHS_DET_SUSPD;

    // Disable USB clocks
    UDPHS_DisableUsbClock();
//jcb to be tested

    // Configure interrupts
    USBDCallbacks_Initialized();
}

//------------------------------------------------------------------------------
//    Function: USBD_GetState
//        Returns the current state of the USB device.
//    Returns:
//        Device current state.
//------------------------------------------------------------------------------
unsigned char USBD_GetState( void )
{
    return deviceState;
}

#endif // BOARD_USB_UDPHS

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区三区高清不卡 | 久久午夜电影网| 精品嫩草影院久久| 一区二区三区美女| 狠狠色丁香婷综合久久| 欧洲色大大久久| 国产日韩欧美高清| 久久精品久久综合| 欧美日韩精品福利| 亚洲精品中文字幕在线观看| 国产精品一二三在| 日韩视频在线观看一区二区| 99免费精品视频| 精品综合久久久久久8888| 国产综合色产在线精品| 风间由美中文字幕在线看视频国产欧美| 国内精品久久久久影院薰衣草 | 精品av久久707| 国产日韩视频一区二区三区| 中文字幕精品一区| 亚洲激情男女视频| 日本特黄久久久高潮| 精品一区二区三区不卡 | 亚洲卡通动漫在线| 久久久久国产精品免费免费搜索| 亚洲精品视频一区| 99国产精品国产精品毛片| 日本一区二区三区国色天香 | 亚洲成人黄色小说| 在线观看区一区二| 亚洲国产精品麻豆| 欧美日韩国产一级二级| 亚洲图片一区二区| 日韩一区二区三免费高清| 亚洲午夜日本在线观看| 粉嫩欧美一区二区三区高清影视| 91精品国产综合久久香蕉麻豆| 日韩在线卡一卡二| 日韩一区二区在线观看| 免费成人美女在线观看| 日韩欧美亚洲一区二区| 久久国产生活片100| 久久久久久久电影| 成人av综合一区| 亚洲欧美日韩国产一区二区三区| eeuss鲁片一区二区三区在线观看| 国产精品嫩草久久久久| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲天堂a在线| 色哟哟日韩精品| 五月天中文字幕一区二区| 日韩欧美国产三级电影视频| 国产精品自拍网站| 国产精品久久久久久亚洲毛片| 99re亚洲国产精品| 午夜精品影院在线观看| 欧美tickling网站挠脚心| 懂色av一区二区三区免费看| 亚洲猫色日本管| 日韩限制级电影在线观看| 国产精品主播直播| 国产精品人成在线观看免费 | 风流少妇一区二区| 亚洲午夜国产一区99re久久| 欧美成人乱码一区二区三区| 99精品欧美一区| 日本不卡在线视频| 国产精品福利一区| 91精品国产欧美一区二区18 | 免费观看在线色综合| 国产日韩成人精品| 欧美日韩国产在线播放网站| 国产成人亚洲综合色影视| 亚洲男帅同性gay1069| 欧美巨大另类极品videosbest | 国产91综合网| 亚洲国产一区二区三区 | 亚洲欧美一区二区三区国产精品| 欧美久久久影院| 成人性视频免费网站| 日韩av一区二区三区四区| 国产精品久久久久桃色tv| 欧美狂野另类xxxxoooo| voyeur盗摄精品| 久久精品av麻豆的观看方式| 亚洲精品日日夜夜| 亚洲国产精品二十页| 欧美一级精品在线| 在线观看一区二区视频| 国产成人免费在线观看| 日韩综合一区二区| 夜夜精品浪潮av一区二区三区| 久久免费电影网| 91精品国产91久久综合桃花 | 亚洲曰韩产成在线| 国产精品另类一区| 久久久精品天堂| 日韩免费观看2025年上映的电影| 色88888久久久久久影院按摩| 国产河南妇女毛片精品久久久| 青青草原综合久久大伊人精品优势 | 国产精品美女久久久久久久久| 欧美一区二区三区在线| 欧美午夜片在线看| 色综合天天综合给合国产| 成人精品在线视频观看| 国产精品一卡二卡| 国产一区二区伦理片| 国产一区二区伦理| 国产精品夜夜嗨| 国产精品一二三四| 国产麻豆精品95视频| a在线欧美一区| 丰满亚洲少妇av| 不卡视频在线看| 成人app软件下载大全免费| 国产馆精品极品| 成人午夜精品一区二区三区| 成人晚上爱看视频| av一区二区三区在线| 91色|porny| 欧美日韩专区在线| 69堂国产成人免费视频| 91精品国产综合久久久久久久久久| 欧美日韩一区二区在线观看视频 | 2021久久国产精品不只是精品 | 欧美精品在线一区二区| 欧美精品一级二级三级| 日韩亚洲国产中文字幕欧美| 精品国产污污免费网站入口 | 国产精一品亚洲二区在线视频| 国产主播一区二区| 成人性生交大片| 在线观看一区二区视频| 欧美日韩国产成人在线91| 欧美猛男男办公室激情| 精品少妇一区二区三区免费观看 | 日韩精品一区二区三区在线观看| 日韩欧美第一区| 亚洲国产成人一区二区三区| 国产精品国产三级国产普通话99 | 日本视频免费一区| 麻豆91免费看| 高清av一区二区| 在线视频一区二区免费| 欧美精品久久久久久久多人混战| 日韩欧美美女一区二区三区| 欧美激情综合五月色丁香小说| 亚洲人成网站在线| 日本在线不卡一区| 成人午夜av影视| 一本一本大道香蕉久在线精品 | 色综合久久久久综合99| 9191成人精品久久| 中文字幕一区二区三区不卡 | 亚洲一区二区视频在线观看| 青青草国产精品97视觉盛宴| 黄页网站大全一区二区| 99re这里都是精品| 日韩欧美国产精品| 一区二区三区精品在线观看| 蜜臀av性久久久久蜜臀aⅴ | 国产成人免费视频网站高清观看视频| 94-欧美-setu| 久久女同性恋中文字幕| 亚洲国产精品自拍| 成人美女视频在线观看18| 欧美一区二区三区的| 亚洲人成伊人成综合网小说| 免费成人美女在线观看| 日本韩国欧美三级| 欧美激情在线免费观看| 美国三级日本三级久久99| 色视频成人在线观看免| 国产日韩影视精品| 狠狠色综合播放一区二区| 欧美日韩精品一区二区三区四区| 国产精品免费丝袜| 日本中文字幕一区| 欧美日韩一级大片网址| 亚洲欧美国产高清| 欧美视频完全免费看| 久久久久久**毛片大全| 极品尤物av久久免费看| 欧美精品在线观看一区二区| 夜夜精品浪潮av一区二区三区| 99久久精品国产毛片| 中文子幕无线码一区tr| 国产精品中文字幕日韩精品| 日韩精品中文字幕在线不卡尤物| 亚洲风情在线资源站| 91福利视频在线| 最新高清无码专区| 国产精品一二三| 日韩欧美一二三四区| 蜜桃av一区二区在线观看| 91精品午夜视频| 麻豆精品一区二区综合av| 日韩欧美国产午夜精品| 精品一区二区三区香蕉蜜桃|