bboyer
571

EZ-USB FX3固件应用最基本的eclipse项目结构

必要文件说明

cyfx_gcc_startup.S

Cypress FX3固件应用程序启动代码,一般是固定的.

.section .text
.code 32

.global jump
jump:
    bx  R0

.global CyU3PToolChainInit
CyU3PToolChainInit:

# clear the BSS area
__main:
    mov    R0, #0
    ldr    R1, =_bss_start
    ldr    R2, =_bss_end
1:    cmp    R1, R2
    strlo    R0, [R1], #4
    blo    1b

    b    main


.global __user_initial_stackheap
__user_initial_stackheap:

# The tool chain is not expected to place the stack.
# No heap is expected to be used by USB 3.0 platform drivers.
# Place them as required by the user code
.if  INTER == TRUE
    bx      lr                 
.else
    mov     pc, lr             
.endif

.end

# []

cyfxtx.c

这个文件定义了芯片的一些基本的SDK功能: 异常处理和内存的分配功能. 当前文件不可以更改.

代码参考示例代码

makefile

这个文件是用来编译项目用的.懂makefile语法的,可以自行修改


FX3FWROOT=../../..

all:compile

include $(FX3FWROOT)/fw_build/fx3_fw/fx3_build_config.mak

MODULE = cyfxusbdebug

SOURCE= $(MODULE).c     \
    cyfxusbdscr.c    \
    cyfxtx.c

ifeq ($(CYFXBUILD),arm)
SOURCE_ASM=cyfx_startup.S
else
SOURCE_ASM=cyfx_gcc_startup.S
endif

C_OBJECT=$(SOURCE:%.c=./%.o)
A_OBJECT=$(SOURCE_ASM:%.S=./%.o)

EXES = $(MODULE).$(EXEEXT)

$(MODULE).$(EXEEXT): $(A_OBJECT) $(C_OBJECT)
    $(LINK)

cyfxtx.c:
    cp $(FX3FWROOT)/fw_build/fx3_fw/cyfxtx.c .

cyfx_startup.S:
    cp $(FX3FWROOT)/fw_build/fx3_fw/cyfx_startup.S .

cyfx_gcc_startup.S:
    cp $(FX3FWROOT)/fw_build/fx3_fw/cyfx_gcc_startup.S .

$(C_OBJECT) : %.o : %.c
    $(COMPILE)

$(A_OBJECT) : %.o : %.S
    $(ASSEMBLE)

clean:
    rm -f ./$(MODULE).$(EXEEXT)
    rm -f ./$(MODULE).map
    rm -f ./*.o
    rm -f cyfxtx.c cyfx_startup.S cyfx_gcc_startup.S


compile: $(C_OBJECT) $(A_OBJECT) $(EXES)

上面代码是示例中的一个代码, 大家可以根据自己的项目需求, 自行更改.

makefile.init

这个文件不是必须的. 有时候需要更改命令行终端,才能编译成功. 需要在里面配置.其他的环境配置, 也可以在这里配置.

SHELL=C:\Windows\system32\cmd.exe

上面只配置了shell的执行路径.

必要头文件夹

一般都是讲EZ-USB FX3 SDK的arm gcc相关头文件包含进来,以及fw_lib导入.

微信截图_20220614150822.png

项目入口文件

项目入口文件一般就是包含main函数的c文件. 这个文件最基本的代码

  1. 初始化usb设备
  2. 如果需要开启引脚, 则需要配置usb矩阵信息(就是配置开启哪些引脚)
  3. 开启rtos的功能, 因为一般我们都是在RTOS基础上开发固件应用.就是调用(CyU3PKernelEntry())这个函数.
  4. 开启rtos后, 会有自动调用一个入口函数CyFxApplicationDefine. 所以我们需要定义这么一个函数. 这个函数没有参数,也没有返回值.

总结

至此, 我们把FX3项目最基本的代码结构, 整理出来. 其他的功能就需要我们去了解这个FX3设备的一些说明文档,来开发不同的功能. 文档主要包含了:

  1. 当前芯片的数据手册,驱动开发手册
  2. 固件SDK的开发手册
  3. 上层应用(普通的软件应用)的开发手册
  4. GPIF II的说明文档
  5. 相关的实例代码文档 .............

其他的文档,可以去设备产商官网去查找......

cypress fx3 usb3.0 固件开发 cyusb3014
发布于: 2022年6月14日