当前位置:首页 > 单片机 > 单片机
[导读] 内容摘要:USB(Universal Serial Bus)是目前应用非常广泛的一种总线形式。其即插即用、热插拔、接口体积小巧等优点给计算机外设连接技术带来重大变革。μCOS-II 是一个源码公开、完整的、可移植、可

内容摘要:USB(Universal Serial Bus)是目前应用非常广泛的一种总线形式。其即插即用、热插拔、接口体积小巧等优点给计算机外设连接技术带来重大变革。μCOS-II 是一个源码公开、完整的、可移植、可固化、可裁剪的嵌入式实时操作系统,可以方便地移植到多种微处理器上。以在新太科技实际工作中的LPC2378读卡器为例,详细介绍μCOS-II 中USB 主机系统的设计。

μ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 模块,分别为:设备描述符、配置描述符、接口描述符和端点描述符。这些描述符也是上位机枚举、识别读卡器USB 模块的媒介。而Chap_9.c 就是上位机枚举读卡器USB 模块时USB 模块回馈上位机的具体实现,其中大部分函数都是依赖于USB 命令接口层。

1.2.4 USB 驱动层。

USB 驱动层是属于USB 驱动程序中最上层的是与μC/OS-II 系统联系最紧密的一层。在其他各层的基础上从系统的角度描述了USB 通信功能,是与操作系统和应用程序直接联系的一层。包括系统启动时初始化USB 硬件的接口以及等待接收主机枚举过程发送的SETUP 包等函数的接口。其中USB 端点的读写函数USB_ReadPort(INT8U endp, INT32U eppsize,INT8U buffnums,CTRL_USB *pUsb, INT32U len,INT8U *recbuff, INT16U timeout) 和USB_WritePort(INT8U endp, INT32U eppsize, INT8Ubuffnums, CTRL_USB *pUsb, INT8U *sendbuff,INT32U len, INT16U timeout)实现了接收上位机的请求和将处理结果返回给上位机。

以读函数为例描述USB 接收上位机请求的过程,由函数原型的最后一个参数timeout 可知,读过程是一种阻塞性的操作,在此系统中是以信号量的方式来实现阻塞型的读操作的。在参数检测无误时调用USB_WaitEpReady(pUsb, timeout)以获取该端点对应信号量,若获取失败则此端点无数据可读。当上位机发送数据到相应的端点时会产生中断,中断处理程序会判断哪个端点产生了中断,然后发送此端点所对应的信号量,这样USB_WaitEpReady(pUsb, timeout)就可以获得信号量完成读操作,否则程序会等待timeout时间,如果在timeout 时间内依然获取信号量失败那程序就出错返回。若读取长度大于端点缓冲区的长度的话则一次只能读取端点缓冲区长度数,分多次读取,直到读取规定长度为止。写端点函数发送过程和读端点函数接收过程实现流程大体相似,其中最大的区别就是中断产生的时机不同,接收过程是在数据到达相应端点缓冲区时产生中断,而发送过程是将数据写到相应端点缓冲区之后才产生中断。这样在将数据发往相应缓冲区后再调用USB_WaitEpReady(pUsb,timeout),若在此函数中成功获得信号量则说明发生成功。

2 USB系统软件设计

USB 的系统软件是与μC/OS-II 操作系统和业务应用模块紧密关联的。在μC/OS-Ⅱ对USB 进行初始化时,不但要对USB 硬件接口初始化,还需要对其相关软件进行初始化,比如:设置中断处理函数,以及单独创建一个TaskSetup 任务以完成上位机对USB 系统主机的枚举。中断处理过程采用的是非向量中断的方式,首先由中断状态寄存器的值判断中断产生的原因,然后由不同的原因设置不同的中断处理函数。如果是数据中断话则在相应的中断处理函数中发送对应端点的信号量,这样USB 驱动程序中读写接口才能成功被调用。TaskSetup 是系统的第一个任务,只有在TaskSetup 任务中USB 主机系统被成功枚举后才能进行通信。枚举过程主要是通过0 号端点的控制传输方式进行的,在此过程中USB 主机系统接收上位机发送的Setup 包,然后根据Setup 包的不同请求进行相应的处理再通过控制端点将结果返回给上位机。在USB 中0 号端点为控制端点一共有2 个分别为输入和输出端点。设备枚举其实就是一个上位机识别USB 主机系统的过程,标准USB 枚举过程如下:获取设备描述符、复位、设置地址、再次获取设备描述符、获取配置描述符、获取接口和端点描述符、获取字符串描述符、选择设备配置。枚举成功之后USB 主机系统处于就绪状态并且配置所有的接口与端点。

在USB 体系结构中数据的交互是以端点为基本单位的,端点的集合表现为接口,在U

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

hmi是Human Machine Interface 的缩写,"人机接口",也叫人机界面。人机界面(又称用户界面或使用者界面)是系统和用户之间进行交互和信息交换的媒介, 它实现信息的内部形式与人类可以接受形式之间的转换...

关键字: HMI 人机界面 系统

在复位电路中,电容的作用是给系统提供恒定的电源电压,从而保证开机时系统能够正确地执行初始化和自检过程。因此,选择合适大小的电容对于系统的稳定性和性能至关重要。

关键字: 复位电路 电容 系统

工业自动化系统设计是一项涉及多个领域和技术的综合性任务。它旨在通过自动化设备和系统的集成,提高生产效率、降低能耗、确保产品质量和增强企业竞争力。本文将详细探讨工业自动化系统设计的原则、方法和实践,以期为相关从业人员提供有...

关键字: 工业自动化 设备 系统

MCS-51单片机是美国INTE公司于1980年推出的产品,与MCS-48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到...

关键字: 单片机 存储器 系统

DSP应用系统的运算量是确定选用处理能力为多大的DSP芯片的基础。运算量小则可以选用处理能力不是很强的DSP芯片,从而可以降低系统成本。相反,运算量大的DSP系统则必须选用处理能力强的DSP芯片,如果DSP芯片的处理能力...

关键字: DSP 芯片 系统

三家全球领先公司紧密协作,以满足基于台积公司先进技术的设计在芯片、封装和系统等方面的挑战

关键字: 芯片 封装 系统

虽然更高的电池容量延长了设备的使用时间,但如何缩短充电时间,这给设计人员带来了额外的挑战。快速充电适用于广泛的设备,包括消费电子、医疗和工业应用。本文分为两部分,概要介绍与实现电池快速充电功能相关的挑战。第1部分探讨在主...

关键字: 电池 快速充电 主机

因为各种新式微处理器的呈现和运用的不断深化,嵌入式体系在后PC年代得到了空前的开展。跟着时刻的推移和技能的前进,在工业操控和新式的手持式运用等范畴,用户体会成为产品成功的关键要素之一,越来越多的产品需求杰出的用户界面、互...

关键字: 嵌入式 系统 处理器

QVM人工智能引擎是Qihoo Support Vector Machine(奇虎支持向量机)的缩写。是360完全自主研发的第三代引擎(具有中国的自主知识产权的引擎)。

关键字: 微软 Windows 系统

主机厂都为他们的电动汽车配备了BMS,那为什么还是不能制服电动汽车的火爆脾气,避免或减少冒烟、自燃甚至爆炸事故呢?显而易见,上述BMS是有线连接方式,一旦因汽车恶劣环境而出现线缆连接问题,系统便形同虚设了

关键字: 主机 特斯拉 电动汽车
关闭
关闭