一涟忧梦

导航

S3C2440在MDK开发环境下的相关配置

  我的TQ2440开发板是在大学时候买的,已经有两三年没碰了。现在翻出来重新开始学,主要是想学习ucos ii,然后进一步的linux。对于裸机,其实没必要花太多时间去琢磨。如果项目不上操作系统,我觉得cortex-m3的性能足以应付绝大部分项目。stm32裸机已经玩了有一段时间,都是直接操作寄存器,所以没必要做重复的事情了。

  开发板光盘上的资料和工程都是基于ADS开发环境的,但本人从学51单片机一来,都是使用keil,所以我觉得利用keil开发S3C2440会比较熟手一点,但事实是我纠结了好长时间,可能是我太菜:

  

  1)建立工程。类似stm32的工程,使用MDK提供的启动代码即可。

  2)对于芯片存储地址的配置。如果是要将工程编译的bin文件烧写到norflash中运行,按照实际存储地址配置如下:

这个不是关键的,如果要烧写norflash,需要配置MDK里面的scf文件。文件内容如下:

; *************************************************************

; *** Scatter-Loading Description File generated by uVision ***

; *************************************************************

LR_ROM1 0x00000000 0x00200000  {    ; load region size_region  

ER_ROM1 0x00000000 0x00200000  {  ; load address = execution address   

*.o (RESET, +First)    *(InRoot$$Sections)   

.ANY (+RO)

  }

  RW_IRAM1 0x40000000 UNINIT 0x00001000  {   

.ANY (+RW +ZI)  

   }

}

 

这个scf文件删除了外部SDRAM的配置,原因是SDRAM没有初始化,我的程序利用SDRAM做栈区,会有问题。还有,在启动代码中要配置好看门狗,不然程序也是跑不起来。

 

3)如何生成bin文件:fromelf.exe --bin -o @p.bin .\@p.axf

 

4)在SDRAM中调试程序:

  需要一个初始化文件Ext_RAM.ini:

/******************************************************************************/
/* Ext_RAM.INI: External RAM (SDRAM) Initialization File                      */
/******************************************************************************/
// <<< Use Configuration Wizard in Context Menu >>>                           // 
/******************************************************************************/
/* This file is part of the uVision/ARM development tools.                    */
/* Copyright (c) 2005-2008 Keil Software. All rights reserved.                */
/* This software may only be used under the terms of a valid, current,        */
/* end user licence from KEIL for a compatible version of KEIL software       */
/* development tools. Nothing else gives you the right to use this software.  */
/******************************************************************************/


FUNC void SetupForStart (void) {

// <o> Program Entry Point
  PC = 0x30000000;
}


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 ./tq2440.axf INCREMENTAL         // Download program
SetupForStart();                        // Setup for Running
g, main  

存储器地址配置:

貌似其他的就不用怎么设置。ARM9的流水灯实验的确是比51要繁琐一点。

 

posted on 2013-07-15 21:08  一涟忧梦  阅读(1005)  评论(0)    收藏  举报