使用Keil4开发FL2440开发板 Keil4配置

一.新建一个keil4工程并进行如下配置

使用Keil4开发FL2440开发板 Keil4配置

使用Keil4开发FL2440开发板 Keil4配置

使用Keil4开发FL2440开发板 Keil4配置

ps.这个Ext_RAM.ini文件需要自己新建一个,文章后附文件内容

使用Keil4开发FL2440开发板 Keil4配置

单击setting,配置flash读写算法

使用Keil4开发FL2440开发板 Keil4配置

 

二.添加代码

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/de937fb3571c6ff61ba1eacf443a7878.html