可以提供信号函数模拟片上外围设备。所以在使用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