5402的存储器、系统启动与中断、时钟

2019-07-18 13:42发布

一、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。

















友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
一灯大神
2019-07-18 20:45
4. 中断向量表



中断向量表实际上是一段长度为0x0080的汇编指令,上表中的每一个中断都在中断向量表中对应一段地址,长度为0x0004,在每个中断对应的长度位0x0004的地址空间上存放跳转指令,跳转的目的地址对应该中断的服务程序(ISR),当CPU响应一个中断时,程序指针(PC)就会跳到该中断对应的中断向量表地址,执行跳转指令;



下面这段程序就是一个中断向量表的例子,注意:跳转指令“B pmad”是一个双字指令,占据两个16Bit的空间:
[html] view plain copy
print?

  •      .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  
[url=][/url]

     .sect   ".vectors"         ;定义中断向量空间     .ref     _c_int00           ;定义C语言程序入口中断入口地址标号     .ref     _Mcbsp_AD_ISR_tint0     ;定义串口Mcbsp、A/D转换、中断服务程序、定时器0中断入口地址标号reset:     B   _c_int00      ;硬件复位中断,直接跳转到程序入口地址_c_int00              NOP              NOPnmi:       RETE          ;不可屏蔽中断              NOP              NOP              NOPsint17   .space  4*16       ;软件中断sint18   .space  4*16sint19   .space  4*16sint20   .space  4*16sint21   .space  4*16sint22   .space  4*16sint23   .space  4*16sint24   .space  4*16sint25   .space  4*16sint26   .space  4*16sint27   .space  4*16sint28   .space  4*16sint29   .space  4*16sint30   .space  4*16int0:   RETE                    ;外部中断int0          NOP          NOP          NOPint1:   RETE                    ;外部中断int1          NOP          NOP          NOPint2:   RETE                    ;外部中断int2          NOP          NOP          NOPtint0:  B        _Mcbsp_AD_ISR_tint0  ;定时中断0,直接跳转到中断地址标号_Mcbsp_AD_ISR_tint0          NOP          NOPrint0:  RETE                   ;串口0接收中断          NOP          NOP          NOPxint0:  RETE                  ;串口0发送中断           NOP           NOP           NOPdmac0:  RETE               ;直接存储器存取通道0中断              NOP              NOP              NOPtint1:  RETE                   ;定时器1中断              NOP              NOP              NOPint3:   RETE                   ;外部中断3              NOP              NOP              NOPhpint1:   RETE               ;主机并口中断              NOP              NOP              NOPrint1:   RETE                  ;串口1接收中断              NOP              NOP              NOPxint1:   RETE                 ;串口1发送中断              NOP              NOP              NOPdmac4:   RETE              ;直接存储器存取通道4中断              NOP              NOP              NOPdmac5:   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定义中断服务程序,这样编译器会自动产生保护现场和恢复现场的代码;



下面是一段中断服务程序的代码:
[html] view plain copy
print?

  • _KEY:  
  •         PSHM        ST0         ;保护现场  
  •         PSHM        ST1  
  •         PSHM        AH  
  •         PSHM        AG  
  •   
  •         ……                     ;执行中断服务  
  •   
  •         POPM        AG           ;恢复现场  
  •         POPM        AL  
  •         POPM        AH  
  •         POPM        ST1  
  •         POPM        ST0  
  •         RETE                     ;返回  
[url=][/url]

_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引脚如下表所示:









一周热门 更多>