微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > TMS320C2XX的软件堆栈

TMS320C2XX的软件堆栈

时间:09-26 来源:互联网 点击:
随着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指令,这样在中断比较多的场合就不致于发生堆栈溢出。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top