### 周立功LPC2200开发板引导代码深入分析
#### 开发板概述及开发环境
周立功LPC2200开发板是一款基于ARM7TDMI内核的微控制器开发平台,广泛应用于教学实验、科研开发等领域。此开发板的核心处理器LPC2200系列具有高性能、低功耗的特点,支持多种通信接口,如串口、SPI、I²C等。
对于该开发板的开发环境,文章提到了以下配置:
- **编译软件**:ADS 1.2 (Advanced Development System) 是一款由ARM公司推出的集成开发环境,支持对ARM处理器的编程。
- **调试仿真**:AXD (ARM Debug Monitor) 用于程序的调试;EASY JTAG 则是一种硬件接口,用于实现硬件调试功能。
#### 工程模板及其特点
周立功公司为了便于开发者使用ADS 1.2,提供了多种工程模板,具体包括:
- **ARMExecutableImageforlpc2200**:ARM指令集模板。
- **ThumbExecutableImageforlpc2200**:Thumb指令集模板。
- **ARMExecutableImageforUCOSII(forlpc2200)**:支持μC/OS-II操作系统的ARM指令集模板。
- **ThumbExecutableImageforUCOSII(forlpc2200)**:支持μC/OS-II操作系统的Thumb指令集模板。
- **ASMforlpc2200**:汇编语言模板。
- **ThumbARMInterworkingImageforlpc2200**:ARM与Thumb混合使用的模板。
这些模板的主要区别在于指令集的不同以及是否支持μC/OS-II操作系统。例如,支持μC/OS-II的操作系统模板会包含特定的移植代码,以便于在该操作系统下运行应用程序。
#### 文件功能模块划分
接下来是对开发板的关键文件进行功能划分:
1. **Config.h**:定义了基本的数据类型以及系统时钟的配置参数,包括晶振频率、系统核心频率、时钟输出频率等。例如,`Fosc` 定义了晶振频率,一般设定在10MHz到25MHz之间;`Fcclk` 定义了系统核心频率,应为晶振频率的整数倍,最大不超过60MHz。
系统时钟的具体配置在 `TargetResetInit` 函数中实现,位于 `Target.c` 文件中。配置过程涉及到倍频和分频计算,需要根据所需的系统频率来选择合适的倍频系数。
2. **Target.h**:定义了软复位函数和目标板初始化函数,这些函数通常用于系统初始化阶段,例如设置寄存器、配置外设等。
3. **Lpc2294.h**:定义了芯片内部寄存器的地址映射以及固件函数。固件函数通常是出厂时预置的一些基本功能函数,例如复位处理等。通过定义这些函数,可以在上层应用中直接调用,简化开发流程。
4. **Target.c**:包含了异常处理程序和目标板初始化程序。用户可以根据自身需求对这部分代码进行修改,以适应不同的应用场景。
5. **Heap.s**:初始化堆空间,用于程序运行时动态分配内存。
6. **IRQ.s**:中断处理程序,用于处理外部中断事件。
7. **Stack.s**:栈空间初始化,用于存储函数调用时的局部变量和返回地址等信息。
8. **Startup.s**:启动引导代码,负责初始化处理器状态,并跳转到主程序入口。
9. **Mem_a.scf / Mem_b.scf / Mem_c.scf**:内存配置文件,用于定义内存区域的布局。
10. **Main.c**:主程序文件,包含程序的主函数,是程序执行的起点。
#### Lpc2294.h详解
- **寄存器地址映射**:通过定义寄存器地址,可以直接读写寄存器来控制硬件资源。
- **固件函数**:这些函数用于实现处理器的复位、异常处理等功能。例如:
- `rm_init_entry()`:初始化入口函数。
- `rm_undef_handler()`:未定义指令处理函数。
- `rm_prefetchabort_handler()`:预取中止处理函数。
- `rm_dataabort_handler()`:数据访问中止处理函数。
- `rm_irqhandler()`:外部中断处理函数。
- `iap_entry(a, b)`:内部应用编程接口函数,用于固件更新等操作。
#### Config.h详解
- **系统设置**:定义了晶振频率 (`Fosc`)、系统核心频率 (`Fcclk`)、时钟输出频率 (`Fcco`) 和外设总线频率 (`Fpclk`)。这些参数对于系统时钟配置至关重要。
周立功LPC2200开发板通过丰富的工程模板和精心设计的文件结构,极大地简化了开发者的开发流程。通过理解这些关键文件的功能,可以更好地利用该开发板进行嵌入式系统的设计和开发。