周立功
LPC2200
开发板引导代码分析
---by
铁匠
,2005.07.18
1.
周立功公司的 LPC 系列开发板,开发环境:
编译软件:ADS 1.2 ,调试仿真:AXD+EASY JTAG。
2.
周立功公司为了方便 ADS 的使用,建立了工程模板:
ARM Executable Image for lpc2200 // ARM 指令模板
Thumb Executable Image for lpc2200 // Thumb 指令模板
ARM Executable Image for UCOSII(for lpc2200) // ARM 指令模板(UCOSII 用)
Thumb Executable Image for UCOSII(for lpc2200) // Thumb 指令模板(UCOSII 用)
ASM for lpc2200 // 汇编模板
Thumb ARM Interworking Image for lpc2200 // ARM 和 Thumb 交叉工作模板
6 种模式,工作方式大同小异。差别在于用到 UCOSII 的进行了系统移植。而指令集不同,
模板也略有不同。本文只分析 ARM 指令模板。
3.
文件功能模块划分(以老版本模板进行分析):
Config.h 定义了数据基本类型、系统时钟设置。
Target.h 定义了软复位函数和目标板初始化函数。
Lpc2294.h 定义了芯片的内部寄存器地址映射、固件函数。
Target.c 目标板代码,包括异常处理程序和目标板初始化程序,用户根据程序的需要修
改本文件。
Heap.s 堆空间初始化。
IRQ.s
中断处理。
Stack.s
栈空间初始化。
//
最新模板中没有
Startup.s
启动引导代码。
//
最新模板中没有
Mem_a.scf
Mem_b.scf
Mem_c.scf
Main.c
4.
Lpc2294.h 说明:主要定义了寄存器的地址映射和固件函数。(固件函数含义不知)
估计是出厂时
,
这些地址写入了固化函数,在这里声明。
/* Define firmware Functions */
/* 定义固件函数 */
#define rm_init_entry() ((void (*)())(0x7fffff91))()
#define rm_undef_handler() ((void (*)())(0x7fffffa0))()
#define rm_prefetchabort_handler() ((void (*)())(0x7fffffb0))()
#define rm_dataabort_handler() ((void (*)())(0x7fffffc0))()
#define rm_irqhandler() ((void (*)())(0x7fffffd0))()
#define rm_irqhandler2() ((void (*)())(0x7fffffe0))()
#define iap_entry(a, b) ((void (*)())(0x7ffffff1))(a, b)
5.
Config.h 说明:
只有下面4个选项需要设置:
/* 系统设置, Fosc、Fcclk、Fcco、Fpclk 必须定义*/