嵌入式arm学习总结(九)--ARM启动代码总结-基于mini2440平台

ARM64 SMP多核启动详解1(spin_table) 处理器架构:arm64uboot版本:uboot-2023内核源码:linux-5.10ubuntu版本:20.04.1一般嵌入式系统使用的都是对称多处理器(Symmetric Multi-Processor, SMP)系统,包含了多个cpu, 这几个cpu都是相同的处理器,如4核Contex-A53。 阅读详情


1.要看懂启动代码:首先要熟悉ARM9的存储系统和指令系统

2.启动的大概步骤:
进入复位异常--》关看门狗、关中断和子中断等--配置时钟(UPll和MPll)--》初始化内存(初始化13个存储器控制器),清零内存
--》初始化堆栈--拷贝代码到sdram,跳转到sdram中运行--》进入main函数

3.启动代码作用

启动代码的最终目的:把代码从nanflash复制到内存中并运行
1).进入管理模式,设置主频和分频比,初始化相关外设(串口)
2).判定代码是否进行复制(NORFLASH,还是NANDFLSASH复制)
3).异常怎样处理
4).跳入主函数main()
第一步:从resetEntry开始,运行到b ResteHandler
第二步:ResteHandler,关看门狗,关中断
第三步:配置系统时钟:主频,高速总线,低速总线
        先配置分频比CLKDIVN  默认为1:1:1
        主频FCLK PCLK,HCLK不能直接赋值,它们有一定的比例
        再配置主频USB频率MPLLCON,UPLLCON
        配置UPLL后必须延时7个时钟周期(芯片资料里面规定)
第四步:设置内存起始地址和长度,初始化SDRAM(严格来说叫存储器控制寄存器,不仅仅包含SDRAM)控制器:配置13个寄存器(一般默认)

5).清除按键中断(可以不要、启动代码这一步不是必须的)
6).清SDRAM
7).初始化堆栈段
8).复制代码到内存


4.启动代码的修改设置点

1)关看门狗、关中断(都是默认)
2)配置FCLK,PCLK,HCLK的比例
3)启动方式NOR,NAND BWSCON
4)复制代码到内存(自动)
5)LDR r0,=HandleIRQ    设置中断向量入口
   LDR r1=IsrIRQ
   STR r1,[r0]  必须
7)堆栈空间大小的配置
8)中断向量表一一对应,根据不同芯片进行配置、顺序不可颠倒
9)中断向量表的首地址、堆栈首地址,分散加载文件配置(配置debug,程序下载等的起始地址和空间大小即RuninRAM.sct文件中的配置)


5.启动代码中断服务函数的相关设置(这段程序主要把中断服务程序的入口地址传送给pc)

   MACRO      ;关键字,表示宏定义的开始
$HandlerLabel HANDLER $HandleLabel ; 相当于define  max(x,y)  前面为x后面为y   宏名

$HandlerLabel   ;以下为宏的内容

 sub sp,sp,#4  ;decrement sp(to store jump address);先预留空间,为了存储跳转地址。
 
 ;把工作寄存器按入堆栈。 满地减压栈    LDMFA满地减出栈
 ;范例:压栈STMFD R0!,{R5-R6} ;出栈LDMFD R0!,{R5-R6}  堆栈压栈满递减,出栈必须用满递减
 stmfd sp!,{r0} ;PUSH the work register to stack(lr does not push because it return to original address)
 
 ;这两句的功能是把中断程序的入口地址先放在中间变量r0处。  将IsrIRQ标号放入r0中
 ldr     r0,=$HandleLabel    ;load the address of HandleXXX to r0  把HandleLabel替换成HandleIRQ
 
 ;把HandlerXXX所指向的内容放入到r0
 ldr     r0,[r0]             ;load the contents(service routine start address) of HandleXXX
 
 ;把中断服务程序的入口地址按入堆栈。 将 IsrIRQ地址压栈
 str     r0,[sp,#4]        ;store the contents(ISR) of HandleXXX to stack            S3C2440采用满递减堆栈存储方式

 ;最后把堆栈中的中断程序入口地址弹出给pc寄存器,这样就可以执行相应的中断服务程序了。 
 ldmfd   sp!,{r0,pc}       ;POP the work register and pc(jump to ISR) 出栈过程
 ;恢复原来r0的值,同时程序跳转到IsrIRQ标号处执行。
 MEND ;宏的结束



[学习笔记]ARM9-mini2440之点亮第一颗LED ARM9-mini2440之点亮第一颗LED 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带... 阅读详情

相关推荐

Mini2440嵌入式裸机程序环境搭建(下篇)——小白学ARM(七)

Mini2440嵌入式裸机程序环境搭建(下篇)——小白学ARM(七)程序编写:Source Insight的设置SecureCRT的安装与设置DNW2的安装 上回说到嵌入式裸机程序是放在nand flash里,清楚这点后我们开始程序编写、编译、下载 程序编写:Source Insight的设置 安装好Source Insight后需要两部操作才能开始编程: 增加文件类型 options——document options——document type——c source file 将原来的*.c;.h

qq_38406667的博客 575

ARM多核启动分析

ARM多核启动分析 #1.概述 本文主要是记录学习Linux的多核启动的过程,对学习过程进行总结,以便进行后续回顾。 平台:ARM Vexpress 内核版本:linux-4.9 #2.smp_operations初始化 系统启动过程中,Linux kernel提供了smp boot实现的框架,要实现smp boot,先要填充好smp_operations这个结构体,smp_operations结...

lunhui2016的博客 3895

配置ARM虚拟机_使用qemu建立mini2440的模拟仿真环境

编者按: 参考文章&课程: leao :用qemu建立mini2440的模拟仿真环境 https://www.cnblogs.com/jinmu190/archive/2011/03/21/1990698.html 星海一叶舟:qemu安装mini2440的修炼经历https://blog.youkuaiyun.com/star2523/article/details/7562210 平震宇:嵌入式Linux应用于开发实践 _项目5 构建嵌入式Linux开发环境_5.6 配置交叉编译环境;5.9/10配置AR

ou_nana的博客 2748

基于ARM的多核SoC的启动方法

主内核加载程序计数器并从地址 0xSP 开始执行(主内核堆栈指针,在 0xSP 位置的 ROM 内部,它将加载堆栈指针),这指示内核加载其重置处理程序(堆栈指针,向量表)和读取**处理器Start Address(PSA)**获取应用程序引导地址并跳转到该位置。对于地址为零的未初始化内存(例如,未编程的闪存或未初始化的 GRAM/SRAM),处理器将从地址 0x0 读取虚假的初始主堆栈指针值,并从该地址读取虚假的代码入口点,可能包含非法指令集状态位 [0] 中的说明符(ESPR.T 位)。

1497

mini2440启动机制及编程实现

接下来,复位向量表中的指令将初始化mini2440上的各种外设,如串口、LCD显示器、触摸屏等。接下来,复位向量表中的指令将初始化mini2440上的各种外设,如串口、LCD显示器、触摸屏等。在该函数中,首先进行堆栈指针的初始化,然后可以添加必要的外设初始化代码。请注意,上述示例只是一个简化的示例,实际的启动代码可能会更加复杂,具体取决于您的应用程序需求和所使用的开发环境。请注意,上述示例只是一个简化的示例,实际的启动代码可能会更加复杂,具体取决于您的应用程序需求和所使用的开发环境。该示例使用C语言编写。

PixelCoder的博客 140

掌握Mini2440与U-Boot:嵌入式系统的基石

Mini2440开发板是基于Samsung S3C2440处理器的低成本嵌入式开发平台,广泛用于学习、研究和开发ARM相关技术。该开发板提供了一个灵活的环境,使得开发者可以方便地进行硬件操作和软件编程实验。它支持Linux和WinCE操作系统,适用于各种嵌入式系统应用。S3C2440处理器不仅有一个强大的内核,还集成了丰富的外设接口,使其成为高度可配置的单片解决方案。这些外设接口包括:- LCD控制器,支持多种显示接口和高达64k色的彩色显示;

weixin_32251525的博客 906

ARM启动流程及启动代码分析

一、ARM的启动流程 基于ARM的芯片多数为复杂的片上系统。这种复杂系统里的多数硬件模块都是可配置的。需要由软件来设置其需要的工作状态。因此在用户的应用程序之前,需要由专门的一段代码来完成对系统的初始化。由于这类代码直接面对处理器内核和硬件控制器进行编程,一般都是用汇编语言。一般通用的内容包括: 中断向量表 初始化存储器系统 初始化堆栈 初始化有特殊要求的端口,设备 初始化用户程序执行环境 改变处...

bojin4564的博客 8113

mini2440开发板S3C2440处理器JFlash与JLink烧录配置实战

JLink调试器本质上是一个高速USB-to-JTAG/SWD协议转换设备,它将PC端调试指令转换为目标处理器可识别的底层电信号,并通过标准调试接口注入到目标芯片内部。该过程涉及多个层次的协议栈交互,包括物理层电平驱动、数据链路层状态机切换以及调试逻辑核心(Debug Access Port, DAP)的操作控制。mini2440开发板采用标准20-pin ARM JTAG插座,其关键信号定义如下:引脚号信号名方向功能说明4TCK输入。

weixin_35748962的博客 1196

SMP多核启动

在 Linux系统中,对于多核的ARM芯片而言,在Biotron代码中,每个CPU都会识别自身ID,如果ID是0,则引导Bootloader和 Linux内核执行,如果ID不是0,则Biotron一般在上电时将自身置于WFI或者WFE状态,并等待CPU0给其发CPU核间中断或事件(一般通过SEV指令)以唤醒它。一个典型的多核 Linux启动过程如图20.6所示。 被CPU0唤醒的CPUn可以在运行...

weixin_30396699的博客 598

深入掌握mini2440裸机程序开发

在嵌入式系统领域,裸机编程通常指的是直接在硬件上操作,不依赖于操作系统提供的抽象层。本章节将概述mini2440裸机程序开发的基础知识,并引导读者理解为何在开发初期掌握裸机编程是十分重要的。mini2440是一种基于ARM920T核心的开发板,由于其高性能和相对较低的成本,它在教育和工业领域得到了广泛应用。掌握如何在mini2440开发板上进行裸机编程,不仅可以帮助开发者进行硬件级别的交互和测试,还能提高对复杂嵌入式系统的理解。外设驱动是操作系统与硬件之间的桥梁,负责控制硬件设备工作。

weixin_36122351的博客 706

江科大笔记—OLED调试工具

OLED介绍及调试工具

m0_62005595的博客 658

嵌入式学习-mini2440启动相关

mini2440启动模式: Nor Flash启动:Supervivi (类似于BIOS程序) Nand Flash启动:Supervivi + Kernel + RootFS JLink烧写文件到开发板:1.JLink烧写Nor Flash 2.JLink烧写Nand Flash JLink烧写Nor Flash 1.开发板跳线打到Nor,接上JLINK,插在底板的JT...

肥叔菌的博客 9594

华为S5700三层交换机VLAN配置避坑指南:为什么你的VLAN间无法互通?

本文针对华为S5700三层交换机VLAN间无法互通的典型故障,提供深度排障指南。文章从数据转发原理入手,系统梳理了从物理链路、VLAN配置、VLANIF接口状态、路由表到ARP表、MTU及安全策略等全链路检查点,并给出了清晰的排查命令与流程,帮助网络工程师快速定位并解决VLAN间路由问题,实现稳定互通。

tt34567的博客 873

QEMU模拟mini2440开发环境

如何使用QEMU模拟**FriendlyArm的Mini2440开发板**。 主要是为LInux初学者不必购买ARM9开发板,同样也可以学习ARM9, LInux驱动与内核相关的东西。帮助初学者快速上手ARM与Linux。

zhuwade的博客 2921

SAP SD实战:用BADI_SLS_HEAD_SCR_CUS给销售订单VA01/VA02加自定义字段(附完整函数组代码)

本文详细解析了在SAP SD模块中如何利用BADI_SLS_HEAD_SCR_CUS实现销售订单(VA01/VA02)的屏幕增强,包括数据结构设计、函数组创建和BADI接口实现。通过实战案例和完整代码,帮助开发者掌握在SAPMV45A标准流程中添加自定义字段的关键技术,提升业务定制化能力。

weixin_27015733的博客 369

踩坑记录:Clawdbot 对接 Minimax 报错 “401 token is unusable (1004)“ 的终极解决方案

如果你也在配置 Clawdbot 对接 Minimax 模型时,明明 API Key 是新申请的,却死活报错 `401 Unauthorized`,错误码 `1004`,提示 `token is unusable`——那么恭喜你,来对地方了。

hampeter的博客 2001

arm9 mini2440 supervivi烧写方法

arm9 mini2440 supervivi 烧写方法

fengjunwang1980的专栏 5462

keil5编程前的工程文件配置,芯片型号支持包配置,用户文件配置,启动文件配置和库函数配置-江科大stm32学习 第一天

1.start文件夹中头文件需要配置路径path,另外user和library也需要,都是同样的操作。如图,在option界面c/c++中,在倒数第二空行的三个点处添加。2.需要设置一个宏,作用是使主函数头文件包含标准库函数,操作如图:复制头文件中8296行的字符串,在option界面的c/c++中第一行define粘贴这个字符串即可。一、首先,下载芯片支持包,选择你自己的器件型号,不懂的可以看我这篇选器件的方法(默认已经注册好用户)点击编译按钮,编译成功后即可在user文件夹里添加main.c正常使用。

weixin_50682964的博客 1952

【ARM】使用J-Link下载u-boot到Mini2440开发板

1各种引导系统介绍 1 bios1 2 Grub2 3 u-boot 2下载u-boot过程3 1开发板设置为norflash启动 2连好线后启动J-Flash ARM 2Target-Connect 3File-Open 4Target-Auto即可自动烧写 5烧写完成后关电取下j-link重新启动即可进入u-boot界面 烧u-bootyfbin复位启动后界面 烧光盘u-bootbin复位启动后

Wu_Being 的优快云 博客 2151

【数据集】waymo motion dataset介绍与数据解析可视化

waymo motion数据集下载,数据描述,数据特征和地图特征,数据解析并完成数据可视化

shuaixio的博客 5180

从苏宁电器到卡巴斯基(第二部)第01篇:我在卡巴的日子 I

聊聊行业薪酬 我相信不论是谁,如果是入职一家新的公司,那么他最想知道的一件事情就是待遇情况了。这里既包含每月实际能到手多少钱,又包括五险一金是否齐全以及是按照高标准还是低标准缴纳。另外,如果是入职IT公司,还会在意年终奖有多少,毕竟某些富裕的IT企业,每到年末就会以此制造新闻来博取大家的关注,以彰显自身的实力。 一言以蔽之,待遇问题也就是年收入究竟会有多少,也是我们进入职场的人喜欢相互打听的问题。比如我研究生那届最厉害的一位同学,签了A公司的算法岗位,年薪30W+(税前,下同),在当时的我看来就是天价了

Gleam的专栏 1225

Mini2440 启动流程分析

S3C2440 SOC芯片内部集成了一块容量极小的RAM,大小只有4KB。在官方数据手册中,这块 SRAM 被称为。它的作用正如其名——它是系统启动的一块垫脚石。因为 4KB 太小,跑不了操作系统,甚至跑不下完整的 u-boot,但它足够用来完成最基本的硬件初始化和代码搬运。排座位。通过链接脚本(.lds),start.s被安排在了最前面,main.c紧随其后。假如最终生成的.binstart.s的机器码(关看门狗、设栈、跳转)。main.c的机器码(配置寄存器、循环)。

qq_39883394的博客 1061

RK3588 buildroot 制作的系统增加 docker 支持

RK3588 使用buildroot制作的系统添加 docker 和 docker-compose 的功能

荻夜的博客 1567

Mini2440 调试环境搭建(wsl + vscode + openOCD)

本文介绍了基于WSL2+OpenOCD搭建Mini2440开发板(S3C2440芯片)的调试环境。硬件连接需注意J-Link供电问题,必须外接电源。配置步骤包括:准备OpenOCD配置文件(mini2440.cfg等)、安装J-Link驱动、启动OpenOCD服务器。在VSCode中配置launch.json调试文件,通过GDB连接OpenOCD服务器进行调试。调试过程中需要两次F5操作,第一次初始化CPU环境,第二次进入main函数断点。该方法虽然比Keil复杂,但适用于小众芯片开发,具有更强的灵活性。

qq_39883394的博客 1406

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

国产化实时操作系统研究之旅5-SylixOS mini2440平台基础建立工程

任何理论研究都是从实践开始的,本文主要描述的是依照mini2440平台建立工程来体验IDE的工作原理。篇幅有限,本文只介绍工程建立方法、每个步骤的原理后续都有文章剖析。 为什么选择mini2440平台? SylixOS支持多种处理器同时支持很多开发板,我自己现在研究的是2K1000龙芯和DSP6678平台。为什么会选择mini2440这个ARM平台,原因主要有以下几点: 在众多硬件平台中ARM的受众面广一些,尤其是分析内核调度方面需要一些汇编语言,选ARM作为切入点会好一些 MINI2440核心处理

xian_gw的博客 985

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

mini2440init.s启动代码注释.

经过两天的注释,大致了解了mini2440的启动流程,期间查阅了大量的网上资料,借此机会分享下注释的代码。希望对大家学习有所帮助。由于本人能力有限,欢迎大家指正错误!!不胜感激!;=========================================<br />; NAME: 2440INIT.S<br />; DESC: C start up codes<br />;       Configure memory, ISR ,stacks<br />; Initialize C-vari

GuQSir的专栏 740

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: 嵌入式arm学习总结(八)--存储知识-nandflash-norflash-基于MINI2440平台
下一篇: 嵌入式arm学习总结(十)--嵌入式项目知识点总结--杂烩
杨毅
博客等级 码龄14年 26粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值