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要繁琐一点。
浙公网安备 33010602011771号