uCOSII在DSP芯片TMS320F281x上的移植.doc
文本预览下载声明
uC/OS_II在DSP芯片TMS320F281x上的移植uC/OS_II嵌入式实时系统简介
uC/OS是一个多任务的实时性嵌入式操作系统,它的实时性内核源码是免费公开的,它同时提供了内存管理的接口和函数,因而uC/OS得到了广泛的应用。uC/OS的绝大部分采用ANSI C写成,具有很强的移植性,uC/OS可以移植到大多数的8位,16位,32位甚至64位微处理器、微控制器及数字信号处理器上。
uC/OS正常运行需要处理器满足以下条件:1)处理器的C编译器能够产生可重入的代码;2)用C语言就可以打开或关闭中断;3)处理器支持中断,并能产生定时中断;4)处理器支持能够容纳一定数量的硬件堆栈;5)处理器具有将寄存器、堆栈指针读出和存储到堆栈中的指令。[1]
uC/OS移植的过程比较简单,只需用户根据移植目标硬件修改相应的数据类型定义,并用汇编语言编写几个函数,具体的步骤如下:
1)根据处理器结构修改OS_CPU.H中的数据类型的定义;
2)根据处理器堆栈结构在OS_CPU.H中定义堆栈增长方向;
3)根据处理器指令在OS_CPU.H中定义三个宏;
4)在OS_CPU.C中实现六个简单的函数,实际上只需修改一个,其它的无需改动;
5)在OS_CPU.ASM中编写四个汇编语言函数;
6)开发其它用户自定义功能,如文件系统管理任务,通信管理任务,AD转换任务,PWM发生器管理任务等。
二、TMS320F281x系列数字信号处理器(DSP)简介
TMS320F281x(以后简称F281x)是TI公司最新一代的2000系列32位定点DSP控制器,是目前控制领域最先进的处理器之一。其频率高达150MHz,可以大大提高控制系统的控制精度和芯片的处理能力。F28x系列芯片提供浮点数学函数库,可以实现浮点运算。F2812集成了128KB的闪存,优化的事件管理器和可编程通用计数器,还包括了16通道的12位ADC转换器。片上集成了SCI,SPI,McBSP,URAT及eCAN等标准通信接口。[2]
移植uC/OS_II到F2812上需要注意的问题包括:
1)数据类型定义,对于F2812,所有的整数类型包括字符型,短整数和整数及其对应的无符号数类型都是相同的,都用16位的二进制数表示。长整数和无符号的长整数用32位的二进制数表示。用基2的补码表示有符号数。所有的浮点数包括单精度数,双精度数和长双精度数都是相同的表示方式即符合IEEE标准的单精度数;
2)F2812没有硬件堆栈,堆栈是在数据区存储器实现,堆栈增长方向是自下向上的,堆栈指针存储在专门的堆栈指针寄存器SP中;这一点于2407不同(2407有8个硬件堆栈,堆栈指针存储在AR1中);
3)F2812汇编指令集相对F2407有了很大的不同,寄存器数量也有所增加;
4)F2812的中断处理过程中,CPU会自动将部分寄存器内容压入堆栈,然后将返回地址压入堆栈,上述动作只需9个指令周期既可完成,因此具有较高的中断相应速度,这对提高系统的实时性有很大的帮助;
5)F2812有三个时钟计数器,其中Timer1和Timer2可以为实时操作系统使用,Timer0可供应用程序使用;
三、uC/OS_II在F281x上的移植
根据以上特点,可以编写uC/OS的移植程序函数,函数的编写方法可以参照文献[1]中的第八章,在此只列出于硬件有关的部分函数的移植源代码:
寄存器内容保存和恢复子程序:
;CPU响应中断时,按顺序自动保存下列寄存器内容:
;T,ST0,AH,AL,PH,PL,AR1,AR0,DP,ST1,DBGSTAT,IER,PC
;其它寄存器内容需要手工进行压栈保护
;恢复时只要安相反的顺序进行出栈操作即可[3]
_CTX_SAVE:
?????? pop??????? RPC??????????????? ;恢复RPC内容
?????? push????? AR1H:AR0H????????? ;保存其它寄存器内容
?????? push????? XAR2
?????? push????? XAR3
?????? push????? XAR4
?????? push????? XAR5
?????? push????? XAR6
?????? push????? XAR7
?????? push????? XT
?????? LRETR???????????????????? ;返回调用主程序
_CTX_REST:
?????? pop??????? XT???????????????? ;首先恢复其它寄存器内容
?????? pop??????? XAR7
?????? pop??????? XAR6
?????? pop??
显示全部