注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
dvd1478的个人空间 https://home.eeworld.com.cn/space-uid-194541.html [收藏] [复制] [分享] [RSS]
日志

[LPC5410x]04、LPC5410x启动过程分析

已有 1086 次阅读2015-4-23 00:43 |个人分类:NXP

LPCXpressopen 进行lib方式的开发,不利于上电复位的流程,也做成我读按键的值都读了几天,真是糗大,最后是老老实实的跟踪一下。
1)复位启动
iar_startup_lpc5410x.s  主从模式(双核)的选择暂时不多分析,以后玩到双核再做分析
从shared_boot_entry为入口

iar_startup_lpc5410x.s

2) sysinit.c
在iar_startup_lpc5410x.s 的normal_boot

跳转到SystemInit
其内容包含以下的
1)SCB->VTOR  中断影响矢量表指针   在IAP、RAM运行,多程序的时候要进行修改的部分
2)FPU 的初始化,由于LPC5410x是Cortex M4 所以其包含了fpu的初始化(注意,并不是所有的Cortex M4都要初始化才可以使用的,例如,我用过一款Kinetix  K60 就不用初始化,直接打开宏调用函数即可,具体看芯片的手册或例程)
3) 系统时钟的初始化(这个很关键,必记录下先,以后再对其说明)
Chip_SystemInit  是在 sysinit_5410x.c 主要是设置系统时钟并为100MHz
Board_SystemInit 是在board_sysinit.c 主要系统时钟,以及引脚复用功能的确实
两者是二选一的,Chip_SystemInit 是针到LPC5410x芯片级的,Board_SystemInit 是根据开发板的具体设置而定的。
引脚复用功能的确定是很重要的,我是用万利的板子,却用了官方的例程,搞很久就是按键读出不了正确的数据,后来找到,原因在此。以后在GPIO 再说。
时钟的设置

可以使用IRC(内部振荡RC时钟)以及外部CLKIN时钟

BOARD_MAINCLOCKRATE 就是开发板子的系统时钟在,board.h进行设计的

以及设置CLKOUT的输出源(这个可以不输出,但还是保留,用示波器,直接观察时钟的频率这个更为直观)
Chip_Clock_SetCLKOUTSource(SYSCON_CLKOUTSRC_MAINCLK, 1);
还可以有以下选择
typedef enum {
SYSCON_CLKOUTSRC_MAINCLK = 0,
SYSCON_CLKOUTSRC_CLKIN,
SYSCON_CLKOUTSRC_WDTOSC,
SYSCON_CLKOUTSRC_IRC,
SYSCON_CLKOUTSRCA_OUTPUT,
SYSCON_CLKOUTSRC_RTC = 7
} CHIP_SYSCON_CLKOUTSRC_T;
4)__iar_program_start

这部分是iar编译器的实始化,堆、栈大小等分配,初始化变量也未初始化变量等申请,等等,最后跳转到main中
5)main


符值 到全局变量SystemCoreClock 方便知道系统时钟以及计算时间
后面的就比较方便了,在具体的实例在分析不再进行跟踪了

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章