• STM32 USB Host Library 学习笔记 (1) USB_OTG_ReadPacket() USB_ReadPacket()


     1 /**
     2 * @brief  USB_OTG_ReadPacket : Reads a packet from the Rx FIFO
     3 * @param  pdev : Selected device
     4 * @param  dest : Destination Pointer
     5 * @param  bytes : No. of bytes
     6 * @retval None
     7 */
     8 void *USB_OTG_ReadPacket(USB_OTG_CORE_HANDLE *pdev, 
     9                          uint8_t *dest, 
    10                          uint16_t len)
    11 {
    12   uint32_t i=0;
    13   //uint32_t count32b = (len + 3) / 4;
    14   uint32_t count32b = (len) / 4;
    15   uint32_t count8b = (len) & 3;
    16   
    17   __IO uint32_t *fifo = pdev->regs.DFIFO[0];
    18   
    19   for ( i = 0; i < count32b; i++, dest += 4 )
    20   {
    21     *(__packed uint32_t *)dest = USB_OTG_READ_REG32(fifo);
    22     
    23   }
    24   
    25   if ( count8b )
    26   {
    27     count32b = USB_OTG_READ_REG32(fifo);
    28     while ( count8b > 0 )
    29     {
    30       *dest = count32b;
    31       count32b >>= 8;
    32       dest++;
    33       count8b--;      
    34     }
    35   }
    36 return ((void *)dest); 37 }
    
    

    /** @file stm32f4xx_ll_usb.c
      * @author MCD Application Team
      * @version V1.1.0
      * @date 19-June-2014
      * @brief USB Low Layer HAL module driver.
      */


    /*
    * * @brief USB_ReadPacket : read a packet from the Tx FIFO associated * with the EP/channel * @param USBx : Selected device * @param src : source pointer * @param ch_ep_num : endpoint or host channel number * @param len : Noumber of bytes to read * @param dma: USB dma enabled or disabled * This parameter can be one of the these values: * 0 : DMA feature not used * 1 : DMA feature used * @retval pointer to desctination buffer */ void *USB_ReadPacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len) { uint32_t i=0; uint32_t count32b = (len + 3) / 4; for ( i = 0; i < count32b; i++, dest += 4 ) { *(__packed uint32_t *)dest = USBx_DFIFO(0); // dest buffer overflow if (len != n*4) } return ((void *)dest); }

  • 相关阅读:
    建立十字链表
    KMP算法
    魔术师发牌问题(循环链表)
    约瑟夫问题(循环链表)
    中缀表达式 转 (逆)波兰表达式
    中缀表达式求值
    迷宫问题(回溯法)
    范数
    AUC
    概率论
  • 原文地址:https://www.cnblogs.com/shangdawei/p/2667125.html
Copyright © 2020-2023  润新知