飞思卡尔中断处理
发表:2023-11-20 20:20:01 阅读:304

飞思卡尔中断处理:CPU响应中断,执行中断服务程序要顺序完成以下几步工作。

(1)保护现场:CPU响应中断时,自动将断点地址和标志寄存器的内容压人堆栈,为了能在中断服务结束后正确返回断点处使原来程序继续执行,在中断服务程序的开始还必须将中断服务程序中要使用的有关寄存器的内容压人堆栈,以免破坏其原有的内容,即保护现场。在飞思卡尔8位单片机中,当接收到中断请求时,CPU会结束当前指令,将PCL、PCH、X、A和CCR(条件寄存器)压人堆栈。即堆栈指针SP所对应的地址值将下降5。压栈示意图如图6—4所示。

在系统复位时,堆栈指针SP的初始值是Oxff。堆栈空间大小,在CodeWarrior中口J以通过途径Project Settings/Linker Files/Project.prm对STACKSIZE后的值进行修改,系统默认值是0x50,用户可以根据自己需要适当修改。一般情况下,在C语言编程中,当不定义程序的变量时,其最小值可设为0x00;堆栈空间最大可以设置为0x1 5f(因为不能超出RAM区的最大范围);如果有定义的变量,堆栈定义的空间不能小于0x06,否则调试中将出现错误。

堆栈指针SP的基准地址是由Z_RAM区的末地址和程序中所定义的变量字节数之和决定的,即SP基准地址=oxooff+所有定义的变量所占的字节数。堆栈空间的末尾地址应为基准地址再加上堆栈空间的大小,即堆栈的栈底,在这里需要注意,栈底地址不能超出RAM的末地址0x025f。当没有定义变量且STACKSIZE设置为0x00时,0xff即为栈底,若要用到堆栈,则堆栈空间向 区延伸。推荐用户使用默认值,如果定义变量过多,可以取ox80、oxl00 等

(2)关中断:CPU接收并响应一个中断后自动关闭中断,目的是在中断响应周期不被其他中断打扰,以便正确地转入相应的服务程序。但在中断服务阶段允许比当前正在被服务的中断级别更高的或更紧急的中断得到及时服务,那么如果有请求,CPU就将停止当前服务程序的执行而转去处理优先级更高的中断,这样就实现了中断的嵌套。

(3)查找中断源转向相应的中断服务程序:寻找中断源,识别中断服务程序的人口地址是中断赧务过程中重要的一个环节。

(4)关闭中断:使恢复现场的工作不受干扰。

(5)恢复现场:在中断处理完毕返回主程序前要将堆栈中的现场信息从堆栈中弹出,确保返回主程序后能继续正确地执行主程序。出栈示意图如图6—5所示。

(6)开中断:允许其他中断可以被CPU响应。

 

阅读更多请您关注;

飞思卡尔中断的概念

飞思卡尔中断机制

飞思卡尔中断请求

freescale代理

推荐品牌: