bboyer
607

EZ-USB FX3固件应用程序入口分析

概要

这篇文章我们来学习一个EZ-USB FX3固件应用程序的入口处理功能,是如何一个流程。

1. main函数

main函数功能是用来初始化,其步骤如下:

  • 1.初始化设备
  • 2.初始化设备缓存
  • 3.配置核心IO矩阵
  • 4.初始化RTOS核心

初始化设备

其功能执行 CyU3PDeviceInit 函数,返回一个是否初始化成功状态。

ret = CyU3PDeviceInit(NULL);

初始化缓存(指令和数据缓存)

执行 CyU3PDeviceCacheControl 函数, 开启指令缓存和数据缓存。

ret = CyU3PDeviceCacheControl(CyTrue, CyTrue, CyTrue);

配置核心IO矩阵

执行 CyU3PDeviceConfigureIOMatrix 函数,开启设备的核心IO配置。

ret = CyU3PDeviceConfigureIOMatrix(&io_cfg);

io_cfgCyU3PIoMatrixConfig_t 类型。其配置主要是IO脚一些功能配置。

初始化RTOS核心

直接调用 CyU3PKernelEntry() 函数, 该函数没有返回值。

CyU3PKernelEntry();

2. 定义CyFxApplicationDefine

其函数为

void CyFxApplicationDefine(void) {
    ...
    ...
}

一旦OS和驱动程序初始化完成,FX3 RTOS 就会调用此函数。RTOS对象和线程需要创建, 都在这个函数中完成。这个函数不能被直接调用执行。

下面代码是创建一个线程的模板:

uint32_t retCode = CyU3PThreadCreate(.....)

CyU3PThreadCreate这个函数返回的是一个是否创建成功地状态,0代表成功,其他代表错误状态。

线程函数作为参数,传递给 CyU3PThreadCreate 函数,在线程函数中, 一般会处理以下功能:

  1. 开始USB功能
  2. 注册USB的setup回调函数
  3. 注册USB的事件回调函数
  4. 注册USB的LPM请求回调函数
  5. 设置USB超速设备描述
  6. 设置USB告诉设备描述
  7. 设置BOS描述
  8. 设置设备限定符描述
  9. 设置超速配置描述
  10. 设置高速配置描述
  11. 设置全速配置描述
  12. 设置设备的ID字符串
  13. 设置设备的生产相关的字符串
  14. 设置设备产品相关的字符串
  15. 连接启用超速操作的USB引脚
ez-usb cypress USB3.0
发布于: 2022年5月1日