wuyouwuyou

LPC功能分析及其启动代码分析

0
阅读(2673)

LPC2292是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI- STM CPU,并带有256 k字节(kB)嵌入的高速Flash 存储器。128 位宽度的存储器接口和独特的加速结构使32 位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16 位Thumb 模式将代码规模降低超过30%,而性能的损失却很小。

由于LPC2292/2294的144脚封装、极低的功耗、多个32位定时器、8路10位ADC、2路CAN、PWM 通道以及多达9个外部中断使它们特别适用于汽车、工业控制应用以及医疗系统和容错维护总线。LPC2292/2294 包含76(使用了外部存储器)~112(单片)个GPIO 口。由于内置了宽范围的串行通信接口,它们也非常适合于通信网关、协议转换器以及其它各种类型的应用。

LPC的主要特性如下:

一、16/32位ARM7TDMI-S微处理器,LQFP144封装。

二、16 kB片内静态RAM和256kB片内Flash 程序存储器。128位宽接口/加速器可实现高达60MHz的工作频率。

三、通过片内boot 装载程序实现在系统编程 (ISP) 和在应用编程 (IAP)。512 字节行编程时间为1ms。单扇区或整片擦除时间为400ms。

四、Embedded ICE-RT 和嵌入式跟踪接口使用片内Real Monitor 软件对任务进行实时调试并支持对执行代码进行无干扰的高速实时跟踪。

五、2个互连的CAN接口, 带有先进的验收滤波器。 多个串行接口, 包括2 个16C550工业标准UART、高速I2C接口(400kbit/s)和2个SPI接口。

六、8路10位A/D转换器,转换时间低至2.44μs。

七、2个32位定时器(带4路捕获和4路比较通道)、PWM单元(6路输出) 、实时时钟和看门狗。

八、向量中断控制器。可配置优先级和向量地址。

九、通过外部存储器接口可将存储器配置成4组,每组的容量高达16Mb,数据宽度为8/16/32位。

十、多达112个通用I/O口(可承受5V电压) ,9个边沿或电平触发的外部中断引脚。

十一、通过片内PLL可实现最大为60MHz 的CPU操作频率。

十二、片内晶振频率范围:1~30 MHz。

十三、2个低功耗模式:空闲和掉电。

十四、通过外部中断将处理器从掉电模式中唤醒。

十五、可通过个别使能/禁止外部功能来优化功耗。

十六、双电源

-CPU操作电压范围:1.65~1.95 V(1.8 V±0.15 V)

-I/O操作电压范围:3.0~3.6 V(3.3 V±10%),可承受5V电压。

TargetResetInit()函数是在target.c文件中定义的,根据系统板以及配置文件中配置项的不同,完成对外围设备的控制。主要进行了系统时钟,存储器加速模块的控制,并初始化向量中断控制器。

首先根据代码存储的位置即调试环境,定义存储器映射控制寄存器MEMMAP,然后根据config.h中配置的各个时钟如晶振频率,系统频率,VPB时钟频率等的值,定义相应的控制寄存器的值,如通过定义VPB分配器控制寄存器VPBDIV的值控制系统时钟频率Fcclk和VPB时钟频率Fpclk之间的分频值;通过定义PLL配置寄存器PLLCFG的值控制系统时钟频率Fcclk和电流控制振荡器频率Fcco之间的关系。另外还设置了存储器加速模块和初始化了向量中断控制器VIC。

然后返回到汇编程序当中,汇编程序通过调用__main()函数进入编译器提供的C语言入口,实际上就是进入主函数文件main.c文件中的main()函数。至此启动代码结束。

另外启动代码还定义了用户初始化堆栈的子程序__user_initial_stackheap供用户在C语言环境中调用。该子程序为五种模式都初始化了堆栈,各种模式下堆栈的大小由启动代码前五行定义,代码如下:

SVC_STACK_LEGTH          EQU         0

FIQ_STACK_LEGTH          EQU         0

IRQ_STACK_LEGTH          EQU         256

ABT_STACK_LEGTH          EQU         0

UND_STACK_LEGTH          EQU         0