在单片机系统中,我们把产生中断的请求源称为中断源,它是指引起中断发生的事件、设备、部件。中断源可以是外部设备,如打印机、键盘、鼠标等,它们与计算机进行输入/输出数据交换时需向CPU发出中断请求。 一般计算机系统允许有多个中断源,当几个中断源同时向CPU发出中断请求,一般情况下CPU会优先处理最紧急的中断请求,计算机必须根据中断源的轻重缓急进行排队,这就必须给每个中断源的中断请求赋予一个中断优先级,以反映每个中断源的中断请求响应的优先程度。 单片机系统通常有多个中断源,经常会出现多个中断源同时申请中断的情况。但是CPU在每一个时刻,只能执行一个中断,此时,CPU将会根据中断源的重要程度执行中断。程序开发人员在程序设计的过程中需要根据任务的重要顺序安排一个中断响应的优先顺序,中断源的这种优先顺序常被称为中断优先级别,通常最重要的任务或者事件的级别最高,然后依次降级排列。 当多个中断源同时申请中断时,CPU会首先响应优先级最高的中断请求,在优先级最高的中断处理完成之后,再响应级别较低的中断。当CPU正在处理某个中断时,若出现了更高级的新的中断请求,CPU应能停止正在进行的中断处理,转去处理更高优先级的中断。这种挂起正在处理的中断而转去响应更高级别的中断称中断嵌套。如果新的中断请求是相同级别的或更低级别的,则CPU不予理睬,直到正在执行的中断服务程序运行完毕后才去响应新的中断请求。 中断响应可以分为以下几个步骤进行。 (1) 保护断点。保存下一条将要执行的指令的地址,就是把这个地址送入堆栈。 (2) 寻找中断入口。中断入口地址又称为中断矢量。根据8个不同的中断源所产生的中断,查找相应中断服务程序的入口地址,这个时候计算机的程序计数器PC就指向中断服务程序所在的地址。以上工作是由计算机自动完成的,与程序的设计无关。在这8个入口地址处存放有中断处理程序(这是程序编写时放在那儿的,如果没把中断程序放在那儿,就错了,中断程序就不能被执行到)。 (3) 执行中断处理程序。这个时候程序计数器PC就逐条执行中断服务程序,直到程序执行完成为止。 (4) 中断返回。执行完中断指令后,需要把原来保存在堆栈里面的地址返回来,这个时候程序计数器PC就重新指向原来的主程序,继续执行原来的程序。 |