对于SH1,SH2等内建FLASH的单片机,由于内建了高速FLASH存储器,我们可以使用E10A等仿真器直接在FLASH ROM里设置硬件断点,可以很方便的进行调试。
但是对于SH2A,SH3,SH4等不带内部FLASH的单片机,我们只能在片外RAM里进行仿真和调试了。
下面以SH2A为例,如何设置断点,如何在内置SRAM里或者片外SDRAM里调试程序,如何下载程序到外部FLASH里。
SH2A断点:
针对SH2A的调试体系,硬件断点可以设置在任何地址处(FLASH和SDRAM,SRAM等),软件断点只能设置在RAM处。硬件断点通过设置相应的地址寄存器,并进行地址比较,使CPU进入调试模式。软件断点可以通过相应的数据寄存器,在任何需要设置断点的地方,将其内容替换为一个固定的序列,达到设置断点的目的。软件断点的实现需要替换要设置断点的位置的内容,这点在FLASH里做不到,因为读写FLASH需要特殊的指令。故软件断点只能设置在RAM中。
E10A仿真器调试说明:
在内部RAM调试:
1. 新建一个文本文档,将打开软件断点,初始化SP和PC寄存器的命令放在其中,然后保存为后缀“.hdc”的批处理文件。
2. 在HEW里的debug -- debug settings -- options -- command batch file load,分别选中after download of modules和after reset选项,选择上面的.hdc文件即可。
3. 改变相应的段地址(复位向量,中断向量,代码区,初始化全局区,未初始化全局区,堆,栈)。
说明:编译器复位或者编译全部文件之后,将自动运行上面的批处理文件,执行相应的命令。
command line设置见编译器手册。
在外部RAM调试:
1. 新建一个文本文档,将初始化时钟和总线控制器的命令放在其中,然后保存为后缀“.hdc”的批处理文件。
2. 在HEW里的debug -- debug settings -- options -- command batch file load,选中before download of modules选项,选择上面的文件.
3. 再次新建一个打开软件断点,初始化SP和PC寄存器的批处理文件。
4. 在HEW里的debug -- debug settings -- options -- command batch file load,选中after download of modules选项,选择3中的文件。
5. 改变相应的段地址(复位向量,中断向量,代码区,初始化全局区,未初始化全局区,堆,栈)。
说明:在进入下载模式之前需要设置时钟和总线控制器,可执行的映象文件才能下载到外部RAM。
如何使用E10A下载程序到外部FLASH里。
1. 初始化外部FLASH的总线控制器,保存到hdc文件,操作步骤见“在外部RAM调试”的第一条。
2. 参照FLASH手册修改Renesas提供的FLASH样本程序(汇编语言),生成.mot文件,然后在HEW里选中该文件,并设置FLASH参数。
3. 在HEW里设置FLASH下载选项,如图。