九鼎创展论坛中文版English
登录 | 立即注册 设为首页收藏本站 切换到宽版
查看: 8029|回复: 2
打印 上一主题 下一主题

S3C2440在Keil中的使用

[复制链接]
跳转到指定楼层
楼主
发表于 2012-7-19 11:45:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
传统的调试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:20 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳市九鼎创展科技官方论坛 ( 粤ICP备11028681号-2  

GMT+8, 2024-11-25 10:04 , Processed in 0.021943 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表