微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于μCOS-II的USB主机系统设计

基于μCOS-II的USB主机系统设计

时间:12-27 来源:互联网 点击:

μC/OS-II 是美国学者Lacrosse 设计的一个优秀的嵌入式实时操作系统,其代码绝大部分用ANSIC 语言编写,可用于8 位、16 位、32 位、甚至64 位微处理器、微控制器、数字信号处理器等,具有操作系统最基本最核心的功能,非常适于在小型系统和片上系统(SOC)中使用。USB 为个人电脑与嵌入式设备之间的连接提供了一种标准化、单一化的接口,其高效性和可靠性使得它已经成为嵌入式系统的首选接口。此LPC2378 读卡器具有卡票检测、消费扣钱、系统升级、下发黑名单、在线充值、余额查询等功能,但这些功能的实现都依赖于上位机的请求,业务应用模块只有在获得相应的请求后才能进行相应的处理并将处理结果返回给上位机。而USB 主机系统就是起衔接上位机和业务应用模块的功能,接收上位机请求以及将业务应用模块的结果返回给上位机。

1 构建μC/OS-II系统环境

1.1 移植μC/OS-II 到LPC2378 开发板

嵌入式操作系统作为大多数嵌入式应用系统的软件平台,它管理着系统的资源,为应用软件提供各种必要的服务。在嵌入式应用系统中使用嵌入式系统,可以提升嵌入式应用系统的开发效率,但是在得到嵌入式操作系统提供服务之前,关键是要将嵌入式操作系统移植到目标板上。

移植条件:

移植μC/OS-II 之前需要注意,目标处理器必须满足以下五点要求:

1. 处理器的C 编译器能产生可重入型代码;2. 处理器支持中断,并且能产生定时中断(通常为10-100Hz);3. 用C 语言可以开/关中断;4. 处理器能支持一定数量的数据存储硬件堆栈(可能是几KB);5. 处理器有将堆栈指针以及其他CPU 寄存器的内容读出并保存到堆栈或内存中去的指令。

LPC2378 系列ARM7 微控制器可以满第2、4 和5 点要求,使用ADS 的C 编译器可以满足1 和3 点要求。

移植步骤:

OS_CPU.H 的移植:

在OS_CPU.H 文件中定义与处理器相关的数据类型,例如BOOLEAN,INT8U 和INT8S 等。根据ADS1.2编译器的特性定义。在OS_CPU.H 文件中定义与处理器相关的宏, 主要是进出临界区代码OS_ENTRER_CRITICAL()、OS_EXIT_CRITICAL()。

将OS_ENTRER_CRITICAL()和OS_EXIT_CRITICAL()定义为软件中断函数,所以还要编写相应的软件中断处理代码(可以在OS_CPU_C.C 文件中编写)实现开/关中断。同样定义OS_TASK_SW()为软件中断函数,并编写相应的软件中断处理代码(调用OS_IntCtxSw 函数)实现任务切换。

OS_CPU_C.C 的移植:

在OS_CPU_C.C 中需要编写10 个相关的函数,为:OSTaskStkInit();OSTaskDellHook();OSTaskIdleHook ();OSTaskTickHook()等函数。其中9 个系统Hook函数可以为空函数,也可以根据用户自己的需要编写相应的操作代码。任务栈结构初始化函数OSTaskStkInit()必须根据移植时统一定义的任务堆栈结构进行初始化。

OS_CUP_A.ASM 的移植。

μC/OS-II 移植要求编写的汇编语言函数为:

OSStartHightRdy();OSCtxSw();OSIntCtxSw();OS_TickISR()。当然这些程序不一定非得用汇编,也可以用嵌入式C 语言来完成。

至此,完成μC/OS-II 在ARM7 处理器LPC2378上代码的移植,其大部分代码与μC/OS-II 在其他ARM7 处理器上的移植是通用的。

1.2 USB 驱动程序设计

μC/OS-II 提供了多任务实时操作系统的内核。在应用这个操作系统时候,用户通常需要自己编写基于μC/OS-II 的外围器件驱动程序,以使外围器件能在操作系统的协调下更好的为用户服务。为了使软件可移植性强,易维护,采用分层的方法编写USB 的驱动程序。综合考虑USB 协议、USB 硬件接线、μC/OS-II的结构来进行分层,下表所列为USB 驱动程序分层结构。

1.2.1 USB 硬件抽象层。

USB 硬件抽象层的主要任务是对USB 模块的相关硬件进行配置,是USB 驱动程序的最底层与具体硬件相关的一层。主要完成的任务:初始化USB 设备控制器为系统配置USB 时钟控制器,选择信号映射端口(在LPC 系列中只有LPC2378 有此功能),配置电源;配置USB 设备控制器中断,此系统禁止了同步传输帧中断,使端点处于低优先级中断;以及配置软件控制接连、断开和重新连接USB 功能的相关寄存器。

1.2.2 USB 命令接口层。

USB 命令接口层是在USB 硬件的角度来描述USB 的具体功能是独立于操作系统之外的,也是协议层和驱动层实现的基础。USB 命令接口层函数基本是和具体的USB 寄存器相关的,通过操作寄存器完成相应的功能。

1.2.3 USB 协议层。

USB 协议层主要由 Descriptor.c 和Chap_9.c 文件组成。在Descriptor.c 定义了各描述符,是在USB 硬件的基础上描述此读卡器的USB 模块,分别为:设备描述

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top