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_cfg 为 CyU3PIoMatrixConfig_t 类型。其配置主要是IO脚一些功能配置。
初始化RTOS核心
直接调用 CyU3PKernelEntry() 函数, 该函数没有返回值。
CyU3PKernelEntry();
2. 定义CyFxApplicationDefine
其函数为
void CyFxApplicationDefine(void) {
...
...
}
一旦OS和驱动程序初始化完成,FX3 RTOS 就会调用此函数。RTOS对象和线程需要创建, 都在这个函数中完成。这个函数不能被直接调用执行。
下面代码是创建一个线程的模板:
uint32_t retCode = CyU3PThreadCreate(.....)
CyU3PThreadCreate
这个函数返回的是一个是否创建成功地状态,0代表成功,其他代表错误状态。
线程函数作为参数,传递给 CyU3PThreadCreate 函数,在线程函数中, 一般会处理以下功能:
- 开始USB功能
- 注册USB的setup回调函数
- 注册USB的事件回调函数
- 注册USB的LPM请求回调函数
- 设置USB超速设备描述
- 设置USB告诉设备描述
- 设置BOS描述
- 设置设备限定符描述
- 设置超速配置描述
- 设置高速配置描述
- 设置全速配置描述
- 设置设备的ID字符串
- 设置设备的生产相关的字符串
- 设置设备产品相关的字符串
- 连接启用超速操作的USB引脚
ez-usb
cypress
USB3.0
发布于: 2022年5月1日