实时数字信号处理 第3章 运行模式与程序控制.ppt

实时数字信号处理 第3章 运行模式与程序控制.ppt

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实时数字信号处理 第3章 运行模式与程序控制 概述 3种处理器模式 用户模式、监控模式、仿真模式 监控和仿真模式下无限制地使用内核资源 操作系统的内核代码一般工作于监控模式和仿真模式 用户模式下有限制地使用系统资源,提供了一个受保护的软件环境 应用程序工作于用户模式 内核程序控制器 每一个内核都有它自己的程序控制器 控制程序流,提供下条指令的地址 程序流 大部分是线性的,顺利执行 非顺序结构:循环、子程序、跳转、中断和异常 处理器操作模式与电源管理有关 动态电源管理模块 当前处理器模式识别 处理器的模式、状态及转换条件 用户模式 用户模式用于处理应用级代码 进入用户模式 复位后处于监控模式,从复位状态进入用户模式,必须执行 首先将返回地址放在RETI寄存器中 然后执行指令RTI 从复位状态进入用户模式的代码 P1.L = START; /* Point to start of user code */ P1.H = START; RETI = P1; RTI; /* Return from Reset Event */ START; /* Place user code here */ 激活用户模式的返回指令 执行返回指令前,返回地址必须先要被保存在相应的返回寄存器RETx中 如果ISR是可中断的,返回地址存放在堆栈中,从堆栈中弹出返回地址值到RETI,再执行RTI指令 处理器保持在用户模式下直到 中断、NMI或异常事件激活了监控模式,仿真事件激活了仿真模式,或复位事件激活了复位状态 监控模式 寄存器别名USP指向存储器中的用户堆栈指针 SP指向内核堆栈指针而不是用户堆栈指针 无操作系统环境 在无操作系统的环境里,应用程序代码保留在监控模式,复位信号撤销后,处理器通过执行复位事件实现初始化 保持处理器工作在监控模式而又允许低优先级事件得到处理的一种方法是建立和强制执行最低优先级中断(IVG15) 当使用RAISE 15强制触发了低优先级中断后,RETI就会被加载一个指向在IVG 15被执行之前的可执行的用户代码的地址 当RETI被加载后,就可执行RTI指令,从而从复位事件中返回 IVG 15的中断句柄可以设置成跳转到应用代码的开始处,且不附加RTI指令(与程序清单3-1比较),这样处理器将会保持在监控模式。 复位后维持在监控模式程序清单 P0.L = LO(EVT15) ; /* Point to IVG15 in Event Vector Table */ P0.H = HI(EVT15) ; P1.L = START ; /* Point to start of User code */ P1.H = START ; [P0] = P1 ; /* Place the address of start code in IVG15 of EVT*/ P0.L = LO(IMASK) ; R0 = [P0] ; R1.L = EVT_IVG15 0xFFFF ; R0 = R0 | R1 ; [P0] = R0 ; /* Set (enable) IVG15 bit in Interrupt Mask Register*/ RAISE 15 ; /* Invoke IVG15 interrupt */ P0.L = WAIT_HERE ; P0.H = WAIT_HERE ; RETI = P0 ; /* RETI loaded with return address */ RTI ; /* Return from Reset Event */ WAIT_HERE : /* Wait here till IVG15 interrupt is serviced */ JUMP WAIT_HERE ; START: /* IVG15 vectors here */ [--SP] = RETI ; /* Enables interrupts and saves return address to stack */ 空闲状态 空闲状态由一个有序的IDLE指令触发 作为IDLE指令的一部分,将自动执行一个SSYNC指令以清除内核和外部系统中所有的随机态以及暂态。 处理器将保持在空闲状态直到有一个外设或外部设备,例如SPORT,产生了一个中断服务请求。 要转换到空闲状态,可用程序清单3-3所示的代码。 程序清单3-3 转换到空闲状态 CLI R0 ; /* disable interrupts */ IDLE ; /* drain pipeline and send c

文档评论(0)

awang118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档