微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于MCU内部Flash的在线仿真器设计方案

基于MCU内部Flash的在线仿真器设计方案

时间:03-07 来源:互联网 点击:

等硬件资源和51系列单片机基本是完全兼容的。仿真主控程序被存储在仿真器芯片特殊的指定空间内,有一段特殊的地址段用来存储仿真主控程序,仿真主控程序就象一台电脑的操作系统一样控制仿真器的正确运转。仿真器和电脑上的上位机软件(即KEIL)是通过串口相连的,通过仿真器芯片的RXD和TXD负责接收电脑主机发来的控制数据,TXD负责给电脑主机发送反馈信息。控制指令由KEIL发出,由仿真器内部的仿真主控程序负责执行接收到的数据,并且进行正确的处理。进而驱动相应的硬件工作,这其中也包括把接收到的BIN或者其它格式的程序存放到仿真器芯片内部用来存储可执行程序的存储单元(这个过程和把程序烧写到51芯片里面是类似的,只是仿真器的擦写是以覆盖形式来做的),这样就实现了类似编程器反复烧写来试验的功能!不同的是通过仿真主控程序可以做到让这些目标程序做特定的运行,比如单步、指定断点、指定地址等,并且通过KEIL可时时观察到单片机内部各个存储单元的状态。仿真器和电脑主机联机后就象是两个精密的齿轮相互咬合的关系,一量强行中断这种联系(比如强行给仿真器手动复位或都拨支联机线等),电脑就会提示联机出现问题,这也体现了硬件仿真的特性,即所见即所得。这些都是编程器无法做到的。这些给调试、修改、以及生成最终程序创造了比较有力的保证,从而实现较高的效率。

仿真器工作时,CPU的取指空间需要在内外存储器之间反复切换。CPU地址空间划分示意图如图3所示。总体上,仿真器的工作受图4所示的状态机控制。该状态机共有四个状态:

·用户程序运行态(简称用户态)

仿真器复位后,处在运行用户程序的状态。在该状态下,CPU运行存储在内部Flash中的用户程序;外部仿真逻辑实时监测仿真接口,等待程序中断事件的发生,进入下一状态-跳转态。

用户程序通过MCU的ISP(在线编程接口)编程到内部Flash中,由Flash MCU的专用编程器完成。在设计bond-out MCU时,应该考虑与非bond-out MCU在编程时管脚的一致性。

外部SRAM用来存储监控程序和监时数据。

·跳转态

一旦程序中断事件发生,需要切换CPU的取指空间,跳转到监控程序窗口。

由于在程序中何处中断是不可预知的,因此不可能在用户程序中预先安插好用于空间切换的跳转指令。所以需要一个专门的状态来插入跳转指令码和跳转的目的地址,即监控程序的入口地址,强制CPU运行监控程序。监控程序窗口是划分CPU地址空间时,为仿真功能预留的地址空间,空间大小视所需的监控程序的大小而定,监控程序的大小在一定程序上取决于仿真功能的强弱。

CPU从仿真接口读跳转指令码和跳转地址。MCU外部仿真逻辑同时使能程序空间切换信号,屏蔽MCU的所外部中断,停止MCU中CPU外围模块的时钟,也就相当于屏蔽了MCU的所有内部中断。当程序空间的切换完成后,仿真器进入监控态,运行存储在外部SRAM中的监程序。

·监控态

在监控状态下,CPU运行存储在外部SRAM中的监控程序;继续禁止MCU的所有外部中断,停止MCU中CPU外围硬件模块的时钟。

监控程序的任务是获取MCU当前的状态,接受软件的调试命令,控制MCU的下一步运行。监控程序可以写得很简单,仅仅获取CPU特殊寄存器和外围硬件寄存器的值,实现监视功能。如MOTOROLA的HC6808就可以通过在监控程序开始处加入以下程序段得到这些寄存器的值。对于CPU指令集不支持读取全部特殊寄存器的MCU,可以通过在MCU内部增加测试逻辑得到。PC值即为程序中断处CPU的取指地址。

PSHA ;将ACC的值压入堆栈

TPA ;将CCR的值传送给ACC

STA $2FEB ;将CCR的值存入存储器,地址为$2FEB

PULA ;将ACC弹出堆栈

STA $2FEA ;将ACC有值存入存储器,地址为$2FEA

STHX $5F ;将IDX(H:X)的值存入存储器,地址为$005F

TSX ;将SP的值传送给IDX(H:X)

STHX $5D ;将SP的值存放存储器,地址为$005D

当不再继续调试,给出开始运行的命令,监控程序结束对运行命令的等待,并且将CPU特殊寄存器的值恢复。继续运行监控程序,直到最后一条指令即跳转指令进行返回态。

·返回态

CPU执行监控程序的最后一条指令-跳转指令。外部仿真逻辑在指令码后紧接着插入本次中断事件的中断点地址(进入监控程序之前的用户程序指令地址),CPU的取指空间需要跳回到用户程序空间。取消对外部中断的屏蔽,恢复CPU外围模块的工作时钟,监控程序完成使命,回到用户态,继续运行内部Flash中的用户程序。

3.2 内部仿真逻辑

为了构造合适的MCU的仿真接口,必须在MCU设计时,在MCU内部增加一个仿真接口模块,称为内部仿真接口模块。负责对

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top