DSP

TMS320C5402的存储器、系统启动与中断、时钟(PLL)

2019-07-13 18:38发布

一、TMS320C5402的存储器
        TMS320C5402共有192K bytes的可寻址存储空间。这192K bytes的存储空间分成3个独立的可选择空间,分别为:
        (1)64K bytes的程序存储空间;
        (2)64K bytes的数据存储空间;
        (3)64K bytes的I/O空间。

        TMS320C5402芯片内部包括DARAM、SARAM、ROM三种片内存储器。

        TMS320C5402所有的内部和外部程序存储器及内部和外部数据存储器分别统一编址。


TMS320C5402存储器配置结构如下图所示

        TMS320C5402的存储器结构与处理器工作方式状态寄存器(PMST)的设置有关,用户可以通过PMST中的3个控制位(MP/MC、OVLY和DROM)来配置存储器空间。

        TMS320C5402的程序存储空间采用扩展分页技术,整个程序存储空间(1M bytes/20根地址线)分成16页,每页共计64K bytes

        TMS320C5402有4K bytes的内部ROM。当MP/MC=0,这4K bytes的ROM被映射到程序空间的地址范围为F000H-FFFFH,其中高2K bytes ROM中的内容是由TI公司自定义的,这2K bytes程序空间(F800H-FFFFH)中包含如下内容:
        (1)引导程序。从串口、外部存储器、I/O口。主机接口进行自动加载引导程序。
        (2)256bytes u律扩展表
        (3)256bytes A律扩展表
        (4)256bytes正弦函数值查找表
        (5)中断向量表
        当处理器复位时,复位、中断及陷阱向量降被映射到程序空间的FF80H。复位后,这些向量可以被重新映射到程序存储空间的任何一页的开头。利用这种特性,可以很方便地将中断向量表从引导ROM中转移到其他存储区域,然后再从存储器映射中移走ROM。


二、TMS320C5402的中断系统
        1.软件中断与硬件中断
        C5402同时支持硬件中断和软件中断。硬件中断分为外部中断和内部中断两种。来自外部中断口的硬件中断有RS、NMI、INT0-INT3等6个中断源。来自片上的外设中断有TINT0、TINT1、HPIINT、BRINT0、BXINT0、BRINT1、BXINT1、DMAC0-DMAC6。
        软件中断由程序指令触发,包括:INTR、TRAP、RESET。
        INTR使用户可以用软件执行任何的中断服务程序。当ISR执行时,相应的IFR中的位被清零,INTM被置1.INTR指令是不可屏蔽的。
        TRAP指令与INTR唯一的不同在于TRAP指令不影响INTM位。
        RESET指令产生不可屏蔽的软件复位。MP/MC在软件复位时不被采样。使用RESET指令复位与硬件复位对IPTR和片上外设的初始化有所不同。RESET指令不受INTM位影响,但该指令执行时会将INTM位置1。

        2.不可屏蔽中断与可屏蔽中断
        不可屏蔽中断是指只要该中断信号产生了,CPU就一定会响应这个中断。这类中断包括所有的软件中断和两个外部硬件中断:RS和NMI。
        可屏蔽中断是指可以实用软件屏蔽或使能的中断。出RS和NMI之外,所有的硬件中断都是可屏蔽中断。


        3.中断优先级
        当多个硬件中断同时触发时,C5402按照优先级队列处理。当一个中断的优先级为1时,其拥有最高的优先级。对于C5402来说,有14个固定中断优先级,中断优先级如下表所示:
中断号     优先级     中断名称     中断地址     功能
0     1     RS/SINTR     0     复位(硬件/软件)
1     2     NMI/SINTR     4     不可屏蔽中断
2     —     SINT17     8     软件中断#17
3     —     SINT18     C     软件中断#18
4     —     SINT19     10     软件中断#19
5     —     SINT20     14     软件中断#20
6     —     SINT21     18     软件中断#21
7     —     INT22     1C     软件中断#22
8     —     SINT23     20     软件中断#23
9     —     SINT24     24     软件中断#24
10     —     SINT25     28     软件中断#25
11     —     SINT26     2C     软件中断#26
12     —     SINT27     30     软件中断#27
13     —     SINT28     34     软件中断#28
14     —     SIN29      38     软件中断#29
15     —     SIN30     3C     软件中断#30
16     3     INT0/SINT0     40     外部中断0
17     4     INT1/SINT1     44     外部中断1
18     5     INT2/SINT2     48     外部中断2
19     6     TINT0/SINT3     4C     定时器0中断
20     7     BRINT0/SINT4     50     串口0     接收中断
21     8     BXINT0/SINT5     54     串口0     发送中断
22     9     DMAC0/SINT6     58     DMA     通道0 中断
23     10     TINT1/DMAC1/SINT7     5C     定时器1中断(默认)/DMA通道1中断
24     11     INT3/SINT8     60     外部中断3
25     12     HPINT/SINT9     64     HPI     中断
26     13     BRINT1/DMAC2/SINT10     68     串口1     接收中断(默认)/ DMA通道2中断
27     14     BXINT1/DMAC3/SINT11     6C     串口1     发送中断(默认)/ DMA通道3中断
28     15     DMAC4/SINT12     70     DMA     通道4中断
29     16     DMAC5/SINT13     74     DMA     通道5中断
30∼31                          78∼7F     保留

         4.中断向量表
        中断向量表实际上是一段长度为0x0080的汇编指令,上表中的每一个中断都在中断向量表中对应一段地址,长度为0x0004。在每个中断对应的长度位0x0004的地址空间上存放跳转指令,跳转的目的地址对应该中断的服务程序(ISR)。当CPU响应一个中断时,程序指针(PC)就会跳到该中断对应的中断向量表地址,执行跳转指令。
        下面这段程序就是一个中断向量表的例子。注意:跳转指令“B pmad”是一个双字指令,占据两个16Bit的空间。
     .sect   ".vectors"         ;定义中断向量空间
     .ref     _c_int00           ;定义C语言程序入口中断入口地址标号
     .ref     _Mcbsp_AD_ISR_tint0     ;定义串口Mcbsp、A/D转换、中断服务程序、定时器0中断入口地址标号
reset:     B   _c_int00      ;硬件复位中断,直接跳转到程序入口地址_c_int00
              NOP
              NOP
nmi:       RETE          ;不可屏蔽中断
              NOP
              NOP
              NOP
sint17   .space  4*16       ;软件中断
sint18   .space  4*16
sint19   .space  4*16
sint20   .space  4*16
sint21   .space  4*16
sint22   .space  4*16
sint23   .space  4*16
sint24   .space  4*16
sint25   .space  4*16
sint26   .space  4*16
sint27   .space  4*16
sint28   .space  4*16
sint29   .space  4*16
sint30   .space  4*16

int0:   RETE                    ;外部中断int0
          NOP
          NOP
          NOP
int1:   RETE                    ;外部中断int1
          NOP
          NOP
          NOP
int2:   RETE                    ;外部中断int2
          NOP
          NOP
          NOP
tint0:  B        _Mcbsp_AD_ISR_tint0  ;定时中断0,直接跳转到中断地址标号_Mcbsp_AD_ISR_tint0
          NOP
          NOP
rint0:  RETE                   ;串口0接收中断
          NOP
          NOP
          NOP
xint0:  RETE                  ;串口0发送中断
           NOP
           NOP
           NOP
dmac0:  RETE               ;直接存储器存取通道0中断
              NOP
              NOP
              NOP
tint1:  RETE                   ;定时器1中断
              NOP
              NOP
              NOP
int3:   RETE                   ;外部中断3
              NOP
              NOP
              NOP
hpint1:   RETE               ;主机并口中断
              NOP
              NOP
              NOP
rint1:   RETE                  ;串口1接收中断
              NOP
              NOP
              NOP
xint1:   RETE                 ;串口1发送中断
              NOP
              NOP
              NOP
dmac4:   RETE              ;直接存储器存取通道4中断
              NOP
              NOP
              NOP
dmac5:   RETE              ;直接存储器存取通道5中断
              NOP
              NOP
              NOP
              .end
        TMS320C5402的中断向量地址由PMST中的9位中断向量地址指针IPTR和左移2位后的中断向量序号组成。例如:INT0=0001  0000B=10H,左移2位变成100  0000B=40H,IPTR=0001H,则中断向量地址为:0000 0000 1100 0000H=00C0H。如下图中断向量地址形成所示:


        硬件复位时,IPTR=1FFH,所以硬件复位后,中断向量表其实地址为0FF80H,这是无法改变的。软件运行时可以通过改变IPTR的内容重新安排中断向量表的地址。例如:IPTR=0001H,中断向量表移至0080H开始的程序存储空间。本实验系统软件仿真时,中断向量表映射到0080H开始的程序存储空间。

        5.终端操作流程
        (1)接收中断请求
          当产生一个中断请求时,不管CPU是否响应,IFR中相应的位都会被置1.当CPU响应该中断后,IFR中对应的标志位自动清零(不需要执行任何指令)。
        (2)如果驶入阿年中断和不可屏蔽中断,CPU会立即响应。如果是可屏蔽硬件中断,需要满足下面的条件,CPU才会响应。
          a.优先级最高
          b.INTM=0,CPU响应中断后,INTM自动置1(不需要执行任何指令)
          c.IMR中相应位为1
        (3)执行中断服务程序响应中断后,CPU会进行如下操作:
          a.将当前程序计数器PC的值(返回地址)压栈保存
          b.将被响应中断在中断向量表中对应的地址载入PC
          c.获取中断向量表中的指令
          d.执行中断向量表中的指令,该跳转指令使程序指向中断服务程序(ISR)
          e.执行中断服务程序(ISR),直到返回
          f.将返回地址从堆栈中取出,载入PC
          g.继续执行主程序

        6.中断服务程序(ISR)
        编写中断服务程序时,需要注意:在程序开始时保护现场,将中断服务程序中要改变的寄存器或变量压栈保存;程序结束时恢复现场,恢复寄存器或变量的原值。程序从ISR返回时,建议使用RETE指令。当用C语言编写中断服务程序时,要使用interrupt定义中断服务程序,这样编译器会自动产生保护现场和恢复现场的代码。
        下面是一段中断服务程序的代码:
_KEY:
               PSHM         ST0         ;保护现场
               PSHM         ST1
               PSHM         AH
               PSHM         AG

               ……                            ;执行中断服务

               POPM         AG           ;恢复现场
               POPM         AL
               POPM         AH
               POPM         ST1
               POPM         ST0
               RETE                          ;返回

三、时钟(PLL)
        TMS320C5402的输入时钟被二分频后输入到5402,或通过PLL电路倍频后输入到5402。复位状态使用输入时钟二分频模式,当设置PLL后,以设置PLL后的时钟继续运行。
        软件可编程锁相环可以工作在两种模式:
        PLL模式:输入时钟引脚(X2/CLKIN引脚)乘以1~31可能的比率,这需要使用PLL电路;
        DIV(divider)模式:输入引脚的时钟除以2或4,该模式想可以完全不适用PLL电路,减少功率。
        该软件可编程锁相环控制使用16位内存映射(地址0058h)时钟模式寄存器(CLKMD)。该CLKMD寄存器用来定义配置的锁相环时钟模块。复位后,该clkmd寄存器初始化一个预先确定的价值取决于只有在国家的CLKMD1−CLKMD3引脚如下表所示: