社区导航

 

搜索
查看: 440|回复: 0

[资料分享] TMS320C2x程序中断的保护和恢复

[复制链接]

3420

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2018-5-15 21:25 | 显示全部楼层 |阅读模式
下面是一个在XF引脚上产生一个10KHz正脉冲的TMS320C2x程序。

   PRD   .set     3
          IMR   .set     4。
                .text
                LDPK   0
                LALK   #999
                SACL   PRD         ;置定时器周期寄存器 = 999
                LACL   #8
                0R     IMR
                SACL   IMR         ;开放定时器中断
                RXF                ;XF 置低
                EINT               :开中断
        LO0P:  B      LOOP
复制代码

        ;定时器中断服务程序

TINT_ISR:
                SXF                ;XF置高
                SXF                ;XF置低
                EINT               ;开中断
                RET                ;中断返回。
复制代码

         TMS320C5X的定时器在TMS320C2X的基础上增加了一些控制功能,通过设置定时器控制寄存器TCR可以启动、停止定时器,也可以设定定时器分频比。定时器的中断频苹为
      f = CLKOUT1/[(TDDR+1)(PRD+1)]
复制代码
        式中,TDDR为分颇比,PRD为周期寄存器的值。
         C.中断的保护和恢复
         中断程序的状态保护和恢复只要根据中断程序中寄存器的使用情况进行保护和恢复即可。但是在保护两个状态寄存器ST0和STl时必须特别注意恢复时的先后顺序。TMS320C2X保护ST0和STl寄存器时使用专门的指令SST0和SST1,恢复时使用LST0和LST1,如果采用间接寻址进行保护,则保护和恢复的顺序无关紧要。但是如果采用直接寻址,则必须注意恢复时的先后顺序。下面是采用直接寻址方式时TMS320C2x中断保护和恢复的正确方法,程序中TST0、TST1等都是定义在数据空间第O页的存储单元。

ISR_SUB:
            SST0    TST0      ;保存ST0至TST0单元(强制DP = 0)
            SST1    TST1      ;保存ST1至TST1单元(强制DP = 0)
            LDPK    0         ;DP = 0
            SACL    TACCL     ;保存ACC的高16位
            SACH    TACCH     ;保存ACC的低16位,“
            ZAIS    TACCL     ;恢复ACC的低16位
            ADDH    TACCH     :恢复ACC的高16位
            LST1    TST1      ; 恢复 ST1
            LST0    TST0      ;恢复ST0
            EINT                 :中断使能。
            RETI                 ; 中断返回
复制代码

         如果将恢复的顺序颠倒过来,即首先执行LST0指令然后执行LST1指令,则数据页指针DP就不能正确地加以恢复。因为,数据页指针DP在状态寄存器ST0中,执行了LST0实际上就将当前数据页改为ST0中的DP值,再执行LSTl时,由于不像SST1那样强迫将DP置为0。因此数据页不对,恢复的ST1内容就不正确了。
         D.TMS320C5X矢量表的重定位
         TMS320C2x中断矢量表的地址固定在程序空间o地址开始的一段位置,固定中断矢量表地址在某些情况下会带来一定的麻烦。例如.当系统采用低速EPROM加高速RAM的存储器配置时,虽然程序可以在系统加电运行时从EPROM搬移至高速RAM运行,但由于中断矢量的地址是固定的,因此系统产生中断时,在中断矢量地址的跳转指令将不得不多运行几个指令周期。TMS320C5x作了改进,使中断矢量表的地址可以通过程序进行重定位,可以将矢量地址重新定位至程序空间中任何2K字页面的开始,如800H。重定位的方法是在PMST寄存器的IPTR域中设置对应的值,复位时,IPTR =0,中断矢量表的首地址为0H,若IPTR=1则首地址为800H。复位后执行下面的指令将矢量表地址重定位在800H:

  OPL  #800H,PMST
复制代码

         执行上述指令后,后面产生的中断将从新的矢量表中获取中断矢量,例如复位后定时器中断的矢量地址为BH,而新的矢量地址为808H。
         E.TMS320C5X等待状态产生的软件实现
         为了与低速的存储器或I/O设备接口, TMS320C2x需要采用硬件等待状态产生器实现,这使硬件设计复杂化。TMS320C5X支持硬件等待状态产生,也可采用软件控制等待状态的产生,从而使硬件设计简单化,节省了系统体积。软件可编程等待状态产生器是由两个16位等待状态寄存器PDWSR和IOWSR及一个5位控制寄存器CWSR控制的.
         F.TMS320C2x至TMS320C5X的软件移植
         TMS320C2x的指令集在源代码级是向上兼容的。因此,原则上说,TMS320C2X的程序经过TMS320C5X的汇编器重新汇编后就可以在TMS320C5x上运行。但是,由于TMS32l0C5x在串行口、定时器和全局控制等方面与TMS320C2x不同, 因此在TMS320C2x至TMS320C5X的软件移植时,还必须作-些迎要的修改,例如表2.2列出了有关串行口设置的一些指令的侈改。此外,还必须注意有些寄存器的地址也不相同。
TMS320C25    TMS320C50
RFSM    APL  #0FFF7H,SPC
SFSM    OPL  #8,SPC
RTXM    APL  #0FFDFH,SPC
STXM    OPL  #020H,SPC
FORT0    APL  #0FFFBH,PC
FORT1    OPL  #4,SPC


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 1/4 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-6-4 09:18 , Processed in 0.085719 second(s), 22 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表