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

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

?? usbd_udphs.c

?? AT91SAM9263的USB Device端口驅(qū)動(dòng)
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
//------------------------------------------------------------------------------
void USBD_InterruptHandler(void)
{
    unsigned int  status;
    unsigned char numIT;

    if (deviceState >= USBD_STATE_POWERED) {

        LED_Set(USBD_LEDUSB);
    }

    // Get interrupts status
    status = AT91C_BASE_UDPHS->UDPHS_INTSTA & AT91C_BASE_UDPHS->UDPHS_IEN;

    // Handle all UDPHS interrupts
    trace_LOG(trace_DEBUG, "H");
    while (status != 0) {

        // Start Of Frame (SOF)
        if ((status & AT91C_UDPHS_IEN_SOF) != 0) {

            trace_LOG(trace_DEBUG, "SOF ");

            // Invoke the SOF callback
            //USB_StartOfFrameCallback(pUsb);

            // Acknowledge interrupt
            AT91C_BASE_UDPHS->UDPHS_CLRINT = AT91C_UDPHS_IEN_SOF;
            status &= ~AT91C_UDPHS_IEN_SOF;
        }
        // Suspend
        // This interrupt is always treated last (hence the '==')
        else if (status == AT91C_UDPHS_DET_SUSPD) {

            trace_LOG(trace_DEBUG, "S");

            // The device enters the Suspended state
            // MCK + UDPCK must be off
            // Pull-Up must be connected
            // Transceiver must be disabled

            LED_Clear(USBD_LEDUSB);

            UDPHS_DisableBIAS();

            // Enable wakeup
            AT91C_BASE_UDPHS->UDPHS_IEN |= AT91C_UDPHS_WAKE_UP | AT91C_UDPHS_ENDOFRSM;
            AT91C_BASE_UDPHS->UDPHS_IEN &= ~AT91C_UDPHS_DET_SUSPD;

            // Acknowledge interrupt
            AT91C_BASE_UDPHS->UDPHS_CLRINT = AT91C_UDPHS_DET_SUSPD | AT91C_UDPHS_WAKE_UP;
            previousDeviceState = deviceState;
            deviceState = USBD_STATE_SUSPENDED;
            UDPHS_DisableUsbClock();

            // Invoke the Suspend callback
            USBDCallbacks_Suspended();
        }
        // Resume
        else if( ((status & AT91C_UDPHS_WAKE_UP) != 0)      // line activity
              || ((status & AT91C_UDPHS_ENDOFRSM) != 0))  { // pc wakeup

//JCB
#ifdef NOT_DEFINED
#if !defined(PIN_USB_VBUS)
            // Configure PIO
            PIO_Configure(&pinVbus, 1);

            // Check current level on VBus
            if (PIO_Get(&pinVbus) == 1)    // Protection
#endif
#endif
            {
                // Invoke the Resume callback
                USBDCallbacks_Resumed();

                trace_LOG(trace_DEBUG, "R");

                UDPHS_EnableUsbClock();
                UDPHS_EnableBIAS();

                // The device enters Configured state
                // MCK + UDPCK must be on
                // Pull-Up must be connected
                // Transceiver must be enabled

                deviceState = previousDeviceState;

                AT91C_BASE_UDPHS->UDPHS_CLRINT = AT91C_UDPHS_WAKE_UP | AT91C_UDPHS_ENDOFRSM | AT91C_UDPHS_DET_SUSPD;

                AT91C_BASE_UDPHS->UDPHS_IEN |= AT91C_UDPHS_ENDOFRSM | AT91C_UDPHS_DET_SUSPD;
                AT91C_BASE_UDPHS->UDPHS_CLRINT = AT91C_UDPHS_WAKE_UP | AT91C_UDPHS_ENDOFRSM;
                AT91C_BASE_UDPHS->UDPHS_IEN &= ~AT91C_UDPHS_WAKE_UP;
            }
// jcb !!!
#ifdef NOT_DEFINED
#if !defined(PIN_USB_VBUS)
            else {

                // No VBUS
                // Disconnect the pull-up
                USBD_Disconnect();
                AT91C_BASE_UDPHS->UDPHS_CLRINT = AT91C_UDPHS_WAKE_UP;
            }
#endif
#endif
        }
        // End of bus reset
        else if ((status & AT91C_UDPHS_ENDRESET) == AT91C_UDPHS_ENDRESET) {

//            trace_LOG(trace_DEBUG, "EoB ");

            // The device enters the Default state
            deviceState = USBD_STATE_DEFAULT;
            //      MCK + UDPCK are already enabled
            //      Pull-Up is already connected
            //      Transceiver must be enabled
            //      Endpoint 0 must be enabled

            UDPHS_ResetEndpoints();
            UDPHS_DisableEndpoints();
            USBD_ConfigureEndpoint(0);

            // Flush and enable the Suspend interrupt
            AT91C_BASE_UDPHS->UDPHS_CLRINT = AT91C_UDPHS_WAKE_UP | AT91C_UDPHS_DET_SUSPD;

            //// Enable the Start Of Frame (SOF) interrupt if needed
            //if (pCallbacks->startOfFrame != 0)
            //{
            //    AT91C_BASE_UDPHS->UDPHS_IEN |= AT91C_UDPHS_IEN_SOF;
            //}

            // Invoke the Reset callback
            USBDCallbacks_Reset();

            // Acknowledge end of bus reset interrupt
            AT91C_BASE_UDPHS->UDPHS_CLRINT = AT91C_UDPHS_ENDRESET;

            AT91C_BASE_UDPHS->UDPHS_IEN |= AT91C_UDPHS_DET_SUSPD;
        }
        // Handle upstream resume interrupt
        else if (status & AT91C_UDPHS_UPSTR_RES) {

            trace_LOG(trace_DEBUG, "ExtRes ");

            // - Acknowledge the IT
            AT91C_BASE_UDPHS->UDPHS_CLRINT = AT91C_UDPHS_UPSTR_RES;
        }
        // Endpoint interrupts
        else {
#ifndef DMA
            // Handle endpoint interrupts
            for (numIT = 0; numIT < NUM_IT_MAX; numIT++) {

                if ((status & (1 << SHIFT_INTERUPT << numIT)) != 0) {

                    UDPHS_EndpointHandler(numIT);
                }
            }
#else
            // Handle endpoint control interrupt
            if ((status & (1 << SHIFT_INTERUPT << 0)) != 0) {

                UDPHS_EndpointHandler( 0 );
            }
            else {

                numIT = 1;
                while((status&(0x7E<<SHIFT_DMA)) != 0) {

                    // Check if endpoint has a pending interrupt
                    if ((status & (1 << SHIFT_DMA << numIT)) != 0) {

                        UDPHS_DmaHandler(numIT);
                        status &= ~(1 << SHIFT_DMA << numIT);
                        if (status != 0) {

                            trace_LOG(trace_INFO, "\n\r  - ");
                        }
                    }
                    numIT++;
                }
            }
#endif
        }

        // Retrieve new interrupt status
        status = AT91C_BASE_UDPHS->UDPHS_INTSTA & AT91C_BASE_UDPHS->UDPHS_IEN;

        trace_LOG(trace_DEBUG, "\n\r");
        if (status != 0) {

            trace_LOG(trace_DEBUG, "  - ");
        }
    }

    if (deviceState >= USBD_STATE_POWERED) {

        LED_Clear(USBD_LEDUSB);
    }
}

//------------------------------------------------------------------------------
// Configure an endpoint with the provided endpoint descriptor
// pDdescriptor Pointer to the endpoint descriptor
// 
//------------------------------------------------------------------------------
void USBD_ConfigureEndpoint(const USBEndpointDescriptor *pDescriptor)
{
    Endpoint *pEndpoint;
    unsigned char bEndpoint;
    unsigned char bType;
    unsigned char bEndpointDir;
    unsigned char bSizeEpt = 0;

    // NULL descriptor -> Control endpoint 0
    if (pDescriptor == 0) {

        bEndpoint = 0;
        pEndpoint = &(endpoints[bEndpoint]);
        bType = USBEndpointDescriptor_CONTROL;
        bEndpointDir = 0;
        pEndpoint->size = BOARD_USB_ENDPOINTS_MAXPACKETSIZE(0);
        pEndpoint->bank = BOARD_USB_ENDPOINTS_BANKS(0);
    }
    else  {

        // The endpoint number
        bEndpoint = USBEndpointDescriptor_GetNumber(pDescriptor);
        pEndpoint = &(endpoints[bEndpoint]);
        // Transfer type: Control, Isochronous, Bulk, Interrupt
        bType = USBEndpointDescriptor_GetType(pDescriptor);
        // Direction, ignored for control endpoints
        bEndpointDir = USBEndpointDescriptor_GetDirection(pDescriptor);
        pEndpoint->size = USBEndpointDescriptor_GetMaxPacketSize(pDescriptor);
        pEndpoint->bank = BOARD_USB_ENDPOINTS_BANKS(bEndpoint);
    }

    // Abort the current transfer is the endpoint was configured and in
    // Write or Read state
    if( (pEndpoint->state == UDP_ENDPOINT_RECEIVING)
     || (pEndpoint->state == UDP_ENDPOINT_SENDING) ) {

        UDPHS_EndOfTransfer(bEndpoint, USBD_STATUS_RESET);
    }
    pEndpoint->state = UDP_ENDPOINT_IDLE;

    // Disable endpoint
    AT91C_BASE_UDPHS->UDPHS_EPT[bEndpoint].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 Fifos
    AT91C_BASE_UDPHS->UDPHS_EPT[bEndpoint].UDPHS_EPTCLRSTA = AT91C_UDPHS_TOGGLESQ | AT91C_UDPHS_FRCESTALL;
    AT91C_BASE_UDPHS->UDPHS_EPTRST = 1<<bEndpoint;

    // Configure endpoint
    if( pEndpoint->size == 8 )  {
        bSizeEpt = 0;
    } 
    else if ( pEndpoint->size == 16 ) {
        bSizeEpt = 1;
    }
    else if ( pEndpoint->size == 32 ) {
        bSizeEpt = 2;
    }
    else if ( pEndpoint->size == 64 ) {
        bSizeEpt = 3;
    }
    else if ( pEndpoint->size == 128 ) {
        bSizeEpt = 4;
    }
    else if ( pEndpoint->size == 256 ) {
        bSizeEpt = 5;
    }
    else if ( pEndpoint->size == 512 )  {
        bSizeEpt = 6;
    }
    else if ( pEndpoint->size == 1024 ) {
        bSizeEpt = 7;
    } //else {
    //  sizeEpt = 0; // control endpoint
    //}

    // Configure endpoint
    if (bType == USBEndpointDescriptor_CONTROL) {

        // Enable endpoint IT for control endpoint
        AT91C_BASE_UDPHS->UDPHS_IEN |= (1<<SHIFT_INTERUPT<<bEndpoint);
    }


    AT91C_BASE_UDPHS->UDPHS_EPT[bEndpoint].UDPHS_EPTCFG = bSizeEpt 
                                                        | (bEndpointDir << 3) 
                                                        | (bType << 4) 
                                                        | ((pEndpoint->bank) << 6);

    while( (signed int)AT91C_UDPHS_EPT_MAPD != (signed int)((AT91C_BASE_UDPHS->UDPHS_EPT[bEndpoint].UDPHS_EPTCFG) & AT91C_UDPHS_EPT_MAPD) ) {

        // resolved by clearing the reset IT in good place
        trace_LOG(trace_ERROR, "PB bEndpoint: 0x%X\n\r", bEndpoint);
        trace_LOG(trace_ERROR, "PB bSizeEpt: 0x%X\n\r", bSizeEpt);
        trace_LOG(trace_ERROR, "PB bEndpointDir: 0x%X\n\r", bEndpointDir);
        trace_LOG(trace_ERROR, "PB bType: 0x%X\n\r", bType);
        trace_LOG(trace_ERROR, "PB pEndpoint->bank: 0x%X\n\r", pEndpoint->bank);
        trace_LOG(trace_ERROR, "PB UDPHS_EPTCFG: 0x%X\n\r", AT91C_BASE_UDPHS->UDPHS_EPT[bEndpoint].UDPHS_EPTCFG);
        for(;;);
    }

    if (bType == USBEndpointDescriptor_CONTROL) {

        AT91C_BASE_UDPHS->UDPHS_EPT[bEndpoint].UDPHS_EPTCTLENB = AT91C_UDPHS_RX_BK_RDY 
                                                               | AT91C_UDPHS_RX_SETUP
                                                               | AT91C_UDPHS_EPT_ENABL;
    }
    else {
#ifndef DMA
        AT91C_BASE_UDPHS->UDPHS_EPT[bEndpoint].UDPHS_EPTCTLENB = AT91C_UDPHS_EPT_ENABL;
#else
        AT91C_BASE_UDPHS->UDPHS_EPT[bEndpoint].UDPHS_EPTCTLENB = AT91C_UDPHS_AUTO_VALID 
                                                               | AT91C_UDPHS_EPT_ENABL;
#endif
    }

}

//------------------------------------------------------------------------------
// Sends data through an USB endpoint (IN)

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色一情一乱一乱一91av| 欧美大尺度电影在线| 91蜜桃网址入口| 91蝌蚪国产九色| 欧美日韩国产大片| 精品电影一区二区| 亚洲婷婷国产精品电影人久久| 亚洲精品高清在线| 免费观看30秒视频久久| 福利电影一区二区| 欧美日韩免费一区二区三区 | 国产精品久久久久久久久果冻传媒 | 91精品国产乱码| 久久网这里都是精品| 亚洲视频中文字幕| 蜜桃视频在线观看一区二区| 国产激情91久久精品导航 | 亚洲精品自拍动漫在线| 日韩中文字幕亚洲一区二区va在线 | 麻豆国产精品官网| 99视频一区二区| 日韩亚洲欧美综合| √…a在线天堂一区| 日韩成人午夜精品| 91色.com| 久久久久久免费网| 亚洲一区二区三区爽爽爽爽爽 | 666欧美在线视频| 国产精品嫩草影院com| 日韩国产高清在线| 一本色道久久综合亚洲91| 精品国产乱码久久久久久夜甘婷婷 | 亚洲精品亚洲人成人网| 国产一区二区看久久| 欧美少妇bbb| 国产日产精品一区| 日韩成人av影视| av不卡免费在线观看| 精品99一区二区三区| 亚洲成人自拍网| 91蜜桃在线观看| 国产日韩影视精品| 蜜桃久久av一区| 91黄视频在线| 国产精品久久久久久亚洲毛片 | 91精品中文字幕一区二区三区| 国产精品色一区二区三区| 三级在线观看一区二区| 99精品视频中文字幕| 国产婷婷精品av在线| 看国产成人h片视频| 一本色道综合亚洲| 欧美激情在线一区二区三区| 蜜臀久久99精品久久久画质超高清| 一本久道久久综合中文字幕 | 亚洲乱码国产乱码精品精可以看| 国产乱人伦偷精品视频免下载| 欧美肥妇毛茸茸| 亚洲综合一区在线| 成人在线综合网站| 欧美精品一区二区在线播放| 五月天激情综合网| 欧美亚洲综合色| 综合激情网...| 成人精品一区二区三区四区 | 肉丝袜脚交视频一区二区| 欧美性三三影院| 亚洲欧美成人一区二区三区| 国产黄人亚洲片| 久久久国产精品不卡| 国产一区二区女| 欧美成人a∨高清免费观看| 天天综合网天天综合色| 欧美三级日本三级少妇99| 亚洲精品日韩综合观看成人91| 国产精品18久久久久久久久 | 亚洲丝袜制服诱惑| 91免费看视频| 一区二区三区精品在线| 99riav久久精品riav| 欧美国产一区在线| av日韩在线网站| 亚洲精品高清在线| 欧美视频在线观看一区| 午夜a成v人精品| 欧美一区二区三区的| 蜜臀av性久久久久蜜臀aⅴ| 欧美一区二区三区的| 精品在线免费视频| 久久色中文字幕| 国产精品一区不卡| 国产精品福利在线播放| 91影视在线播放| 亚洲高清免费观看| 9191久久久久久久久久久| 免费观看久久久4p| 国产三级一区二区三区| 成人黄色软件下载| 亚洲精品欧美激情| 欧美一区二区三区在| 国产一区二区精品久久91| 国产精品网站在线| 在线免费观看日本欧美| 日韩和欧美的一区| 久久一夜天堂av一区二区三区| 成人av在线看| 亚洲精品一卡二卡| 日韩欧美一级精品久久| 国产精品一区二区91| 亚洲欧美一区二区三区国产精品| 欧美日韩久久久| 国产乱码精品1区2区3区| 一区视频在线播放| 欧美一卡二卡在线| 成人免费福利片| 亚洲成在人线在线播放| 久久亚洲私人国产精品va媚药| 99久精品国产| 免费国产亚洲视频| 日韩一区日韩二区| 欧美一区午夜视频在线观看| 国产精品中文字幕日韩精品| 成人免费视频在线观看| 欧美日韩国产影片| 国产盗摄视频一区二区三区| 亚洲精品第一国产综合野| 精品久久久久久久久久久久久久久久久 | 91免费看视频| 国内精品久久久久影院一蜜桃| 亚洲欧美日韩电影| 欧美成人性福生活免费看| 99久久99久久综合| 狠狠色综合播放一区二区| 夜夜亚洲天天久久| 久久久久久久性| 欧美日韩国产一级二级| 国产精品99久久久久久宅男| 性久久久久久久| 国产精品日产欧美久久久久| 3d动漫精品啪啪1区2区免费| 成人黄色一级视频| 极品尤物av久久免费看| 亚洲第一激情av| 一区二区中文视频| 久久久亚洲高清| 7777精品伊人久久久大香线蕉超级流畅 | 欧美午夜片在线观看| 成人午夜精品在线| 精品综合久久久久久8888| 亚洲va欧美va国产va天堂影院| 欧美激情综合五月色丁香| 日韩一区二区三区在线观看 | 性做久久久久久免费观看欧美| 国产欧美精品一区二区色综合 | 亚洲电影中文字幕在线观看| 中文字幕成人在线观看| 精品少妇一区二区三区日产乱码 | 精品99999| 欧美一区二区视频在线观看2022| 91国产福利在线| 东方aⅴ免费观看久久av| 精品一区二区在线观看| 亚洲成a人片在线不卡一二三区| 中文字幕在线一区| 久久你懂得1024| 日韩免费一区二区三区在线播放| 欧美日韩一二三区| 色噜噜夜夜夜综合网| 不卡av在线网| 丁香婷婷综合五月| 国产1区2区3区精品美女| 国产麻豆成人精品| 国产一区二区三区久久久 | 欧美大白屁股肥臀xxxxxx| 欧美日韩的一区二区| 欧美在线视频你懂得| 91在线观看免费视频| www.亚洲免费av| 成人黄色大片在线观看| 高清beeg欧美| 国产99久久久精品| 国产一区二区0| 国产原创一区二区| 国产精品66部| 成人激情图片网| 97久久精品人人爽人人爽蜜臀| 国产a视频精品免费观看| 成人免费毛片aaaaa**| 国产a精品视频| 99在线精品免费| 欧洲一区二区三区在线| 欧美亚洲国产怡红院影院| 久久综合久久鬼色| 精品毛片乱码1区2区3区| 精品国产乱码久久久久久牛牛 | 日韩高清在线一区| 麻豆视频观看网址久久| 九九热在线视频观看这里只有精品| 日韩 欧美一区二区三区| 美女国产一区二区|