zoukankan      html  css  js  c++  java
  • USB开发库STSW-STM32121文件分析

    hw_config.c: 该文件中包含系统配置的函数。

    usb_desc.c:各种描述符

    usb-endp.c:就两个函数分别处理端点1的IN和端点2的OUT。

    usb_istr.c: 该文件中只有一个函数,即 USB 中断的 USB_Istr 函数,该函数对各类引起 USB 中断的事件作轮询处理。
    usb_prop.c:每个特定类下应用相关的处理函数,例如初始化、 SETUP 包、 IN 包、 OUT 包等等。


    usb_pwr.c: 该文件中包含处理上电、调电、挂起和恢复事件的函数。

    stm32it.c: 该文件中包含 USB 中断服务程序,由于 USB 中断有很多情况,这里的中断服务程序只是调用 usb_Istr.c 文件中的 USB_Istr 函数,由 USB_Istr 函数再做轮询处理。

    usb_bot.c:是一个非常重要的源文件,可以说是大容量设备类的主要工作是由它完成的。bot的意思是BULk-only type,在近批量传输协议下,命令的传送也是有批量端点完成的。

    usb_scsi.c:主要是实现具体UFI命令的处理,像读扇区、写扇区、读容量等命令的处理过程都是在这里完成的。

    usb_mem.c: 主要实现两个函数:

    UserToPMABufferCopy:把用户缓冲区中的内容拷贝到硬件缓冲区,这个显然是在发送数据
    PMAToUserBufferCopy:把硬件缓冲区中的内容拷贝到用户缓冲区,这个显然是在接收数据
    /*******************************************************************************
    * Function Name  : UserToPMABufferCopy
    * Description    : Copy a buffer from user memory area to packet memory area (PMA)
    * Input          : - pbUsrBuf: pointer to user memory area.
    *                  - wPMABufAddr: address into PMA.
    *                  - wNBytes: no. of bytes to be copied.
    * Output         : None.
    * Return         : None	.
    *******************************************************************************/
    void UserToPMABufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes)
    {
      uint32_t n = (wNBytes + 1) >> 1;   /* n = (wNBytes + 1) / 2 */
      uint32_t i, temp1, temp2;
      uint16_t *pdwVal;
      pdwVal = (uint16_t *)(wPMABufAddr * 2 + PMAAddr);
      for (i = n; i != 0; i--)
      {
        temp1 = (uint16_t) * pbUsrBuf;
        pbUsrBuf++;
        temp2 = temp1 | (uint16_t) * pbUsrBuf << 8;
        *pdwVal++ = temp2;
        pdwVal++;
        pbUsrBuf++;
      }
    }
    
    /*******************************************************************************
    * Function Name  : PMAToUserBufferCopy
    * Description    : Copy a buffer from user memory area to packet memory area (PMA)
    * Input          : - pbUsrBuf    = pointer to user memory area.
    *                  - wPMABufAddr = address into PMA.
    *                  - wNBytes     = no. of bytes to be copied.
    * Output         : None.
    * Return         : None.
    *******************************************************************************/
    void PMAToUserBufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes)
    {
      uint32_t n = (wNBytes + 1) >> 1;/* /2*/
      uint32_t i;
      uint32_t *pdwVal;
      pdwVal = (uint32_t *)(wPMABufAddr * 2 + PMAAddr);
      for (i = n; i != 0; i--)
      {
        *(uint16_t*)pbUsrBuf++ = *pdwVal++;
        pbUsrBuf++;
      }
    }

     usb_sil.c:这个文件主要是简单接口层的初始化,和端点的读写操作函数。总共有3个函数:USB_SIL_Init();USB_SIL_Write();USB_SIL_Read()。

     移植的话USB-FS-Device_Driver无需修改,只需要修改user下的文件即可

    端点0固定用于控制传输,endpoint0 的setup 包处理函数setup0_process()

    http://bbs.ednchina.com/BLOG_ARTICLE_1473493.HTM

  • 相关阅读:
    Spring源码学习之容器的基本实现(一)
    面向对象设计原则
    简单易懂带你了解红黑树
    简单易懂带你了解二叉树
    单例模式
    原形模式
    数组与链表
    记一次解决postgresql数据库内存泄露的问题
    记一次排查CPU高的问题
    react ts 设置paths 和 声明非@types的模块
  • 原文地址:https://www.cnblogs.com/prayer521/p/5822396.html
Copyright © 2011-2022 走看看