LF240x 内核提供一个不可屏蔽的中断 NMI 和 6 个按优先级获得服务的可屏蔽中断INT1至INT6。而这6个中断级的每一个都可被很多外设中断请求共享。通过中断请求系统中的一个两级中断来扩展系统可响应的中断个数。
为了让 CPU 能区分引起中断的事件,在每个外设中断请求有效时都会产生一个唯一的外设中断向量,保存于外设中断向量寄存器(PIVR )中。实际上有两个中断向量表,CPU 的向量表用于得到一级通用中断服务子程序(GISR);外设向量表指定外设中断子程序(SISR)。GISR 程序根据 PIVR 中的外设中断向量取值决定执行哪个
SISR。
3,中断响应过程
外设事件要引起CPU中断,必须保证:外设事件的中断使能为被使能,CPU内核级的6个可屏蔽中断中,相应中断也被使能。
在外设事件发生时,首先将其在外设中断控制器中的标志位置1,从而引起CPU
内核的INT1—INT6中的一个产生中断。中断服务过程中,其他可屏蔽中断将会自动被屏蔽,直到中断返回。
在软件中,当设置好相应中断标志后,开中断,进入等待中断发生的状态;外设(如定时器)中断发生时,首先跳转到相应中断高级的服务程序中(如:定时器1
会引起 INT2 中断),在相应 GISR 子程序中,取出 PIVR 的值,根据其值再转向相应的SISR;SISR程序在进行服务操作之后,应将本外设的中断标志位清除以便能继续中断,然后返回。
4,中断程序设计
用C语言设计中断服务程序需要用intterupt关键字修饰定义的中断服务函数,
例如,
void interrupt gptime1(void);
中断服务函数应尽量短小,在中断服务函数中 要注意对中断标志寄存器、中断屏蔽寄存器的设置,避免中断嵌套或中断丢失现象的发生。
四,实验程序
本实验设计的程序是在上一个实验基础上修改 得来,由于上一实验控制指示灯闪烁的延时控制是用循环计算方法得到的,延 时不精确也不均匀,采用中断方式可哈尔滨工业大学——DSP 原理与应用实验指导书
III-11
以实现指示灯的定时闪烁,时间更加准确。
对于定时器的周期寄存器为计数40000次产生1个中断,由于DSP工作在40MHz
主频,正好是 1ms 中断一次,所以在中断服务程序中计算中断 500 次时改变指示灯状态,实现指示灯亮0.5秒,再灭0.5秒,即每秒闪烁1次。
实验程序的工程中包含了两种源代码,主程序采用 C 语言编制利于控制,中断向量表在vector.asm汇编语言文件中,利于直观地控制存储区分配。在工程中只需将它们添加进来即可,编译系统会自动识别分别处理完成整合工作。
实验程序的 C 语言主程序中包含了内嵌汇编语句,提供一种在需要更直接控制
DSP状态的方法,同样的方法也能提高C语言部分程序的计算效率。
实验程序代码,
#include "2407c.h"
ioport unsigned int port000c;
#define T1MS 0x9c3f /* 9c3fH=40000-1 */
void interrupt gptime1(void); /* 中断服务程序,定时器计数T1MS次时中断调用 */
void gp_init(void); /* 定时器初始化 */
unsigned int uWork,nCount,uWork1;
int * pf;
int j = 0;
main()
{
int i;
nCount=0;
asm(" setc INTM"); /* 关中断,进行关键设置时不允许发生中断,以免干扰 */
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-29489-77.html
太完美了
那里的岛礁有许多在自然状况下是当涨潮时处于海面以下的
感觉千玺和里面的小王子形象好贴近