MSP430高级调试应用EEM.doc_第1页
MSP430高级调试应用EEM.doc_第2页
MSP430高级调试应用EEM.doc_第3页
MSP430高级调试应用EEM.doc_第4页
MSP430高级调试应用EEM.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微控技术论坛翻译义工文章www.MMSP430 的 EW430 编译器高级调试使用微控设计网翻译: 杨鹏云 昆明理工大学整理: DC 微控技术论坛版主原文: Texas Instruments SLAA263B.pdf此翻译只供参考,一切以原文为准.最后更新日期 2008.5.23.本文介绍了 MPS430 增强型仿真模块(EEM)高级调试的使用以及如何运用 IAR Embedded Workench 3.3版本软件调试。EEM 高级调试功能支持高精度模拟和高速数字调试,为调试环境配置最大控制,通过嵌入式系统显示其功能。高速和测试性设计的技巧得到论证。目录1、 介绍2、 引言3、 设置中断4、 状态存储5、 序列触发器6、 高级触发设置7、 时钟控制器8、 主意事项9、 仿真模块执行10、 参考文献附录 A 例子Page 1 of 14微控设计网: EW430 高级调试使用 EEM V1.0www.M微控设计网1、 介绍MSP430 基于闪存的微控制器,对片系统(SoC)进行逻辑调试。这一增强型仿真模块( EEM )提供不同标准的调试功能,这取决于该设备驱动程序的使用。这个应用程序显示,如何用 EEM 来解决典型的调试问题。常用功能如下:2-8 个硬件断点多层断点在读/写指定地址设置断点读/写范围保护至存储器所有定时器和计数器能停止(依靠驱动)PWM(脉宽调制)产生不停止的仿真控制单步执行输入并实时运行支持所有低功耗模式依靠数据控制支持,如温度、电压注意:所有例子的应用程序基于 IAR 3.21 和 3.30 版本,许多其他调试上有着相似的功能。为详细了解使用其他调试工具,看到该用户指南的专用调试器。2、 触发器进程控制在由 MSP430 单片机系统 EEM 构成的触发器中,是显示某一进程发生的内部信号。这些触发器可能被看作简单的断点,但它也有可能两个或两个以上的触发器结合起来检测复杂的进程。一般, 触发器可用于控制 EEM 模块的以下功能:断点状态存储器序列发生器对于两个类型不同的触发器,一个为地址和数据总线,另一个为 CPU 寄存器。也可能定义在触发器工作的状态下,包括读,写,或取指令。这些触发器也可以结合起来,如果某一特殊值写入一个专门的地址,就触发一个信号。3、 断点使用触发器来设定断点,该系统允许定义多种断点。3.1 地址断点简单的代码断点触发某个值(指令地址)与 CPU 取得的信号的地址总线相结合 。使用触发器来设置地址断点。3.2 数据断点数据断点另一个断点类型,使用它能配置一到两个触发器。使用数据跳变可用来检查地址总线(内存地址的变量)上与读/写信号相结合的某一值。它也可以放大,如果特殊值是读或写入该地址,此时仅发生停止。该值此时检查数据总线。一个数据断点不赋值,一个是用来触发,以及另一个数据断点赋值,两个触发器共同使用。Page 2 of 14微控设计网: EW430 高级调试使用 EEM V1.0www.M微控设计网变量名称比较方式存取类型变量值(如果该值使用,使用第二个触发器)图 1 设置断点对话框3.3 寄存器断点同样的观察方法,可用于 CPU 寄存器。如果用汇编程序写入, 程序员可以完全控制寄存器的使用,这可能是一个非常有力的工具。专用寄存器可能被用于一个变量或系统状态标记。寄存器是非常关键并要仔细观察堆栈指针。如果有问题的程序允许堆栈进入数据区运行,这往往是很难找到问题并正常调试其功能,由于问题可能会改变,每次程序执行的时间。一个简单的微控制器断点停止时,堆栈指针指到某个值或下一个值,可以很容易帮助检测问题。设置该触发器,使用寄存器中的一个触发器。Page 3 of 14微控设计网: EW430 高级调试使用 EEM V1.0www.M微控设计网寄存器名称比较方式存取类型寄存器值图 2 寄存器断点设置对话框注意:当使用 msp430x 的 CPU ( msp430fg46x ) ,由于改进对 msp430x 的 CPU 的速度,需要观察第二个断点堆栈指针( SP ),在 MAB(内存分配块)写入存取与 SP 限制的地址来设置条件断点。3.4 计时寄存器计时寄存器在设置断点对话框可以检查限制到寄存器的某一位(根据计时),例如,如果只有某一点已设置/重置在指定的寄存器,可以用此来检查。3.5 断点范围断点范围是使用专有存储器检查特有的范围,具备的条件如下:写入中断 flash检查程序是否正在执行,写访问写入 flash 存储区。在许多情况下,此操作是不允许的(或是仅在特殊情况下允许),因此,可视为一个写错误。Page 4 of 14微控设计网: EW430 高级调试使用 EEM V1.0www.M微控设计网读/写无效存储器中断此测试常用于估值,如果在执行程序时,在无效存储器范围内进行数据访问。取指令范围中断如果从未存储程序的存储地址取指令,此断点可以停止 CPU数据范围中断如果值在数据总线制定的范围就触发信号。如果该值在一定的范围之内,可以用寄存器来查看,使用此功能数据范围的触发要与对变量地址或序列触发器来触发读或写,否则,在数据总线范围的任意值都可以停止 CPU(如:一个指令)。起始范围访问 MAB/MDB终止范围/长度存取类型图 3 设置断点范围4 状态存储状态存储可以用来存储地址总线和数据总线上的信息。除此以外,它也可以存储CPU的标志位,例如读/写或指令提取。状态存储缓存应用八位的输入。这样灵巧的系统结构使得状态存储可以非常有效率地记录下所需的信息,因此那些需要被保存的信息可以方便地存储和提取。Page 5 of 14微控设计网: EW430 高级调试使用 EEM V1.0www.M微控设计网4.1 错误配置一个可行的默认配置可以是最后几个循环的追踪命令。为赋予这个功能,选择状态存储的指令提取并且赋予缓存限制选项,这可持续存储操作指令。结果可以在状态存储控制窗口进行查看。在程序执行操作时,状态存储控制窗口的数据可以上传,这样可以及时给出关于正确程序执行和程序数据的反馈。激活状态存储;定义缓存被限制或被填满一次触发器激活定义信号触发状态存储器应用于状态存储的触发器列表4.2 实时监控状态存储系统的一个特殊结构允许实时监控执行。对变量读写触发器的跟踪创建了实时监控。变量实时监控可以根据以下的步骤建立:在断点菜单建立变量状态存储触发器的读或写(注意:触发器不能用断点):在状态存储器对话框中,以下的选项必须被设置:缓存限制存储应该触发在触发器中Page 6 of 14微控设计网: EW430 高级调试使用 EEM V1.0状态存储器定义了www.M微控设计网是否限制缓冲器或设置触发器的作用 数据保存在触发器内 触发器存取相关变量仅加载一次图 5 实时的监控设置注意:当使用多变量监控时,分配了地址的变量常常被抓获,正如它在包装后被其他实体写入状态存储缓冲器之后它可能不被调试者抓获5、 触发序列器触发序列器定义了在允许中断或是状态存储器之前某个触发信号的序列。内部触发序列器有以下特点:4 个状态(状态 0状态 3)每两个状态转换(触发 a 和 b 转换)每个转换程序能够移到任意状态触发序列器总是从状态 0 开始,执行到状态 3 产生一个动作,如果状态 1 和状态 2 不需要此功能,它们可能迂回。5.1 简单触发序列发生器通过这个简单的对话框,将建立一个线性程序序列,它必须在一个触发被接受之前执行,这个触发用于一个中断或者状态存储事件。如果在程序中某个只能在一个给定的顺序之后重现的事件已经被执行的话,它是很有用的。Page 7 of 14微控设计网: EW430 高级调试使用 EEM V1.0www.M微控设计网允许序列发生器设置动作状态 0状态 0 的转换触发触发之后的下一个状态图 简单触发序列发生器对话框5.2 高级触发序列发生器高级对话框可以对序列发生器进行全面配置。如果一个触发可以激活一个序列,但是另一个触发可能再次重置或者撤消这个序列的话,这将非常有用。这种情况可能出现在通信例程中,只有在收到某些命令之后,在传送代码中的一个触发才能停止 CPU,但是如果出现第三个触发,则应再次等待第一个触发。允许序列发生器状态 0 的转换触发设置动作触发之后的下一个状态状态 0图 高级触发序列发生器对话框Page 8 of 14微控设计网: EW430 高级调试使用 EEM V1.0www.M微控设计网6 高级触发器选项6.1 手动组合触发器通过断点组合器对话框(仿真器/高级菜单),两个或更多不相关的触发器可以被组合到一起。当使用手工触发器组合定义一个触发器时,应该考虑到以下几点:ll一个触发器(子触发器)通过 AND 组合逻辑被添加到另一个触发器(主触发器)。此时,主触发器就为两个触发器的组合。在系统中,子触发器保持不变。设置在子触发器上的中断阻止主触发器的执行。这意味着,在大多数情况下,对于所有子触发器应该禁止中断事件。6.2 DMA 上的触发器对于通过 CPU 进行存储器访问主机和通过 DMA 进行存储器访问主机来说,触发器可能是不同的。如果为 DMA 建立一个触发器,必须通过高级触发器对话框来实现。可以从所有可以访问的选择类型中进行选择并且获取对于触发器的所有特性的完全控制。7 时钟控制调试系统的一个非常重要的部分是复杂的时钟控制。当然,在进行仿真保持时应当停止时钟,特别注意的是对于 CPU 的主时钟则取决于应用,对于外围模块的时钟有不同的要求,例如 UART 模块可能传送一个字符或者一个为电机产生 PWM 信号的计时器。仅仅停止这些外围设备可能会取消一个通信或者甚至会毁坏电机控制单元的大功率电路。不同的时钟控制模块列在下面并说明了它们如何使用。表一说明了哪些设备有哪些实现。7.1 没有时钟控制(例如F11X1、F12X、F13X、F14X)当 CPU 由于读/写内存而被停止时,模块可能被锁住。例如,如果当程序在单步执行时一个定时器中断被允许,程序将永远处于 ISR 状态。注意:对于允许定时器中断的单步模式的唯一解决方案是在启动单步模式之前在状态寄存器中清除 GIE 位。7.2 标准时钟控制(例如F41X)标准时钟控制完全停止所选择模块的时钟,而其它模块的时钟则保持运行。时钟控制的选择由硬连线实现。这意味着在仿真保持或非保持时选择要停止的所有 ACLK、MCLK 或者 SMCLK 是可能的。7.3 扩展时钟控制(例如F15X、F16X、F43X、F44X)扩展时钟控制具有和标准时钟控制相同的功能,此外,它还可以在模块一级上被控制。对于这个系统的常用推荐设置是停止除 USART、ADC 和 Flash 模块之外的所有时钟。这种设置下数据传输、ADC 测量或者往已经打开的 Flash 存储写入由系统完成,而所有其它的外围模块由中断条件停止。8 注意事项lllll如果 JTAG 保险丝已经熔断,对于仿真逻辑的访问将被禁止。当使用一个复杂的断点时,在导致中断的指令被执行之后,CPU 被停止。当一个中断发生时,在停止之前总要先完成当前的指令。EEM 逻辑不能阻止将一个无效值写入一个给定的地址或者寄存器。硬件寄存器,比如 Timer_A 计数器(TAR),不能用于触发器,除非要求的值已经被写入寄存器而在这段时间内 CPU 正访问寄存器。9 仿真模块实现总结Page 9 of 14微控设计网: EW430 高级调试使用 EEM V1.0下表总结了在不同设备上实现仿真模块的不同。www.M微控设计网表一 仿真模块概述(1)(1) 仅用于 Flash 设备(2) = 与 =, , =比较(3) 与所有设备的标准比较。10 参考1. MSP430 Product Brochure (SLAB034)附录 A例子附录包含了一些关于 EEM 细节特点的例子,这些特点我们在本报告中已讨论过。本报告提供的源代码并非最优化的编程方式,也不一定可以实际应用到特定模块中。而是设计用来使读者熟悉使用 EEM的细节特点。其中一些特点不应该用于实际的应用中,比如:允许嵌套中断,允许在中断服务程序中使用循环延迟等。下面所提到的目录和段落可以通过如下位置找到:断点点击 View | Breakpoint。新断点右击 Breakpoint 窗口,选择 New Breakpoint。状态存储器配置点击 Emulator,选择 State Storage Control。状态存储器窗口点击 Emulator,选择 State Storage Window。触发序列控制点击 Emulator,选择 Sequencer ControlPage 10 of 14微控设计网: EW430 高级调试使用 EEM V1.0www.M微控设计网A.1 写地址断点1从编辑窗口打开断点对话框。2选择 Conditional 标签。3在 wSetBreakpointOn 中输入断点变量名。4选择地址总线, operator = =和写通道。5Action 应该是 Break 状态6在 Condition Field 将其值设置为 0xA0A0,Operator != 和 Write Access。(不要改变 mask值)如果一个值不等于 0xA0A0 则系统停止,0xA0A0 写入在断点变量中。作为测试,快速连续按下按钮大于 20 次。A.2 写寄存器断点1删除或禁止先前的断点2从编辑菜单打开断点对话框3选择 Conditional 标签4在 SP (堆栈指针)中输入断点变量名5选择寄存器,operator = and Write Access6Action 应该是 Break 状态7设置寄存器值为 0x09A08在 Condition 和 Mask 拦中不需要改变任何值 如果堆栈指针减少到低于 0x09A0,则系统挂起。 作为测试,快速连续按下按钮大于 20 次。A.3 写闪存断点1删除或禁止先前的断点2从编辑菜单打开断点对话框3选择 Range 标签4输入起始地址 0xE000 和结束地址 0xFFDE5关于写保护的设置:Type: AddressAccess: WriteAction: BreakAction when: Inside range注意:作为测试,通过 GUI 并执行 GO 来复位设备,大约 20 至 30 秒后,断点产生。A.4 存取 Invalid Memory 断点1删除或禁止先前的断点2从编辑菜单打开断点对话框3选择 Range 标签4输入起始地址 0xC00 和结束地址 0xFFF5关于读保护的设置:Type: AddressAccess: Read/WriteAction: BreakAction when: Inside range注意:作为测试,通过 GUI 并执行 GO 来复位设备,大约 20 至 30 秒后,断点产生。Page 11 of 14微控设计网: EW430 高级调试使用 EEM V1.0A.5 取操作超出允许范围的断点1删除或禁止先前的断点2从编辑菜单打开断点对话框3选择 Range 标签4输入起始地址 0x1100 和结束地址 0xEEFE5关于读保护的设置:www.M微控设计网Type: AddressAccess: FetchAction: BreakAction when: Outside range注意:作为测试,通过 GUI 并执行 GO 来复位设备,一段时间后,不会有任何现象产生。A.6 状态存储器:追溯1删除或禁止先前的断点2通过 Emulator 菜单打开状态存储器对话框,设置状态存储器功能3使能状态存储器4将缓存配置为 wrap around5配置状态存储器的运行方式应该触发保存事件-取指令。6运行代码一段时间后,将操作挂起。最后 8 条指令将被存储在缓存中。对于大多数配置中,应该使用以下设置 检查“Enable state storage” 检查“Buffer wrap around” Storage action在“Instruction fetch”状态上通过Emulator菜单打开State Storage窗口,在CPU运行并停止后,检查其数据。A.7 状态存储器:实时观测1删除或禁止先前的断点和触发2使用状态存储器建立一个实时观测3在Breakpoint菜单中建立一个状态存储触发器:在wCounter中输入断点变量名。选择地址总线, operator = =和写通道。Action状态应该是状态存储器触发。Condition栏保持空。4通过Emulator菜单打开State Storage窗口:使能状态存储器将缓存设置为wrap around将状态存储器配置为触发执行注意:在使用Update按钮并执行自由运行的当中,状态存储器的缓存数据会被读取并显示在状态存储器窗口中。A.8 触发序列器1删除或

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论