九鼎创展论坛
标题: S3C2440在Keil中的使用 [打印本页]
作者: armeasy 时间: 2012-7-19 11:45
标题: S3C2440在Keil中的使用
传统的调试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,程序全速运行,会发现四盏灯不停闪烁,单步调试,会发现四盏灯按程序进度执行。
作者: 绣恩沐 时间: 2020-9-26 14:53
有空一起交流一下
http://www.topguyu.com
http://www.tophaixian.com
http://www.tophaiyang.com
http://www.tophangfa.com
http://www.tophangkong.com
http://www.tophangtian.com
http://www.tophongjiu.com
欢迎光临 九鼎创展论坛 (http://bbs.9tripod.com/) |
Powered by Discuz! X3.2 |