传统的调试ARM9底层程序的方法是使用ADS1.2.但是ARM9一般需要使用一段采用汇编编写的启动代码,用于将程序转到C语言的环境中进行。因此,需要编写一小段汇编代码,这样对于编程人员则增加了难度。ARM公司推出的KEIL编译环境,在新建一个工程时,都会提示是否将启动代码添加进工程中,工程已经为编程人员写好了这段启动代码。而且在调试的过程中,支持在C语言中单步调试,以及在反汇编中单步调试。这样大大方便了用户编程。下面具体结合扬创的UTU2440-F介绍采用MDK + WIGGLER + H-JTAG调试的方法。 首先,双击H-JTAG软件,监控ARM芯片,会找到系统内核,如下图所示。
其次,采用MDK(即KEIL环境)新建一个工程,目标芯片选择S3C2440A,系统会提示是否将启动代码添加进工程,点击“是”,然后再新建文本文件,编写自己的程序。这里以闪烁灯为例,具体程序如下: #include "S3C2440.h" #define LED_ON() (GPFDAT&= ~0xf0) #define LED_OFF() (GPFDAT|= 0xf0) void delay(int time) { unsigned int m,n; for(m=0;m<0x3fff;m++) for(n=0;n<time;n++); } int main() { GPFCON=0x5500; GPFUP =0xffff; while(1) { LED_ON(); delay(0xff); LED_OFF(); delay(0xff); } } 程序写玩以后需要对工程环境进行一些设置。点击Project->Options for Target,弹出工程设置对话框,具体设置如下:
其中RO和RW为存储器设置,这里给出几组设置方法,区别在于大小不一样。
点击Settings,进入如下对话框:
在Browse for RDIDriver DLL中选择H-JTAG.dll,点击OK. 如果不使用FLASH烧录,则最后一项进行如下设置:
然后在InitialzationFiles里面选择初始化文件,这里的初始化文件的代码如下: FUNC voidSetupForStart (void) { // <o> ProgramEntry Point PC = 0x30000000; } FUNC void Init (void){ _WDWORD(0x4A000008, 0xFFFFFFFF); // Disable All Interrupts _WDWORD(0x53000000, 0x00000000); // Disable WatchdogTimer // Clock Setup // FCLK = 300 MHz, HCLK = 100 MHz, PCLK = 50MHz _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 withwatchdog, because nRST line is routed on hardware in a way // that it can not bepulled low with ULINK _WDWORD(0x40000000,0xEAFFFFFE); // Load RAM addr 0with branch to itself CPSR =0x000000D3; // Disable interrupts PC = 0x40000000; // Position PC to startof RAM _WDWORD(0x53000000,0x00000021); // Enable Watchdog g, 0 // Wait forWatchdog to reset chip Init(); // Initializememory LOAD S3C2440.axf INCREMENTAL // Download program SetupForStart(); // Setup for Running g, main // Goto Main 点击确定,这样工程的设置就完成了。 启动Debug,或者按快捷键Ctrl+F5,进入调试界面。按F5,程序全速运行,会发现四盏灯不停闪烁,单步调试,会发现四盏灯按程序进度执行。
|