文档详情

DSP 中断系统与定时器.ppt

发布:2018-01-10约5.19千字共38页下载文档
文本预览下载声明
DSP器件及应用 厦门理工学院电子系 陈金西 第四章 中断系统与定时器 中断系统 定时器 §4.1 中断程序的编写 §4.1.1 中断源 54x DSP共有30个中断源,编号分别为0~29。 1、分类 软件中断:采用INTR、TRAP、RESET指令产生的中断,不可屏蔽, SINT17~SINT30 ; 硬件中断:由外部信号或片内外设产生的中断。 硬件中断分类: 外部中断:外部信号触发,INT0~INT3、RS、NMI 内部中断:片内外设产生信号触发,定时器、串行口、HPI、DMA等 不可屏蔽中断:RS(芯片的复位引脚)、NMI(芯片的外中断引脚)、软件中断(SINT17~SINT30)。 可屏蔽中断:剩余的都为可屏蔽中断。 2、中断向量地址 产生 16位的中断向量地址组成:PMST中的IPTR(9位)加上7位的中断向量地址(由中断向量序号(0-31)左移2位生成的)。如: 中断向量的移位 中断向量的低7地址分别为00H、04H~7F,相邻两个相差4个字。 中断向量的高9位是IPTR的值决定的。 当IPTR=1111 1111 1时,中断向量的16位地址为FF80H~FFFFH. 当IPTR=0000 0000 0时,中断向量的16地址为0000H~007FH. 所以,中断向量的地址是可以平移的,只要在程序中改变IPTR的值即可。 复位 复位时IPTR=1111 1111 1,所以RS的中断矢量地址只能为FF80,也就是复位时,DSP一定是从FF80H处开始执行指令。 3、中断源表(向量表) §4.1.2 中断寄存器 1、中断标志寄存器IFR(置1为中断请求) 2、中断屏蔽寄存器IMR §4.1.3 中断程序编写 1、中断的初始化(可屏蔽的硬件中断) 关闭所有中断:设置ST1的INTM=1。 使能相应的中断:设置IMR相应位=1。 对IFR写入1,清除所有中断请求; 开所有中断:设置ST1的INTM=0。(所有中断使能)。 2、中断矢量表 DSP产生中断时,要使得程序能跳转到中断服务子程序执行,则需要在中断矢量处放置一条跳转指令。如: RS B _c_int00 (占2个字) 对于多个中断时,注意地址的对应。如系统中断有:中断号0(RS)、中断号3(SINT18)。跳转指令如下: RS B _c_int00 .word 0,0,0,0,0,0,0,0,0,0 SINT18 B _sint18 .sect .vectors RS B _c_int00 NOP NOP NMI B _NMI_INT NOP NOP SINT2 B _SOFT_INT NOP NOP SINT3 B _SOFT_INT NOP NOP SINT4 B _SOFT_INT NOP NOP SINT5 B _SOFT_INT NOP NOP 3、中断服务程序 void interrupt c_int01() { } §4.1.4 中断程序应用举例 例:请用C语言编程实现TMS320C5402的中断号为4的软件中断程序,并在中断服务子程序里实现5个16位的无符号数相加,并将结果存放在y中,要求写出完整项目所需的所有程序。 1、vectors.asm文件编写 .ref _c_int00, _NMI_INT,_SOFT_INT,_add_INT .sect .vectors RS B _c_int00 NOP NOP NMI B _NMI_INT NOP NOP SINT2 B _SOFT_INT NOP NOP SINT3 B _SOFT_INT NOP NOP SINT4 B _add_INT 2、C程序softint.c编写 Int y; main() {init_5402(); asm(“ INTR 4 ”); //响应4号中断 asm(“ nop ”); } Void interrupt add_int() {y=add(1,2,3,4,5); } Void interrupt NMI_INT() {return;} Void interrupt SOFT_INT() {return;} Int add(int x1,int x2,int x3,int x4,int x5) {int y; y=x1+x2+x3+x4+x5; return y; } 练习: 当INT0引脚出现中断请求时,要求DSP能响应该中断,并使得XF引脚状态取反。 4.2 定时器 C5402内部有2个16位定时器,C5416内部有1个16位定时器,是减计数器。定时器的结构都是一样的,每个定时器有3个控制寄存器,它们是: TIM
显示全部
相似文档