DSP中断子程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DSP 作业:中断系统的应用

中断源扩展方法:

有八个中断源,分别表示为IR1,IR2,…,IR8,各个中断源均为边沿触发方式,C5402建立相应的中断系统。构建硬件中断系统如图,每两个一组相“与”后,分别既然如此4个外部中断接口INT0、INT1、INT2、INT3。没组分别将两条线接于HPI 端口,此时,HPI 端口作为I/O 口使用。

ST0:状态寄存器0,地址6

ST1:状态寄存器1,地址7

BH:累加器B 的高价位,地址C

BL :累加器B 的低阶位,地址B

BG :累加器B 的保护位,地址D

PSHD Smem ;将Smem 中的数据压入堆栈

PSHM MMR ;将MMR 中的数据压入堆栈

POPD Smem ;将数据从栈顶弹至Smem 中

POPM MMR ;将数据从栈顶弹至MMR 中

;外部中断INT0中断服务子程序:

INT0ISR:

PSHM ST0 ;保存寄存器,将寄存器的值压入堆栈

PSHM ST1 ;保存寄存器,将寄存器的值压入堆栈

PSHM BG ;将地址D 压入堆栈,之后类似

PSHM BH

PSHM BL

PORTR HPIPORT, *(hpi_var ) ;从HPI 口读数据并存储到*(hpi_var )所在的地址 STL *(hpi_var ), B ;将*(hpi_var )的低十六位放到B 中

AND #01B, B ;加法运算

IR1IR2

IR3

IR4

IR5IR6

IR7

IR8

BC IR2,ANEQ ;首先判别是否是IR1,是,则执行服务程序

;否,则跳至对IR2的判断

;扩展中断IR0的服务程序主体

IR2:

STL *(hpi_var),B

AND #010B,B

BC INT0END,ANEQ ;首先判别是否是IR1,是,则执行服务程序

;否,则跳至结束

;扩展中断IR1的服务程序主体

INT0ED:

POPM BL ;将数据从栈顶弹至BL中

POPM BH ;将数据从栈顶弹至BH中,以下类似

POPM BG

POPM ST1

POPM ST0

RETE

;外部中断INT1中断服务子程序:

INT1ISR:

PSHM ST0 ;保存寄存器

PSHM ST1

PSHM BG

PSHM BH

PSHM BL

PORTR HPIPORT,*(hpi_var) ;读HPI口

STL *(hpi_var), B

AND #0100B, B

BC IR4,ANEQ ;首先判别是否是IR3,是,则执行服务程序

;否,则跳至对IR4的判断

;扩展中断IR3服务程序主体

IR4:

STL *(hpi_var), B

AND #01000B, B

BC INT0END,ANEQ ;首先判别是否是IR4,是,则执行服务程序

;否,则跳至结束;

下面代码跟上面雷同,不一一赘述,中断有响应时间,对扩展的中断源来说,实际中断响应时间要算引导程序的时间,过多的中断源,堆栈深度增加,是压栈、弹栈操作频繁,堆栈大小应慎重考虑,不然出现程序混乱错误,若以后要在dsp上发展再深入考虑中断与堆栈的关系。

;扩展中断IR4的服务程序主体

INT1ED:

POPM BL

POPM BH

POPM BG

POPM ST1

POPM ST0

RETE

;外部中断INT2中断服务子程序:

INT2ISR:

PSHM ST0 ;保存寄存器

PSHM ST1

PSHM BG

PSHM BH

PSHM BL

PORTR HPIPORT,*(hpi_var) ;读HPI口

STL *(hpi_var),B

AND #010000B,B

BC IR6,ANEQ ;首先判别是否是IR5,是,则执行服务程序

;否,则跳至对IR6的判断

;扩展中断IR5的服务程序主体

IR6:

STL *(hpi_var),B

AND #01000B,B

BC INT2END,ANEQ ;首先判别是否是IR6,是,则执行服务程序

;否,则跳至结束

;扩展中断IR6的服务程序主体

INT2ED:

POPM BL

POPM BH

POPM BG

POPM ST1

POPM ST0

RETE

;外部中断INT3中断服务子程序:

INT3ISR:

PSHM ST0 ;保存寄存器

PSHM ST1

PSHM BG

PSHM BH

PSHM BL

PORTR HPIPORT,*(hpi_var) ;读HPI口

STL *(hpi_var),B

AND #010000B,B

BC IR8,ANEQ ;首先判别是否是IR7,是,则执行服务程序

;否,则跳至对IR8的判断

;扩展中断IR7的服务程序主体

IR8:

STL *(hpi_var),B

AND #01000B,B

BC INT3END,ANEQ ;首先判别是否是IR8,是,则执行服务程序

;否,则跳至结束

;扩展中断IR8的服务程序主体

INT3ED:

POPM BL

POPM BH

POPM BG

POPM ST1

POPM ST0

RETE

由INT0、INT1、INT2、INT3的中断优先级顺序可知,前面的中断扩展出来的中断源高于后面的。又由于软件中先查询的比后查询的有更高的优先级,可以得知扩展后的8个终端的优先级顺序由高至低一次为IR1、IR2、IR3、IR4、IR5、IR6、IR7、IR8。

相关文档
最新文档