随着 DSP 运行速度越来越快和DSP芯片价格的越来越低,使DSP在各个领域的应用也越来越广泛。相比于常用的8031系列单片机来说,DSP的速度是8031的几十倍。因此,以前要用工控机才能实现的系统,现在便可以用DSP来实现了。
在Texas Instrument(美国德州仪器,简称TI)推出的系列DSP中,C2XX可以广泛应用于各种控制系统中,尤其适用于电机控制。在C2XX系列中,LF2406/LF2407是应用比较广泛的一种DSP芯片,它具有32k字的FLASH程序存储器,可以通过串行口在线编程。片内共有三部分内存:其中60H-7FH共有32个字,200H-3FFH共有512个字,800H-0FFFH共有2048个字。
C2XX的内存是按页来组织的,访问内存要先指定页指针(DP),然后在指令中再指定页内地址。每页只有128个字,直接寻址指令只能访问当前页内的数据。C2XX系列芯片具有8个辅助寄存器(AR0~AR7),这8个辅助寄存器都是16位的,可以访问64k的存储器空间。因为在任何程序片段内都有可能要临时保存数据,因此,为了不破坏页指针,用辅助寄存器作为堆栈指针是比较方便的。根据8031的编程习惯,一般把AR0和AR1作为间接寻址指针,把AR6和AR7作为计数单元,因此将AR5作为堆栈指针,定义如下:
SP.set AR5
由于C2XX的内存是不连续的,因此,把 软件堆栈 设在只有32字的60H-7FH段比较合适。因为有32个字再加上硬件堆栈本身的8个字,总共可以有40个字,这对绝大多数应用来说已经足够了。
在实际应用中,随时都有可能要临时保存数据, 特别是在中断程序中,要保存的内容更多。中断发生时硬件会自动保存当前的执行地址,然后跳转到中断向量所指的地址执行,执行完成后由RET指令返回到中断发生前的地址继续执行。在中断服务程序(ISR)中,一般都要保存ACC的值(32位)、当前数据页指针以及一些状态位。
为了方便使用,首先应定义两个宏:
其中PushRegs用于保存寄存器的值,而PopRegs用于恢复寄存器的值。应用举例如下:
如将Timer 3作为一般的1ms定时器使用,那么,中断服务程序如下:
因为该硬件只有8级堆栈,所以在编写程序时,应尽量使用跳转指令而少用CALL指令,这样在中断比较多的场合就不致于发生堆栈溢出。
参考文献
1.TMS320F/C24x DSPControllers Reference Guide,CPUand Instruction Set,1999
2.TMS320C1X/C2X/C2XX/C5XAssembly LanguageTools User Guide,1995
本文关键字:软件 DSP/FPGA技术,单片机-工控设备 - DSP/FPGA技术
上一篇:MCU需要改进