从0开始的IMX6ULL学习篇——裸机篇之分析粗略IMX6ULL与架构

目录

简单的说一下Cortex-A7架构

讨论ARMv7a-cortex系列的运行模式

寄存器

后言


让我们到NXP的官网上扫一眼。

i.MX 6ULL应用处理器_Arm® Cortex®-A7单核,频率为900 MHz | NXP 半导体

我们先看CPU Platform,这个是我们的核心。

这里我们的芯片是基于Arm Cortex-A7核心,这是一种高效能的处理器核心,适用于嵌入式应用。它支持32KB的指令缓存(I-Cache)和数据缓存(D-Cache),以及128KB的二级缓存(L2-Cache),这些缓存有助于提高数据处理速度。关于Cortex-A7手册可以自行到ARM架构的官网上找ARMv7a的手册慢慢看,

多媒体上,我们的这个芯片架构是支持24位并行CSI(摄像头接口)和LCD接口,以及S/PDIF Tx/Rx(数字音频接口)。至少,看,听,说交互是可行的。这一点在我们的上一篇介绍外设的时候就体现出来了。

外设连接上,支持:8个UART接口、4个SPI接口、2个FlexCAN接口、2个10/100以太网接口(ENET)、2个USB 2.0 OTG接口(带有PHY)、1个双通道Quad SPI接口和3个FS/SAI接口。显然这些常见的协议支持可以让我们玩很久很久的外设了(

电源管理上:系统包含LDO(低压差稳压器)和温度监控功能,有助于优化电源使用和系统稳定性。

安全性笔者不理解,这里就请出Deepseek帮我说:系统集成了多种安全功能,如AES-128加密、安全JTAG、安全RTC和随机数生成器(RNG)。这些功能有助于保护系统免受未经授权的访问和数据泄露。

外部存储器上,我们的系统支持非常的多的外部存储器接口,如eMMC 4.5、NAND控制器、并行NOR闪存和16位LP-DDR2/DDR3/DDR3L内存。内部存储器包括96KB ROM和128KB RAM,为系统提供了足够的存储空间。

当然,其他部分就是可编程处理引擎、多个定时器、看门狗定时器、PWM输出、GPIO接口、ADC(模数转换器)和ASRC(异步采样率转换器)。这些功能增强了系统的灵活性和可配置性,适用于多种应用场景。

可见芯片功能还是非常的NB的。

简单的说一下Cortex-A7架构

我们的IMX6ULL本身还是使用的是Armv7-A在嵌入式中特化的低功耗(或者说高功耗利用率)的架构。在我们的Cortex-A7技术手册中的第一小节About the Cortex-A7 MPCore processor中,就简单的介绍了一下这个架构的一些涉及理念。

可以看到,多个处理器拥有自己的私有的指令缓存和数据缓存。缓存我们知道,就是减少了处理器访问内存拿取数据的次数。这样,我们节约的时间将会有效的减少流水线堵塞时间。

这个架构的诞生之初起始是ARM想要设计一个大小核的处理器,大核,也就是A15用于做高性能,A7则是小核,处理那些低功耗就能完成的任务。

你马上就会发问了:每一个处理器都是只有私有的数据和指令缓存。假设我一个任务:第一次部署的时候发给了CPU1,CPU2等跑,且需要共享一部分内存的数据,之后我们其中一个CPU向共享数据里写了数据,其他的没有,那么,这不就出现了缓存不一致,我们咋保证程序的运行结果是确定的呢?

答案就是下半部分的Snoop Control Unit(SCU,侦听控制单元),它是计算机体系结构中的一个重要组件,主要用于多核处理器系统中,管理多个处理器核心之间的缓存一致性(Cache Coherency)。在多核系统中,每个核心通常都有自己的缓存(Cache),当多个核心访问共享内存时,可能会出现缓存不一致的问题。SCU的作用就是确保所有核心的缓存数据保持一致。

熟悉架构的朋友马上就想到了一个经典的协议:MESI协议:Modified, Exclusive, Shared, Invalid,我们这里不去做太详细的说明,知道这个协议保证了“缓存一致性”,这样无论如何都不会在架构层次出现数据不统一的问题。

SCU的可以实现这个功能,依赖于侦听(Snooping):SCU会监听总线上的所有内存访问请求。当某个核心试图修改共享数据时,SCU会通知其他核心,使它们更新或无效化相关的缓存数据。就是这样的原理!

讨论ARMv7a-cortex系列的运行模式

我们回忆一下,Intel的老式处理器是分为了四个运行模式:分别是特权级0~3。在不同的特权级下,处理器可以执行不同的代码。

ARM的就显得非常的丰富多彩了,我们给不同场景分配了非常多的模式。

ModeEncodingFunctionSecurity statePrivilege level
User (USR)10000Unprivileged mode in which most applications runBothPL0
FIQ10001Entered on an FIQ interrupt exceptionBothPL1
IRQ10010Entered on an IRQ interrupt exceptionBothPL1
Supervisor (SVC)10011Entered on reset or when a Supervisor Call instruction (SVC) is executedBothPL1
Monitor (MON)10110Implemented with Security Extensions. See Chapter 21Secure onlyPL1
Abort (ABT)10111Entered on a memory access exceptionBothPL1
Hyp (HYP)11010Implemented with Virtualization Extensions. See Chapter 22Non-securePL2
Under (UND)11011Entered when an undefined instruction executedBothPL1
System (SYS)11111Privileged mode, sharing the register view with User modeBothPL1
模式编码功能安全状态特权级别
用户 (USR)10000大多数应用程序运行的无特权模式两者PL0
FIQ10001在FIQ中断异常时进入两者PL1
IRQ10010在IRQ中断异常时进入两者PL1
超级用户 (SVC)10011在复位或执行超级用户调用指令 (SVC) 时进入两者PL1
监视器 (MON)10110使用安全扩展实现。仅安全PL1
中止 (ABT)10111在内存访问异常时进入两者PL1
Hyp (HYP)11010使用虚拟化扩展实现非安全PL2
未定义 (UND)11011在执行未定义指令时进入两者PL1
系统 (SYS)11111特权模式,与用户模式共享寄存器视图两者PL1

除了 User(USR)用户模式以外,其它8 种运行模式都是特权模式。这几个 运行模式可以通过软件进行任意切换,也可以通过中断或者异常来进行切换。大多数的程序都运行在用户模式,用户模式下是不能访问系统所有资源的,有些资源是受限的,要想访问这些 受限的资源就必须进行模式切换。但是用户模式是不能直接进行切换的用户模式下需要借助异常来完成模式切换,当要切换模式的时候,应用程序可以产生异常,在异常的处理过程中完 成处理器模式切换。 当中断或者异常发生以后,处理器就会进入到相应的异常模式,每一种模式都有一组寄 存器供异常处理程序使用,这样的目的是为了保证在进入异常模式以后,用户模式下的寄存器 不会被破坏。(这一点,Intel的80386架构是通过压栈和弹栈实现的)

寄存器

回忆我们学习Intel架构的时候,我们肯定会去学寄存器,经典的x86的寄存器实在是相当可怜的少,只有8个寄存器:EAX,EBX,ECX,EDX,ESI,EDI,EBP和ESP。对比看来,ARM架构简直就是富豪

寄存器名称/功能描述
R0通用寄存器
R1通用寄存器
R2通用寄存器
R3通用寄存器
R4通用寄存器
R5通用寄存器
R6通用寄存器
R7通用寄存器
R8通用寄存器
R9通用寄存器
R10通用寄存器
R11通用寄存器
R12通用寄存器
R13 (SP)堆栈指针
R14 (LR)链接寄存器
R15 (PC)程序计数器
CPSR当前程序状态寄存器
SPSR备份程序状态寄存器(有些运行模式下没有)

注意到的是:每一个模式下都是一个独立的寄存器的视图。这个视图下,蓝色部分的是这个模式独有的。FIQ 模式下 R8~R14 是独立的物理寄 存器。假如某个程序在 FIQ 模式下访问 R13 寄存器,那它实际访问的是寄存器 R13_fiq,如果 程序处于 SVC 模式下访问 R13 寄存器,那它实际访问的是寄存器 R13_svc。

所有的处理器模式都共用一个 CPSR 物理寄存器,因此 CPSR 可以在任何模式下被访问。CPSR 是当前程序状态寄存器,该寄存器包含了条件标志位、中断禁止位、当前处理器模式标志 等一些状态位以及一些控制位。

所有的处理器模式都共用一个 CPSR 必然会导致冲突,为此, 除了 User 和Sys 这两个模式以外,其他7 个模式每个都配备了一个专用的物理状态寄存器,叫 做 SPSR(备份程序状态寄存器),当特定的异常中断发生时,SPSR 寄存器用来保存当前程序状 态寄存器(CPSR)的值,当异常退出以后可以用 SPSR 中保存的值来恢复 CPSR。 因为 User 和 Sys 这两个模式不是异常模式,所以并没有配备 SPSR,因此不能在 User 和 Sys 模式下访问 SPSR,会导致不可预知的结果。由于 SPSR 是 CPSR 的备份,因此 SPSR 和 CPSR 的寄存器结构相同

位范围位名称描述
31N负标志位(Negative flag)。当结果为负数时置1。
30Z零标志位(Zero flag)。当结果为零时置1。
29C进位标志位(Carry flag)。当操作产生进位时置1。
28V溢出标志位(Overflow flag)。当操作产生溢出时置1。
27Q饱和标志位(Saturation flag)。当发生饱和时置1。
26-25IT[1:0]If-Then 状态位的一部分,用于Thumb指令集的条件执行。(此位通常和T(bit5)位一起表示当前所使用的指令集)
24JJazelle 状态位。用于指示处理器是否处于Jazelle状态。
23-20Reserved保留位,未使用。
19-16GE[3:0]大于或等于标志位(Greater than or Equal flags)。用于SIMD指令集。
15-10IT[7:2]If-Then 状态位的剩余部分,用于Thumb指令集的条件执行。
9E端序控制位(Endianness bit)。0表示小端序,1表示大端序。
8A异步中止屏蔽位(Asynchronous abort mask bit)。
7IIRQ 中断屏蔽位(IRQ interrupt mask bit)。
6FFIQ 中断屏蔽位(FIQ interrupt mask bit)。
5T状态位(State bit)。0表示ARM状态,1表示Thumb状态。
4-0M[4:0]模式位(Mode bits)。用于指示当前处理器模式。

后言

对了,这里必须说一下,我们马上进行裸机编程要,所以,就不得不理解一下,IMX6ULL是如何完成对寄存器命名的,不然我们连找寄存器都没地方找。

简单的说:SW_MUX_CTL_PAD_*负责设置管脚使用什么复用功能,SW_PAD_CTL_PAD_*用来设置管脚的属性,比如在输出时什么属性,输入时什么属性。

比如说我们的SW_MUX_CTL_PAD_BOOT_MODE0寄存器表达了实际上的外设功能。比如说这里就是一个BOOT0模式的选择。我们注意到还有一个SW_PAD_CTL_PAD_BOOT_MODE0。这个更有意思,他是控制我们的SW_MUX_CTL_PAD_BOOT_MODE0的行为的。所以说,实际上我们每一个逻辑寄存器几乎都被分成两个物理寄存器。一个做事,一个管做事的咋做事。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/26661.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从UNIX到Linux:操作系统进化史与开源革命

从UNIX到Linux:操作系统进化史与开源革命 一、操作系统:数字世界的基石 1.1 什么是操作系统? 操作系统(OS)是计算机系统的核心管理者,承担着三大核心使命: 硬件指挥官:直接管理C…

风控算法技术图谱和学习路径

风控算法技术图谱和学习路径可以从以下几个方面进行详细阐述: 一、风控算法技术图谱 基础知识与理论框架 风控算法技术的核心在于数据处理、特征工程、模型构建及优化。基础知识包括统计学、机器学习、深度学习、图算法等。例如,基于Python的智能风控书籍详细介绍了信贷风控…

Word 插入图片会到文字底下解决方案

一、现象描述 正常情况下,我们插入图片都是这样的。 但有时突然会这样,插入的图片陷于文字底部。 二、网上解决方案 网上有教程说,修改图片布局选项,从嵌入型改成上下型环绕。改完之后确实有用,但是需要手动拖动图片…

NO.22十六届蓝桥杯备战|一维数组|七道练习|冒泡排序(C++)

B2093 查找特定的值 - 洛谷 题⽬要求下标是从0开始的,和数组的下标是吻合的,存放数据应该从下标0开始n的取值范围是1~10000数组中存放的值的绝对值不超10000,说明int类型就⾜够了找到了输出下标,找不到要输出-1,这⼀点…

SQL server2022的详细安装流程以及简单使用

鉴于SQL Server2008R2版本过于老旧,本文主要讲述如何安装SQL Server 2022。 本文主要详细介绍SQL server2022的详细安装流程以及简单使用,以《数据库系统概论(第5版)》的第79页—第80页为例,详细介绍如何使用SQL serv…

泰勒公式详解与应用

前言 本文隶属于专栏《机器学习数学通关指南》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见《机器学习数学通关指南》 正文 📝 一句话总结 泰…

Spring Data JPA 中的分页实现:从 BasePage 到 Pageable

文章目录 Spring Data JPA 中的分页实现:从 BasePage 到 Pageable背景:为什么需要分页?认识 BasePage 类深入 toPageable() 方法1. 处理页码和页面大小2. 处理排序方向3. 处理排序字段4. 生成 Pageable 对象 实战:如何使用 BasePa…

Android SystemUI开发(一)

frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUI.java frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIService.java 关键文件 SystemUI 关键服务 简介 Dependency.class:处理系统依赖关系,提供资源或服…

Python----Python爬虫(多线程,多进程,协程爬虫)

注意: 该代码爬取小说不久或许会失效,有时候该网站会被封禁,代码只供参考,不同小说不同网址会有差异 神印王座II皓月当空最新章节_神印王座II皓月当空全文免费阅读-笔趣阁 一、多线程爬虫 1.1、单线程爬虫的问题 爬虫通常被认为…

Linux(ftrace)__mcount的实现原理

Linux 内核调试工具ftrace 之(_mcount的实现原理) ftrace 是 Linux 内核中的一种跟踪工具,主要用于性能分析、调试和内核代码的执行跟踪。它通过在内核代码的关键点插入探针(probe)来记录函数调用和执行信息。这对于开…

网络层IP协议

基本概念 主机:有IP地址,但是不进行路由控制的设备。 路由器:有IP地址,又能进行路由控制。 节点:主机和路由器的统称。 协议头格式 4位版本号:指定IP协议的版本。对于IPv4来说,就是4 4位首…

计算机毕业设计SpringBoot+Vue.js在线课程管理系统(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

【腾讯云】AI驱动TDSQL-C Serveress 数据库技术实战营-如何是从0到1体验电商可视化分析小助手得统计功能,一句话就能输出目标统计图

欢迎来到《小5讲堂》 这是《腾讯云》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 背景效果图流程图创建数据库 基本信息数据库配置设置密码控制台开…

Java里的ArrayList和LinkedList有什么区别?

大家好,我是锋哥。今天分享关于【Java里的ArrayList和LinkedList有什么区别?】面试题。希望对大家有帮助; Java里的ArrayList和LinkedList有什么区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 ArrayList 和 Lin…

盛京开源社区加入 GitCode,书写东北开源生态新篇章

在数字化转型与开源技术蓬勃发展的浪潮下,开源社区已成为推动技术创新的核心力量。盛京开源社区(SJOSC)作为沈阳地区的开源交流平台,始终致力于连接开发者、企业及高校,构建区域技术生态圈。 现在,盛京开源…

SQL Server 创建用户并授权

创建用户前需要有一个数据库,创建数据库命令如下: CREATE DATABASE [数据库名称]; CREATE DATABASE database1;一、创建登录用户 方式1:SQL命令 命令格式:CREATE LOGIN [用户名] WITH PASSWORD ‘密码’; 例如,创…

vue3:三项目增加404页面

一、路由添加 1、官网地址 带参数的动态路由匹配 | Vue Routerhttps://router.vuejs.org/zh/guide/essentials/dynamic-matching.html 2、复制核心语句 { path: /:pathMatch(.*)*, name: NotFound, component: NotFound } 3、粘贴到路由index.js中 4、建立页面 在view文件夹…

GitCode 助力 JeeSite:开启企业级快速开发新篇章

项目仓库(点击阅读原文链接可直达前端仓库) https://gitcode.com/thinkgem/jeesite 企业级快速开发的得力助手:JeeSite 快速开发平台 JeeSite 不仅仅是一个普通的后台开发框架,而是一套全面的企业级快速开发解决方案。后端基于 …

矽电股份业绩下滑:毛利率也欠佳,应收账款攀升回款比率放缓

《港湾商业观察》施子夫 近期,矽电半导体设备(深圳)股份有限公司(以下简称,矽电股份)的深交所IPO注册获得生效。 公开信息显示,2022年6月,矽电股份的创业板IPO获受理,保…

MySQL实现文档全文搜索,分词匹配多段落重排展示,知识库搜索原理分享

一、背景 在文档搜索场景中,高效精准的搜索功能至关重要,能提升检索效率,为用户提供精准、快速的信息获取体验,提高工作效率。在文档管理系统里,全文搜索是非常重要的功能之一。随着文档数量增长,如何快速…