⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbd_otghs.lst

📁 ATmel的AT91sam7SE芯片 USB固件开发源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
    657                  //----------------------
    658                  case ENDPOINT_TYPE_BULK:
    659                  //----------------------
    660                      if (endpointDir) {
    661                          TRACE_INFO("Bulk In(%d)[%d] ",bEndpoint, pEpDesc->wMaxPacketSize);
    662                          //! Configure endpoint
    663          #ifndef DMA
    664                          pInterface->OTGHS_DEVEPTCFG[bEndpoint] = AT91C_OTGHS_ALLOC |
    665                                                        sizeEpt | AT91C_OTGHS_EPT_DIR_IN | AT91C_OTGHS_EPT_TYPE_BUL_EPT | AT91C_OTGHS_BK_NUMBER_2;
    666          #else
    667                          pInterface->OTGHS_DEVEPTCFG[bEndpoint] = AT91C_OTGHS_ALLOC | AT91C_OTGHS_AUTOSW |
    668                                                        sizeEpt | AT91C_OTGHS_EPT_DIR_IN | AT91C_OTGHS_EPT_TYPE_BUL_EPT | AT91C_OTGHS_BK_NUMBER_2;
    669          #endif
    670          
    671                      }
    672                      else {
    673                          TRACE_INFO("Bulk Out(%d)[%d]\n\r",bEndpoint, pEpDesc->wMaxPacketSize);
    674                          //! Configure endpoint
    675          #ifndef DMA
    676                          pInterface->OTGHS_DEVEPTCFG[bEndpoint] =  AT91C_OTGHS_ALLOC |
    677                                                       sizeEpt | AT91C_OTGHS_EPT_DIR_OUT | AT91C_OTGHS_EPT_TYPE_BUL_EPT | AT91C_OTGHS_BK_NUMBER_2;
    678          #else
    679                          pInterface->OTGHS_DEVEPTCFG[bEndpoint] = AT91C_OTGHS_ALLOC | AT91C_OTGHS_AUTOSW |
    680                                                       sizeEpt | AT91C_OTGHS_EPT_DIR_OUT | AT91C_OTGHS_EPT_TYPE_BUL_EPT | AT91C_OTGHS_BK_NUMBER_2;
    681          #endif
    682                      }
    683                      break;
    684          
    685                  //---------------------------
    686                  case ENDPOINT_TYPE_INTERRUPT:
    687                  //---------------------------
    688                      if (endpointDir) {
    689                          TRACE_INFO("Interrupt In[%d]\n\r",bEndpoint);
    690                          //! Configure endpoint
    691          #ifndef DMA
    692                          pInterface->OTGHS_DEVEPTCFG[bEndpoint] = AT91C_OTGHS_ALLOC |
    693                                                        sizeEpt | AT91C_OTGHS_EPT_DIR_IN | AT91C_OTGHS_EPT_TYPE_INT_EPT | AT91C_OTGHS_BK_NUMBER_2;
    694          #else
    695                          pInterface->OTGHS_DEVEPTCFG[bEndpoint] = AT91C_OTGHS_ALLOC | AT91C_OTGHS_AUTOSW |
    696                                                        sizeEpt | AT91C_OTGHS_EPT_DIR_IN | AT91C_OTGHS_EPT_TYPE_INT_EPT | AT91C_OTGHS_BK_NUMBER_2;
    697          #endif
    698          
    699                      }
    700                      else {
    701                          TRACE_INFO("Interrupt Out[%d]\n\r",bEndpoint);
    702                          //! Configure endpoint
    703          #ifndef DMA
    704                          pInterface->OTGHS_DEVEPTCFG[bEndpoint] =  AT91C_OTGHS_ALLOC |
    705                                                       sizeEpt | AT91C_OTGHS_EPT_DIR_OUT | AT91C_OTGHS_EPT_TYPE_INT_EPT | AT91C_OTGHS_BK_NUMBER_2;
    706          #else
    707                          pInterface->OTGHS_DEVEPTCFG[bEndpoint] = AT91C_OTGHS_ALLOC | AT91C_OTGHS_AUTOSW |
    708                                                       sizeEpt | AT91C_OTGHS_EPT_DIR_OUT | AT91C_OTGHS_EPT_TYPE_INT_EPT | AT91C_OTGHS_BK_NUMBER_2;
    709          #endif
    710          
    711                      }
    712                      break;
    713          
    714                  //------
    715                  default:
    716                  //------
    717                      TRACE_ERROR(" unknown endpoint type\n\r");
    718                      return false;
    719              }
    720          
    721              // Check if the configuration is ok
    722              if (ISCLEARED(pInterface->OTGHS_DEVEPTCSR[bEndpoint], AT91C_OTGHS_CFGOK)) {
    723          
    724                  TRACE_FATAL("F: OTGHS_ConfigureEndpoint: Cannot configure endpoint\n\r");
    725                  return false;
    726              }
    727          
    728              return true;
    729          }
    730          
    731          
    732          //------------------------------------------------------------------------------
    733          //      Interrupt service routine
    734          //------------------------------------------------------------------------------
    735          #ifdef DMA
    736          //----------------------------------------------------------------------------
    737          //! \fn    OTGHS_DmaHandler
    738          //! \brief This function (ISR) handles DMA interrupts
    739          //----------------------------------------------------------------------------
    740          static void OTGHS_DmaHandler(const S_usb *pUsb, unsigned char endpoint)
    741          {
    742              AT91PS_OTGHS   pInterface = OTGHS_GetDriverInterface(pUsb);
    743              S_usb_endpoint *pEndpoint = USB_GetEndpoint(pUsb, endpoint);
    744              unsigned int   csr;
    745          
    746              csr = pInterface->OTGHS_DEVDMA[endpoint].OTGHS_DEVDMASTATUS;
    747              pInterface->OTGHS_DEVIDR = (1<<SHIFT_DMA<<endpoint);
    748          
    749              if((csr & AT91C_OTGHS_END_BF_ST) || (csr & AT91C_OTGHS_END_TR_ST)) {
    750                  // READ
    751                  TRACE_DEBUG_M("END_BF_ST\n\r");
    752                  pEndpoint->dBytesTransferred = pEndpoint->dBytesBuffered;
    753                  pEndpoint->dBytesBuffered = 0;
    754          
    755                  TRACE_DEBUG_M("dBytesBuffered: 0x%x\n\r",pEndpoint->dBytesBuffered);
    756                  TRACE_DEBUG_M("dBytesRemaining: 0x%x\n\r",pEndpoint->dBytesRemaining);
    757                  TRACE_DEBUG_M("dBytesTransferred: 0x%x\n\r",pEndpoint->dBytesTransferred);
    758          
    759                  OTGHS_EndOfTransfer(pEndpoint, USB_STATUS_SUCCESS);
    760                  pEndpoint->dState = endpointStateIdle;
    761              }
    762              else {
    763                  TRACE_FATAL("Probleme IT DMA\n\r");
    764              }
    765          }
    766          #endif
    767          
    768          
    769          //------------------------------------------------------------------------------
    770          // \brief  OTGHS interrupt handler
    771          //
    772          //         Manages device resume, suspend, end of bus reset. Forwards endpoint
    773          //         interrupts to the appropriate handler.
    774          // \param  pUsb Pointer to a S_usb instance
    775          //------------------------------------------------------------------------------
    776          static void OTGHS_Handler(const S_usb *pUsb)
    777          {
    778              AT91PS_OTGHS  pInterface = OTGHS_GetDriverInterface(pUsb);
    779              unsigned int  dStatus;
    780              unsigned char numIT;
    781          
    782              if ( (!ISSET(USB_GetState(pUsb), USB_STATE_SUSPENDED))
    783                 && (ISSET(USB_GetState(pUsb), USB_STATE_POWERED))){
    784          
    785                  LED_TOGGLE(LED_USB);
    786              }
    787          
    788              TRACE_DEBUG_H("Hlr ");
    789          
    790              // Get General interrupts status
    791              dStatus = pInterface->OTGHS_SR & pInterface->OTGHS_CTRL & 0xFF;
    792              while (dStatus != 0) {
    793          
    794                  if(ISSET(dStatus, AT91C_OTGHS_VBUSTI))
    795                  {
    796                      TRACE_DEBUG_M("__VBus\n\r");
    797          
    798                      USB_Attach(pUsb);
    799          
    800                      // Acknowledge the interrupt
    801                      pInterface->OTGHS_SCR = AT91C_OTGHS_VBUSTI;
    802                  }
    803          
    804                  // Don't treat others interrupt for this time
    805                  pInterface->OTGHS_SCR = AT91C_OTGHS_IDT    | AT91C_OTGHS_SRP 
    806                                        | AT91C_OTGHS_VBERR  | AT91C_OTGHS_BCERR
    807                                        | AT91C_OTGHS_ROLEEX | AT91C_OTGHS_HNPERR
    808                                        | AT91C_OTGHS_STO;
    809          
    810                  dStatus = pInterface->OTGHS_SR & pInterface->OTGHS_CTRL & 0xFF;
    811              }
    812          
    813          
    814              // Get OTG Device interrupts status
    815              dStatus = pInterface->OTGHS_DEVISR & pInterface->OTGHS_DEVIMR;
    816              TRACE_DEBUG_H("OTGHS_DEVISR:0x%X\n\r", pInterface->OTGHS_DEVISR);
    817              while (dStatus != 0) {
    818          
    819                  // Start Of Frame (SOF)
    820                  if (ISSET(dStatus, AT91C_OTGHS_SOF)) {
    821                      TRACE_DEBUG_L("SOF ");
    822          
    823                      // Invoke the SOF callback
    824                      USB_StartOfFrameCallback(pUsb);
    825          
    826                      // Acknowledge interrupt
    827                      SET(pInterface->OTGHS_DEVICR, AT91C_OTGHS_SOF);
    828                      CLEAR(dStatus, AT91C_OTGHS_SOF);
    829                  }
    830          
    831                  // Suspend
    832                  else if (dStatus & AT91C_OTGHS_SUSP) {
    833          
    834                      TRACE_DEBUG_M("S ");
    835          
    836                      if (!ISSET(USB_GetState(pUsb), USB_STATE_SUSPENDED)) {
    837          
    838                          // The device enters the Suspended state
    839                          //      MCK + UDPCK must be off
    840                          //      Pull-Up must be connected
    841                          //      Transceiver must be disabled
    842          
    843                          // Enable wakeup
    844                          SET(pInterface->OTGHS_DEVIER, AT91C_OTGHS_EORST | AT91C_OTGHS_WAKEUP | AT91C_OTGHS_EORSM);
    845          
    846                          // Acknowledge interrupt
    847                          pInterface->OTGHS_DEVICR = AT91C_OTGHS_SUSP;
    848                          SET(*(pUsb->pState), USB_STATE_SUSPENDED);
    849                          OTGHS_DisableTransceiver(pUsb);
    850                          OTGHS_DisableMCK(pUsb);
    851                          OTGHS_DisableOTGHSCK(pUsb);
    852          
    853                          // Invoke the Suspend callback
    854          
    855                          USB_SuspendCallback(pUsb);
    856                      }
    857                  }
    858          
    859                  // Resume
    860                  else if (ISSET(dStatus, AT91C_OTGHS_WAKEUP)
    861                        || ISSET(dStatus, AT91C_OTGHS_EORSM)) {
    862          
    863                      // Invoke the Resume callback
    864                      USB_ResumeCallback(pUsb);
    865          
    866                      TRACE_DEBUG_M("R ");
    867          
    868                      // The device enters Configured state
    869                      //      MCK + UDPCK must be on
    870                      //      Pull-Up must be connected
    871                      //      Transceiver must be enabled
    872          
    873                      if (ISSET(USB_GetState(pUsb), USB_STATE_SUSPENDED)) {
    874          
    875                          // Powered state
    876                          OTGHS_EnableMCK(pUsb);
    877                          OTGHS_EnableOTGHSCK(pUsb);
    878          
    879                          // Default state
    880                          if (ISSET(USB_GetState(pUsb), USB_STATE_DEFAULT)) {
    881          
    882                              OTGHS_EnableTransceiver(pUsb);
    883                          }
    884          
    885                          CLEAR(*(pUsb->pState), USB_STATE_SUSPENDED);
    886                      }
    887                      pInterface->OTGHS_DEVICR = 
    888                          (AT91C_OTGHS_WAKEUP | AT91C_OTGHS_EORSM | AT91C_OTGHS_SUSP);
    889          
    890                      pInterface->OTGHS_DEVIER = (AT91C_OTGHS_EORST | AT91C_OTGHS_SUSP);
    891                      pInterface->OTGHS_DEVICR = (AT91C_OTGHS_WAKEUP | AT91C_OTGHS_EORSM);
    892                      pInterface->OTGHS_DEVIDR = AT91C_OTGHS_WAKEUP;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -