打印

请教大神们关于GD32 USB问题

[复制链接]
2895|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
blake___|  楼主 | 2015-10-10 15:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
USB, HC, pd, ev, AD
准备换GD32 在调试USB时候

for (i = 0; i < num_channels; i++)
  {
    hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[i]->HCCHAR);
    hcchar.b.chen = 1;
    hcchar.b.chdis = 1;
    hcchar.b.epdir = 0;
    USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[i]->HCCHAR, hcchar.d32);
    do
    {
      USB_OTG_READ_REG32(&pdev->regs.GREGS->GRXSTSP);
      hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[i]->HCCHAR);
      USB_OTG_BSP_uDelay (20);
    }
    while (hcchar.b.chen);
  }
USB初始化就死在这个循环里了
沙发
blake___|  楼主 | 2015-10-10 15:50 | 只看该作者
uint32_t USB_OTG_ReadOtgItr (USB_OTG_CORE_HANDLE *pdev)
{
  return (USB_OTG_READ_REG32 (&pdev->regs.GREGS->GOTGINT));
}


/**
* @brief  USB_OTG_CoreInitHost : Initializes USB_OTG controller for host mode
* @param  pdev : Selected device
* @retval status
*/
USB_OTG_STS USB_OTG_CoreInitHost(USB_OTG_CORE_HANDLE *pdev)
{
  USB_OTG_STS                     status = USB_OTG_OK;
  USB_OTG_FSIZ_TypeDef            nptxfifosize;
  USB_OTG_FSIZ_TypeDef            ptxfifosize;  
  USB_OTG_HCCHAR_TypeDef          hcchar;
  USB_OTG_HCFG_TypeDef            hcfg;
  
  
  uint32_t                        num_channels = 0, i = 0;
  
  nptxfifosize.d32 = 0;  
  ptxfifosize.d32 = 0;
  
  hcfg.d32 = 0;
  
  
  /* configure charge pump IO */
  USB_OTG_BSP_ConfigVBUS();
  
  /* Restart the Phy Clock */
  USB_OTG_WRITE_REG32(pdev->regs.PCGCCTL, 0);
  
  /* Initialize Host Configuration Register */
  USB_OTG_InitFSLSPClkSel(pdev , HCFG_48_MHZ);
  
  hcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.HREGS->HCFG);
  hcfg.b.fslssupp = 1;
  USB_OTG_WRITE_REG32(&pdev->regs.HREGS->HCFG, hcfg.d32);
  
  /* Configure data FIFO sizes */
  /* Rx FIFO */
  USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GRXFSIZ, RX_FIFO_SIZE);
  
  /* Tx FIFO */
  nptxfifosize.b.depth     = TXH_NP_FIFOSIZ;
  nptxfifosize.b.startaddr = RX_FIFO_SIZE;
  USB_OTG_WRITE_REG32(&pdev->regs.GREGS->HNPTXFSIZ, nptxfifosize.d32);
  
  ptxfifosize.b.startaddr = RX_FIFO_SIZE + TXH_NP_FIFOSIZ;
  ptxfifosize.b.depth     = TXH_P_FIFOSIZ;
  USB_OTG_WRITE_REG32(&pdev->regs.GREGS->HPTXFSIZ, ptxfifosize.d32);  
  
  
  
  /* Make sure the FIFOs are flushed. */
  USB_OTG_FlushTxFifo(pdev, 0x10 );         /* all Tx FIFOs */
  USB_OTG_FlushRxFifo(pdev);
  
  
  /* Flush out any leftover queued requests. */
  num_channels = pdev->cfg.host_channels;
  
  for (i = 0; i < num_channels; i++)
  {
    hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS->HCCHAR);
    hcchar.b.chen = 0;
    hcchar.b.chdis = 1;
    hcchar.b.epdir = 0;
    USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS->HCCHAR, hcchar.d32);
   
    /* Clear all pending HC Interrupts */
    USB_OTG_WRITE_REG32( &pdev->regs.HC_REGS->HCINT, 0xFFFFFFFF );
  }
  /* Halt all channels to put them into a known state. */
  for (i = 0; i < num_channels; i++)
  {
    hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS->HCCHAR);
    hcchar.b.chen = 1;
    hcchar.b.chdis = 1;
    hcchar.b.epdir = 0;
    USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS->HCCHAR, hcchar.d32);
    do
    {
      USB_OTG_READ_REG32(&pdev->regs.GREGS->GRXSTSP);
      hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS->HCCHAR);
      USB_OTG_BSP_uDelay (20);
    }
    while (hcchar.b.chen);
  }
  /* Disable HALT interrupt Masks */
  for (i = 0; i < num_channels; i++)
  {
    USB_OTG_HCGINTMSK_TypeDef  hcintmsk;
    hcintmsk.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS->HCGINTMSK);
    hcintmsk.b.chhltd = 0;
    USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS->HCGINTMSK , hcintmsk.d32);
  }
  
  USB_OTG_DriveVbus(pdev, 1);
  
  
  USB_OTG_EnableHostInt(pdev);
  return status;
}

使用特权

评论回复
板凳
dbayj| | 2015-10-10 23:05 | 只看该作者
要用新版本库

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝