第3章目录 口1.简介 口9.异常 ▣2.ARM7TDMI ▣10.中断延迟 ▣3.ARM7TDMI的模块和 ▣11.复位 内部框图 口12.存储器及存储器映射 口4.体系结构直接支持的 I/O 数据类型 ▣13.寻址方式简介 ▣5.处理器状态 口14.ARM7指令简介 ▣6处理器模式 口15.协处理器接口 口7.内部寄存器 口16.调试接口简介 口8.程序状态寄存器 ▣17ETM接口简介
第3章 目录 ❑1.简介 ❑2.ARM7TDMI ❑3.ARM7TDMI的模块和 内部框图 ❑4.体系结构直接支持的 数据类型 ❑5.处理器状态 ❑6.处理器模式 ❑7.内部寄存器 ❑8. 程序状态寄存器 ❑9.异常 ❑10.中断延迟 ❑11.复位 ❑12.存储器及存储器映射 I/O ❑13.寻址方式简介 ❑14.ARM7指令简介 ❑15.协处理器接口 ❑16.调试接口简介 ❑17.ETM接口简介
3.9异常 ·简介 只要正常的程序流被暂时中止,处理器就进入 异常模式。例如响应一个来自外设的中断。在处理 异常之前,ARM7TDMI内核保存当前的处理器状 态,这样当处理程序结束时可以恢复执行原来的程 序。 如果同时发生两个或更多异常,那么将按照固 定的顺序来处理异常,详见“异常优先级”部分
3.9 异常 • 简介 只要正常的程序流被暂时中止,处理器就进入 异常模式。例如响应一个来自外设的中断。在处理 异常之前,ARM7TDMI内核保存当前的处理器状 态,这样当处理程序结束时可以恢复执行原来的程 序。 如果同时发生两个或更多异常,那么将按照固 定的顺序来处理异常,详见“异常优先级”部分
异常入口/出口汇总 之前的状态 异常或入口 返回指令 Thumb 备注 ARM R14_x R14_x BL MOV PC,R14 PC+4 PC+2 此处PC为 SWI MOVS PC,R14_svc PC+4 PC+2 BL,SWI,为 未定义的指令 MOVS PC,R14 und PC+4 PC+2 定义的指令取 指或预取指中 预取指中止 SUBS PC,R14 abt,#4 PC+4 PC+4 止指令的地址 快中断 SUBS PC,R14 fiq,#4 PC+4 PC+4 此处PC为由于 FIQ或RQ占先 而没有被执行 中断 SUBS PC,R14 irg,#4 PC+4 PC+4 的指令的地址 此处PC为产生 数据中止 SUBS 数据中止的装 PC,R14_abt,#8 PC+8 PC+8 载或保存指令 的地址。 复位时保存在 往意:复MOV5尤C,R145vc”是指在雀理模式执行MOVS PC,R14④6vcM@ PC,R14und、“SUBS PC,R14abt,4”等指令也是类似的。 不可预知
异常入口/出口汇总 异常或入口 返回指令 之前的状态 备注 ARM R14_x Thumb R14_x BL MOV PC,R14 PC+4 PC+2 此处PC为 BL,SWI,为 定义的指令取 指或预取指中 止指令的地址 SWI MOVS PC,R14_svc PC+4 PC+2 未定义的指令 MOVS PC,R14_und PC+4 PC+2 预取指中止 SUBS PC,R14_abt,#4 PC+4 PC+4 快中断 SUBS PC,R14_fiq,#4 PC+4 PC+4 此处PC为由于 FIQ或IRQ占先 而没有被执行 中断 的指令的地址 SUBS PC,R14_irq,#4 PC+4 PC+4 数据中止 SUBS PC,R14_abt,#8 PC+8 PC+8 此处PC为产生 数据中止的装 载或保存指令 的地址。 复位 无 — — 复位时保存在 R14_svc中的值 不可预知。 注意: “MOVS PC,R14_svc”是指在管理模式执行MOVS PC,R14指令。“MOVS PC,R14_und”、“SUBS PC,R14_abt,#4”等指令也是类似的
3.9异常 ·异常的入口和出口处理 如果异常处理程序已经把返回地址拷贝到堆栈, 那么可以使用一条多寄存器传送指令来恢复用户寄 存器并实现返回。 中断处理代码的开始部分和退出部分 SUB LR,LR,#4 ;计算返回地址 STMED SP!,{R0-R3,LR};保存使用到的寄存器 LDMFD SP!,{R0-R3,PC}N;中断返回
3.9 异常 • 异常的入口和出口处理 如果异常处理程序已经把返回地址拷贝到堆栈, 那么可以使用一条多寄存器传送指令来恢复用户寄 存器并实现返回。 SUB LR,LR,#4 ;计算返回地址 STMFD SP!,{R0-R3,LR} ;保存使用到的寄存器 . . . LDMFD SP!,{R0-R3,PC}^ ;中断返回 中断处理代码的开始部分和退出部分
3.9异常 ·异常的入口和出口处理 注意:中新返回指令的寺存器列表(其中必须包括 PC)后的 “人”特号表示这是一条特殊形式的指令。 这条指令在从存储器中装载PC的同时(PC是最后 恢复的),CPSR也得到恢复。这里使用的堆栈指针 SP(R13)是属于异常模式的寺存器,每个异常模 式有自己的堆栈指针。这个堆栈指针应必须在系统 启动时初始化。 LDMFD SP!,(RO-R3,PC 中断返回
如果异常处理程序已经把返回地址拷贝到堆栈, 那么可以使用一条多寄存器传送指令来恢复用户寄 存器并实现返回。 中断处理代码的开始部分和退出部分 3.9 异常 • 异常的入口和出口处理 SUB LR,LR,#4 ;计算返回地址 STMFD SP!,{R0-R3,LR} ;保存使用到的寄存器 . . . LDMFD SP!,{R0-R3,PC}^ ;中断返回 注意:中断返回指令的寄存器列表(其中必须包括 PC)后的“^”符号表示这是一条特殊形式的指令。 这条指令在从存储器中装载PC的同时(PC是最后 恢复的),CPSR也得到恢复。这里使用的堆栈指针 SP(R13)是属于异常模式的寄存器,每个异常模 式有自己的堆栈指针。这个堆栈指针应必须在系统 启动时初始化