引言近年来,随着微处理器性能的不断提高,嵌入式应用越来越广泛。基于某个操作系统的实时、多任务系统的设计和应用成为微处理器应用的热点。S1C33L11是由精工爱普生推出的32位高速、低功耗和低电压微处理器。本文介绍了将mC/OS-II嵌入式操作系统移植到S1C33L11微处理器的方法,并给出了以S1C33L11为核心构成的JPEG图像实时显示和数据传送系统的设计方案。
mC/OS-II的移植mC/OS-Ⅱ的源码绝大部分是用移植性很强的ANSI C写的,只是和微处理器硬件相关的那部分采用汇编语言,这样把mC/OS-II移植到S1C33L11中主要是要修改与处理器有关的代码,如:OS_CPU.H、OS_CPU_C.C 、OS_CPU_A.ASM。OS_CPU.H文件OS_CPU.H文件主要是定义和处理器有关的数据类型及有关中断禁止、中断允许、堆栈的增长方向的设置。S1C33L11处理器所使用的编译器中规定char为8位有符号数、short为16位有符号数、int和long都是32位有符号数。S1C33L11中堆栈的增长方向为从高地址到低地址。OS_CPU_C.C文件在OS_CPU_C.C文件中包含6个简单的C函数,而和移植密切相关的是OSTaskInit()函数,它的功能是模拟中断发生时处理器压栈过程,把CPU的寄存器内容压到任务堆栈中。在S1C33L11中,堆栈是32位的,中断的产生是先把PC压栈然后是PSR压栈。S1C33L11中OSTaskInit()函数模拟压栈过程是:首先任务函数地址压栈然后是PSR值压栈,接着是16个32位通用寄存器(R15~R0)的压栈模拟、AHR、ALR和SP的压栈模拟,最后返回栈顶的指针地址。其中PSR的值为 0x00000010设为中断使能。OS_CPU_A.ASM文件在OS_CPU_A.ASM文件中包含四个汇编语言的函数:OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()和OSTickISR()。OSStartHighRdy()函数由OSStart()函数调用,功能是运行优先级最高的就绪任务。在这个函数的移植中,关键之一是从OSTCB HighRdy中得到所指堆栈中的SP,其二是出栈操作。由于在本移植中SP是最后压栈的,在出栈时,应是弹出完16个通用寄存器后的SP值才是中断返回指令执行前的SP,因而在出栈操作时弹出的SP值不传给SP。OSCtxSw()是一个任务级的任务切换函数。在S1C33L11系统上,它通过执行0号软中断的指令来实现任务切换。这个函数中移植的关键点是压栈操作,因为根据OSTaskInit()函数中所设置的堆栈顺序,最后压栈的是SP,把SP的值压入栈中后SP的值减少了4字节,而这个减小了4字节后的SP值才是需要压入栈中的SP的真正的值。做压栈操作时要对此进行处理。 OSIntCtxSw()是一个中断级的任务切换函数,由于中断的产生可能会引起任务切换,在中断服务程序的最后会调用OSIntExit()函数检查任务就绪状态,如果需要进行任务切换,将调用OSIntCtxSw()。由于在调用OSIntCtxSw()之前已经发生了中断,因而在进入这个函数后应对SP的值进行相应的更改,之后的代码和OSCtxSw()中的一样。OSTickISR()是mC/OS-II的时钟节拍器,mC/OS-II的时钟节拍频率在10到100之间,通常为了计算方便而设为整数。在S1C33L11中用16位定时器0来做节拍器。
JPEG图像实时显示和数据传送系统设计多任务系统的设计是以S1C33L11微处理器为核心,以mC/OS-II为操作系统,通过USB总线实现JPEG图像的实时显示和数据传送的系统。其中USB与PC机通信是利用mC/OS-II的信号量通信机制通过对循环队列的操作来实现,JPEG图像解码是通过S1C33L11自带的JPEG解码器来实现,并通过S1C33L11自带的LCDC控制器实现在彩色LCD上的显示。系统硬件在系统硬件上两个重要的控制器是S1C33L11 内置的USB功能控制器和JPEG编解码器。S1C33L11 USB功能控制器S1C33L11 USB功能控制器支持USB1.1协议的全速模式。支持控制、块、同步和中断4种传输方式及4个通用通道(Epr(r=a,b,c,d))和一个控制通道(Endpoint0),并为每个通道提供1KB的FIFO。S1C33L11 JPEG编解码器在S1C33L11中,JPEG编解码器包括在LCDC 模块中,基于JPEG基线系统(Baseline Standard),满足JPEG Part-2(ISO/IEC10918-2)的兼容性测试要求。图像支持最大640480分辨率,量化表提供两个压缩表和4个解压缩表,哈夫曼表为每个AC(交流系数)和DC(直流系数)提供两个表。在编码处理中可插入标志最大可达36字节。在整个解码过程中被自动传送和处理的标志有SOI、SOFO、SOS、DQT、DHT、DRI、RSTm和EOI。解码器支持YUV4:4:4、YUV4:2:2、YUV4:1:1和YUV4:2:0,编码器支持YUV4:2:2格式,不支持RGB格式。图像数据处理速率在640480分辨率下一般少于1/15秒。此外,S1C33L11的JPEG编码器目前只能够把从照相接口(Camera Interface)引入的YUV数据流通过捕捉调整器(Capture Resizer)压缩成JPEG图像,来自显示缓冲数据的JPEG编码不被支持。 硬件组成JPEG图像实时显示和数据传送系统电路框图如图1所示,包括S1C33L11FOOA1、STN TFT 彩色LCD(SHARP 的LQ022B8DD05)、键盘和片外扩展的4M16bit FLASH和1M16bit SRAM(EPSON 的S1H0J646B2T)。系统软件JPEG解码与显示JPEG解码与显示流程框图如图2所示。USB双向通信的设计USB双向通信在基本传输方式上采用USB块传输,由USB初始化、USB中断处理、控制传输和块传输几部分组成。在实现双向通信上,具体通信机制是:嵌入式应用程序通过读写循环队列(OUT循环队列和IN循环队列各一个)和信号量状态与USB 硬件模块中的OUT 和IN FIFO相互通信,而USB下位机与上位机(PC)的读写通信则通过上位机对自定义控制包的读写来实现,最后通过循环队列、信号量、控制包三者的结合来达到USB双向通信的目的。JPEG图像实时显示和数据的发送设计 JPEG数据处理和显示作为一个任务,通过读取USB OUT循环队列和信号量状态接收来自PC机的JPEG图像数据,并进行LCD显示处理。当JPEG解码器解码和LCDC驱动LCD显示时,USB做为另一个任务仍可接收JPEG数据,从而达到JPEG数据的实时显示。同样,数据的发送和PC机的数据接收也可实现实时性。 系统整体设计系统中除了mC/OS-II的空闲任务外,还有数据存储任务、JPEG数据处理和显示任务、数据发送任务、键盘中断任务和USB运行任务。数据存储任务优先级为30,用于USB数据的存储;JPEG数据处理和显示任务优先级为15,用于JPEG数据的处理和显示;数据发送任务优先级为20,用于向USB IN循环队列写入数据;键盘任务的优先级为10,通过读取键盘中断设置的事件状态进行相应的处理,主要是USB运行任务、JPEG数据的处理和显示任务、数据发送任务的加载和卸载以及发出信号量通知数据存储任务进入就绪态等;USB运行任务的优先级为5,通过读取USB中断设置的事件状态从硬件USB FIFO中读取和发送数据。软件系统的整体设计框图如图3所示。
结语把uC/OS-II移植到S1C33L11中,并以S1C33L11为核心构成一个JPEG图像实时显示和数据传送系统,不仅系统设计简洁,硬件集成度高,而且具有较强的抗干扰能力和系统稳定性。以S1C33L11为微处理器构成的多任务系统在实时多任务系统中,特别在多媒体系统中,具有很高的性价比和应用前景。■
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』