完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
估计很多入门单片机编程的人在考虑单片机工作的时候(包括曾经的我,呵呵)都是从main()开始考虑的,很少有初手会去考量单片机在上电到执行main()这期间都干了什么。但等你接触多了的时候,你就会慢慢的去考虑这期间单片机干的事,这也是你从菜鸟到老鸟的过渡了,等你真正掌握了这一点,你就会对单片机有一个重新的认识(反正我是这样的),出现问题的时候也会站在一个全局的角度来思考,因此往往很快就解决了问题,这也就是初手和老手的很大的一个差别所在了,哈哈。下面我就以Kinetis为例说说它的上电启动顺序。
(1)上电起初,单片机的电压调节器会把整个系统置于POR(上电复位)状态的上电阶段,一直到工作电压达到了可以让单片机正常工作的电压阈值之后才释放这个上电阶段,进入复位阶段; (2)在复位保持期间,由单片机内部的模式控制复位逻辑统筹支配整个复位阶段的执行顺序; (3)首先MCG模块使能,并默认为FEI时钟模式; (4)相应模块的时钟使能,包括Coreclock,Systemclock,Flashclock,busclock等这些不需要门控(clock gate,M4的特色)控制的时钟; (5)Flash控制器从复位状态释放(注意这时外部RESET脚仍然保持低电平),并且执行一系列的初始化操作(因为要为接下来的代码执行做准备了); (6)单片机/RESET引脚释放,但是系统复位状态继续保持,一直到上面的Flash控制器初始化完毕(如果Flash控制器提前初始化好,则/RESET引脚释放后立即从POR状态苏醒); (7)Kinetis从复位状态唤醒之后,开始设置堆栈(stack),程序计数器(PC)和连接寄存器(LR)(这里需要说明的是,在ARM架构中stack指针即寄存器组里的R13,PC指针为R14,LR指针为R15)。具体设置为(具体流程我在启动代码分析里面提到过):从中断向量表地址0读取内容给堆栈指针,地址4读取内容给PC指针,LR寄存器设置为0xFFFF_FFFF。 (8)上面三个寄存器设置好了之后,单片机就开始从PC指针指向的地址开始执行代码了,剩下的就是我以前写过的从零入手系列启动代码分析那部分的流程了,最后才转到main开始执行。 |
|
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
2135个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
37376 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
6775 浏览 1 评论
7793 浏览 1 评论
7642 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
5071 浏览 0 评论
1555浏览 2评论
关于NINA-W132 Wi-Fi模块SPI通信遇到的疑问求解
1207浏览 2评论
如何在MPC PowerPC MCU上首次刷写后禁用BDM?
749浏览 1评论
将HFREFR和LFREFR寄存器值设置为错误的值来将故障注入CMU,但CMU_ISR值始终为零,为什么?
734浏览 1评论
将SPSDK for FRDM-MCX-W71 SDK与VS一起安装时出现hidapi构建错误怎么解决?
677浏览 1评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 18:37 , Processed in 0.547661 second(s), Total 64, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖