ti开关电源设计软件 ti开关电源设计
摘要:从事开关电源和焊接电源设计与研发需要掌握哪些软件 随着DSP芯片功能的增强,已不再进行单纯的数字信号处理任务,而是作为一种MCU被广泛使用,控制板上各种资源,同时完成采集、计算、控制、通讯等任务。特别...
发布日期:2020-09-17从事开关电源和焊接电源设计与研发需要掌握哪些软件
随着DSP芯片功能的增强,已不再进行单纯的数字信号处理任务,而是作为一种MCU被广泛使用,控制板上各种资源,同时完成采集、计算、控制、通讯等任务。
特别是当使用了TCP/IP或其它复杂通讯协议时,没有一个实时多任务操作系统是很难进行任务调度的。
μC/OS-II作为一种源码公开的占先式实时多任务操作系统,总是执行处于就绪状态的优先级最高的任务,并支持Semaphore(信号量)、Mailbox(邮箱)、Message Queue(消息队列)等多种常用的进程间通信机制,是大多数高可靠嵌入式设备的首选。
2 开发环境简介 APCI5096是北京康拓工业电脑公司自行开发的一款DSP目标板,主要用于对模拟信号量的采样处理。
该目标板以TMS320VC32为CPU,同时具有完备的输入/输出功能,可以实现30通道、16位、300KSPS的模拟输入。
调试用编译器为TI公司的Code Composer "C3x-"C4x,版本是4.10版。
3 移植过程 3.1 μC/OS-II系统结构 图1说明了μC/OS-II的软硬件体系结构。
应用程序软件处于整个系统的顶层,只和μC/OS-II与处理器无关的代码以及μC/OS-II与应用相关的代码关联。
这样保证了应用软件的可重用性。
μC/OS-II与处理器无关的代码提供了μC/OS-II的系统服务。
利用这些API函数,应用程序可以进行内存管理、任务间的通信以及创建、删除任务等。
μC/OS-II与应用相关的代码提供了对μC/OS-II本身的裁减,并可根据实际需要进行任务数、任务栈的大小等设置。
大部分的μC/OS-II代码是使用ANSI C语言书写的,因此μC/OS-II的可移植性较好。
尽管如此,仍然需要使用C和汇编语言写一些处理器相关的代码。
移植工作需要改写的是与处理器相关的代码,包括三个文件:OS_ CPU.H、OS_ CPU_ C?C、OS_ CPU_ A?ASM。
重点是任务堆栈的初始化、任务切换时栈指针的调整。
3.2 OS_ CPU.H 在不同的处理器中有不同的字长,所以必须重新定义一系列数据类型以确保移植的正确性。
在OS_ CPU?H文件中应完成:数据类型的重新定义、堆栈数据类型的定义、堆栈增长方向的定义、临界区开/关中断的方法、任务切换函数OS_TASK_SW的宏定义。
(1)数据类型的声明:在VC33中所有的整型数据(char、short、int、long)为相同的类型,用32位表示。
浮点型数据(float、double)为相同类型,在VC33中用32位单精度浮点数表示。
数据类型的重定义: typedef unsigned char BOOLEAN; typedef unsigned char INT8U; typedef signed char INT8S; typedef float FP32; typedef double FP64; (2)VC33栈的数据宽度为32位,采用上面重定义过的数据类型进行定义,确保栈数据类型的一致性。
栈的数据类型声明: typedef INT32U OS_ STK; (3)μC/OS-II访问代码的临界区时需要先禁止中断,并且在访问完毕后重新允许中断。
μC/OS-II利用两个宏来禁止和允许中断,通过状态寄存器的中断使能位开关中断。
cregister unsigned int ST; /*声明CPU内部寄存器*/ #define OS_ ENTER_ CRITICAL() asm(“ANDN 2000H, ST "); /*清中断使能位*/ #define OS_ EXIT_ CRITICAL() asm(“OR 2000H, ST "); /*置中断使能位*/ 3.3 OS_ CPU_ C.C 在OS_ CPU_ C.C文件中主要完成的是OSTaskStkInit()函数,其余五个函数可以不进行处理。
OSTaskStkInit()函数完成任务栈的初始化,使得任务栈的结构看起来如同在任务执行过程中发生过一次中断并将所有寄存器保存到堆栈一样。
不同的编译器在函数调用时会有不同的入栈方法,如:参数和返回地址入栈顺序、参数之间入栈的顺序、参数利用寄存器还是堆栈保存等。
在具体实现时还需要根据编译器的要求进行调整。
CCS函数调用时堆栈规则为:先将参数从左往右入栈、然后是函数返回地址入栈。
依照此规则设计任务栈初始结构如图2。
VC33共有28个寄存器,程序中应将寄存器全部入栈,在OSTaskStkInit中实现: { OS_ STK *stk; /*定义栈的数据结构*/ opt=opt; stk=(OS_ STK *)ptos; /*装入栈顶指针*/ *stk=(OS_ STK)pdata; /*参数入栈*/ *++stk=(OS_ STK)task; /*任务返回地址*/ *++stk=(OS_ STK)task; /*中断返回地址*/ *++stk=(OS_ STK)0x2000; /*状态寄存器,开中断*/ 其余CPU寄存器全部入栈,并初始化为0 } 3.4 OS_ CPU_ A.ASM 在OS_ CPU_ A?ASM文件中要求用户编写四个简单的汇编语言函数:OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()、OSTickISR()。
这四个函数具有完全相同的公共部分:寄存器入栈和寄存器出栈。
只要按照上面设计好的栈结构进行就可以了。
注意的是VC33的R0到R7是扩展精度寄存器,具有40位。
在入栈和出栈时均需要用两句话完成,如下: 入栈: 出栈: PUSH R0 POPF R0 PUSHF R0 POP R1 而OSIntCtxSw函数具有特殊部分,该函数用于从中断返回时进行任务切换,由于在调用_ OSIntCtxSw函数前已经发生了中断,中断服务程序已经将CPU寄存器保存到堆栈中了,所以此处不再进行寄存器保存。
同时还要进行栈指针的调整,去掉堆栈中一些不需要的内容,然后再将寄存器全部出栈。
由于该函数是μC/OS-II中唯一的与编译器相关的函数,所以在移...
- 上一篇:pe下苹果系统识别软件下载
- 下一篇:微信软件包 微信6.0版本官方网站