Realview MDK 中调试脚本的详细解析

来源:互联网 发布:adobe acrobat mac版 编辑:程序博客网 时间:2024/06/06 20:40
和其他集成开发环境一样,Realview MDK 中也使用了调试脚本。调试脚本除了可以初始化软硬件的调试环境以外,还可以初始化Flash 的烧写环境,甚至
可以提供信号函数模拟片上外围设备。所以在使用Realview MDK 调试和烧写的过程中,到处都有调试脚本的身影。下面将分三个方面详细地研究调试脚本的编

写和使用。在介绍调试脚本之前,先必须了解Realview MDK 预定义的一些常用命令和函数的用法。

1. 常用预定义命令的说明及注意事项:
下表是一些常用的预定义命令和函数的语法格式及说明。

预定义的命令语法

描述

MAP

开始地址, 结束地址 在内存中映射一段存储区域

Go

开始地址,结束地址 程序从开始地址运行,到结束地址停止

DIR VTREG

显示所有的CUP 引脚寄存器

预定义的函数

描述

void rwatch (ulong address)

信号函数被延时,直到函数参数地址被读取

void wwatch (ulong address)

信号函数被延时,直到函数参数地址被写入

void swatch (float seconds)

信号函数延时参数指定的时间,单位为S

void twatch (ulong states)

信号函数延时参数指定的CUP 周期

uchar _RBYTE (address)

在参数指定的地址处读取1 个字节的数据

ulong _RWORD (address)

在参数指定的地址处读取1 个整型的数据

ulong _RDWORD (address)

在参数指定的地址处读取1 个长整型的数据

uchar _WBYTE (address, uchar val)

向参数指定的地址处写入1 个字节的数据

void _WWORD (address, uint val)

向参数指定的地址处写入1 个整型的数据

void _WDWORD (address, ulong val)

向参数指定的地址处写入1 个长整型的数据


2. 调试脚本在硬件仿真中的应用

Realview MDK 编译链接好的程序在硬件上运行之前,要求硬件具有合适的环境(例如,时钟的配置、存储控制的配置等),一般这些工作是由启动代码完成
的。在Realview MDK 中,通过调试脚本使用MDK 预先定义好的寄存器读写命名设置硬件环境。这一工作在硬件调试之前是必须进行的。下面是一个初始化硬

件环境的调试脚本函数:

FUNC void Setup (void)
{
_WWORD(0xfffffd44 ,0x00008000); // 配置看门狗模式寄存器;
_WWORD(0xfffffd60 ,0x00320100); // 配置电压效验模式寄存器;
_WWORD(0xfffffc20 ,0x00000601); // 配置主晶振寄存器;
_WWORD(0xfffffc2c ,0x00191C05); // 配置锁相环寄存器;
_WWORD(0xfffffc30 ,0x00000007); // 配置主时钟寄存器;
_WWORD(0xfffffd08 ,0xa5000001); // 配置复位控制模式寄存器;
pc = 0x200000; // 设置PC 的值。
}

实际例子如下所示:





FUNC void Init (void) {
  _WDWORD(0x4A000008, 0xFFFFFFFF);      // Disable All Interrupts
  _WDWORD(0x53000000, 0x00000000);      // Disable Watchdog Timer


                                          // Clock Setup 
                                        // FCLK = 300 MHz, HCLK = 100 MHz, PCLK = 50 MHz
  _WDWORD(0x4C000000, 0x0FFF0FFF);      // LOCKTIME
  _WDWORD(0x4C000014, 0x0000000F);      // CLKDIVN
  _WDWORD(0x4C000004, 0x00043011);      // MPLLCON
  _WDWORD(0x4C000008, 0x00038021);      // UPLLCON
  _WDWORD(0x4C00000C, 0x001FFFF0);      // CLKCON

                                        // Memory Controller Setup for SDRAM
  _WDWORD(0x48000000, 0x22000000);      // BWSCON
  _WDWORD(0x4800001C, 0x00018005);      // BANKCON6
  _WDWORD(0x48000020, 0x00018005);      // BANKCON7
  _WDWORD(0x48000024, 0x008404F3);      // REFRESH
  _WDWORD(0x48000028, 0x00000032);      // BANKSIZE
  _WDWORD(0x4800002C, 0x00000020);      // MRSRB6
  _WDWORD(0x48000030, 0x00000020);      // MRSRB7

  _WDWORD(0x56000000, 0x000003FF);      // GPACON: Enable Address lines for SDRAM
}

// Reset chip with watchdog, because nRST line is routed on hardware in a way 
// that it can not be pulled low with ULINK

_WDWORD(0x40000000, 0xEAFFFFFE);        // Load RAM addr 0 with branch to itself
CPSR = 0x000000D3;                      // Disable interrupts
PC   = 0x40000000;                      // Position PC to start of RAM
_WDWORD(0x53000000, 0x00000021);        // Enable Watchdog
g, 0                                    // Wait for Watchdog to reset chip
 
Init();                                 // Initialize memory
LOAD Obj\keyled.axf INCREMENTAL         // Download program
PC = 0x30000000;                       // Setup for Running
//g, main                                 // Goto Main