打印

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

[复制链接]
1069|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一灯大神|  楼主 | 2017-4-12 09:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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


















相关帖子

沙发
一灯大神|  楼主 | 2017-4-12 09:27 | 只看该作者
二、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
保留















使用特权

评论回复
板凳
一灯大神|  楼主 | 2017-4-12 09:28 | 只看该作者
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引脚如下表所示:










使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

65

主题

112

帖子

2

粉丝