一.新建一个keil4工程并进行如下配置 ps.这个Ext_RAM.ini文件需要自己新建一个,文章后附文件内容单击setting,配置flash读写算法 二.添加代码1. 首先添加一个.c文件,写入程序(带main),例如跑马灯程序什么的。编译之后会出现如下问题first.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST.这是因为没有添加.s文件的原因2. 添加2440init.s文件,网上找一下这个文件,有的。2440init.s包含了三个头文件option.inc,memcfg.inc, 2440addr.inc也要下载并包含。编译后出现如下问题first.axf: Error: L6218E: Undefined symbol Main (referred from 2440init.o).这是因为2440程序的默认入口地址不是main,入口地址在2440init.s中有定义。这个入口地址被定义为Main,也就是error中的那个Undefined symbol Main。修改.c文件中main为Main,再编译就OK了。三.附 Ext_RAM.ini文件 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 .first.axf INCREMENTAL // Download program SetupForStart(); // Setup for Running g, main // Goto Main本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-11/109122.htm