ARM v8 Cortex R52内核 06 初始化 Initialization

ARM v8 Cortex R52内核 06 初始化 Initialization

6.1 初始化 Initialization

Cortex-R52 处理器提供了一种机制,可以在复位时初始化所有程序员可见的复位,包括没有被架构定义重置值的寄存器。

在Cortex-R52处理器大多数架构寄存器,例如r0-r14、和s0-s31、和包含Advanced SIMD的d0-d31,在复位后具有未知值,。因此,在使用这些寄存器之前,必须为所有模式初始化他们,可以使用 immediate-MOV 指令 或 PC-relative 加载指令。

在复位时,Current Program Status Register (CPSR) 和一些系统寄存器字段被赋予已知值。更多关于CPSR和系统寄存器的信息请看 Arm® Architecture Reference Manual Armv8, for Armv8-A architecture profile.

Cortex-R52寄存器提供了一直可以在复位时将所有程序员课件的寄存器初始化为固定值的机制,详细请见 3.2 Register summary on page 3-39.

除此之外,在运行应用Application之前,可能需要:

  • 将特定值编程到各个寄存器中,例如:堆栈指针 Stack Pointers;
  • 启用各种功能,例如:错误纠正 Error Correction;
  • 将特定值写入到内存中,例如:TCM。

6.1.1 MPU

在使用MPU之前,必须要编程并至少启用一个区域,并启用SCTLR或HSCTLR。

除非至少有一个MPU区域被编程和激活,否则不要启用MPU。如果已经启用MPU,在使用TCM之前,必须编程MPU区域去覆盖TCM区域,以便给他们访问权限。

6.1.2 Flating-point Unit

在执行浮点指令之前,必须启用 Advanced SIMD或 Floating-point Unit (FPU)。

激活FPU遵照如下:

  • 启用对FPU的访问,参照 3.2 Register summary on page 3-39.
  • 通过在FPEXC寄存器中设置EN位激活FPU。

6.1.3 Cache

如果Cortex-R52处理器已经构建了指令或数据缓存,在被处理器使用之前,它们会自动失效,除非CFGL1CACHEINVDISx被连接到高电平。

这个操作永远不会报告任何ECC错误。

6.2 TCM

你可以将TCMs用于指令或数据。你还可以配置Cortex-R52处理器从复位时使用ATCM。

6.2.1 Preloading TCMs

您可以使用存储指令或AXIS接口将数据写入TCMs。

根据选择的方法,可能需要以下内容:

  • 所使用的SoC上的特定硬件,例如DMA engine;
  • Boot Code;
  • 连接到处理器的调试器。

预加载TCM的方法包括:

Memory copy with running boot code

– 内存复制与运行引导代码

Boot Code 包括一个内存复制例程,它从外部内存读取数据,并将其写入适当的TCM中。您必须启用TCM才能执行此操作,在复制过程中可能需要为TCM提供一个基地址,而在运行应用程序时则需要另一个基地址。

Copy data from the Debug Communications Channel

– 将数据从调试通信通道复制

Boot Code 包括一个从调试通信通道 Debug Communications Channel(DCC)读取数据并将其写入TCM的例程。调试主机通过向处理器APB调试接口上的适当寄存器写入数据来提供此操作所需的数据。

Execute code in debug halt state

– 在调试停住的状态下执行代码

调试主机将Cortex-R52处理器置于调试停止状态,然后通过指令传输寄存器 Instruction Transfer Register (EDITR)向其输入指令。作为先前描述的两种方法之外的替代方案,Cortex-R52处理器执行这些指令。

DMA into TCM

SoC包括一个DMA设备,它从ROM中读取数据,并通过AXIS接口将其写入到TCMs中。

6.2.2 Preloading TCMs with ECC

如果存在的话,Cortex-R52处理器不会初始化TCM RAM中的错误码位。在启用ECC的情况下读取RAM位置之前,必须初始化错误码位。

要更新一个TCM位置而不检测到错误,要么必须禁用ECC检查,要么写入必须具有与数据块对齐且相同宽度的方式,并按照本节所描述的错误方案进行保护。

当离开复位时,您可以使用CFGTCMBOOTx信号来启用ATCM,并使用CFGRAMPROTEN信号来启用TCM(和缓存)ECC。当核心运行时,可以使用3.3.76 Memory Protection Control Register on page 3-166.来启用和禁用TCM ECC。

可以根据以下规则打开或关闭错误检查,初始化TCM RAM。

  • 如果使用AXIS接口来初始化启用ECC的TCM,则AXI从设备事务必须从128位对齐地址开始,写入连续的内存块,并使块中的所有字节都启用。
  • 如果通过在Cortex-R52处理器上运行代码来进行初始化,则最好通过一系列存储操作将整个TCM内存写入如下:
    • 对于BTCM或CTCM,使用存储字 Store Word (STR)、存储两个字 Store Two Words(STRD)或存储多个字 Store Multiple Words(STM)指令到32位对齐的地址。
    • 对于ATCM,使用STRD或带有64位对齐地址的STM。

注意:您可以使用Cortex-R52处理器的对齐检查功能来确保内存访问是32位对齐的,但没有64位对齐的检查。如果您正在使用STRD或STM指令,如果地址不是32位对齐,则会生成一个对齐错误。要使STR指令具有相同行为,请在 3.3.92 System Control Register on page 3-185 中,或者 3.3.53 Hyp System Control Register on page 3-134.中的严格对齐检查。

6.2.3 Using TCMs from reset

Cortex-R52处理器的每个核心都有一个主要输入,当它被断言时,阻止核心在复位后开始执行指令。这使得TCMs能够在核心启动之前预加载。如果在取消断言之前发出外部调试请求,在执行任何指令之前,核心会进入调试停机状态。

可以使用CFGTCMBOOTx信号来在复位时启用ATCM。这使您能够配置处理器从TCM引导,但是为了实现这一点,首先必须预加载引导代码到TCM中。

在处理器复位时,可以置位CPUHALTx输入以防止处理器在复位后获取和执行指令。当以这种方式暂停处理器时,可以预加载TCMs中的适当数据。当取消置位CPUHALTx输入时,处理器将按照正常方式从复位向量地址开始获取指令。

注意:当CPUHALTx已经取消置位以启动处理器获取时,除非核心处于core warm或上电复位状态,否则不得再次置位。

翻译来源:

Arm® Cortex®-R52 Processor Technical Reference Manual.

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

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

相关文章

Python爬虫学习(二):xpath解析html

--xpath教程地址可参照&#xff1a;XPath 教程 被解析的html示例&#xff1a;<html> <body> <div><ul><li class"item-0"><a href"link1.html">first item</a></li><li class"item-1">&l…

可视化大屏的应用(12):在智慧制造中的十大价值

一、什么是智慧制造 智慧制造是指通过信息技术、物联网、人工智能等先进技术的应用&#xff0c;实现生产过程的数字化、网络化、智能化&#xff0c;从而提高生产效率、降低成本、提高产品质量和灵活性的一种制造模式。 智慧制造的核心是将传统的制造过程与先进的信息技术相结合…

前端自动化测试-Jest

前端自动化测试 Jest官网&#xff1a;https://jestjs.io 安装方式 npm install --save-dev jest yarn add --dev jest cnpm add --save-dev jest 使用方法 所有以 .test.js 结尾的都是测试文件 基础用法示例 num.js&#xff1a; export function getSum (a, b) {return a b…

java下载网络上的文件、图片保存到本地 FileUtils

java下载网络上的文件、图片保存到本地 FileUtils 1. 引入FileUtils依赖2. 实现代码3. 输出结果 1. 引入FileUtils依赖 <!--FileUtils依赖--> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency><groupId>commons-io&l…

LightM-UNet:Mamba 辅助的轻量级 UNet 用于医学图像分割

文章目录 摘要1 简介2、方法论2.1、架构概述2.2、编码器块2.3、瓶颈块2.4、解码器块3、实验4、结论摘要 https://arxiv.org/pdf/2403.05246.pdf UNet及其变体在医学图像分割中得到了广泛应用。然而,这些模型,特别是基于Transformer架构的模型,由于参数众多和计算负载大,使…

uni-app + vue3实现input输入框保留2位小数的2种方案

首先说明输入框中的格式限制如下&#xff1a; &#xff08;1&#xff09;当第一位为0时&#xff0c;第二位只能输入小数点&#xff0c;且不能输入其他数字&#xff08;如00&#xff09; &#xff08;2&#xff09;当第一位不为0时&#xff0c;后边不限制 &#xff08;3&…

手把手教你从零搭建ChatGPT网站AI绘画系统,(SparkAi系统V6)GPTs应用、DALL-E3文生图、AI换脸、垫图混图、SunoAI音乐生成

一、系统前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持…

智能Java开发工具IntelliJ IDEA v2024.1震撼发布——让开发工作更简单!

IntelliJ IDEA&#xff0c;是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具&#xff0c;尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。 立…

2024年第十四届MathorCup数学应用挑战赛B题思路分享(妈妈杯)

B题 甲骨文智能识别中原始拓片单字自动分割与识别研究 甲骨文是我国目前已知的最早成熟的文字系统&#xff0c;它是一种刻在龟甲或兽骨上的古老文字。甲骨文具有极其重要的研究价值&#xff0c;不仅对中国文明的起源具有重要意义&#xff0c;也对世界文明的研究有着深远影响。…

必须掌握的这4种缓存模式

概述 在系统架构中&#xff0c;缓存可谓提供系统性能的简单方法之一&#xff0c;稍微有点开发经验的同学必然会与缓存打过交道&#xff0c;起码也实践过。 如果使用得当&#xff0c;缓存可以减少响应时间、减少数据库负载以及节省成本。但如果缓存使用不当&#xff0c;则可能…

java 邮件发送表格

邮件发送表格 问题导入效果图 实现方案1. 拼接HTML文件&#xff08;不推荐&#xff09;2. excel 转HTML使用工具类来转化依赖工具类代码示例 使用已工具包 如 aspose-cells依赖代码示例 3.使用模板生成流程准备模板工具类代码示例 问题导入 在一些定时任务中&#xff0c;经常会…

C语言之位运算符

一、原码反码补码的转换 ①对于正数而言&#xff0c;它的原码反码补码 eg&#xff1a; 以8bit的数据存储为例讲解。 10 原码&#xff1a;00001010反码&#xff1a;00001010补码&#xff1a;00001010 在内存中以补码存储②对于负数而言 负数的反码&#xff1a;符号位不变&am…

【STM32G431RBTx】备战蓝桥杯嵌入式→省赛试题→第十四届

文章目录 前言一、题目二、模块初始化三、代码实现interrupt.h:interrupt.c:main.h:main.c: 四、完成效果五、总结 前言 无 一、题目 二、模块初始化 1.LCD这里不用配置&#xff0c;直接使用提供的资源包就行 2.KEY, 四个按键IO口都要配置&#xff0c;分别是PB0, PB1,PB2,PA…

Unity单个物体绑定多个相机在轨道上移动,录制不同角度视频

环境搭建 下载Cinemachine插件安装 打开包管理器 下载cinemachine插件 创建轨道 使用dolly track 创建轨道 右侧可以删减关键点&#xff0c;注意调整y坐标 创建cart 把前面的轨道拖到path中&#xff0c;注意这里的speed要设定不为0才会动 设置VItual Camera 根据需…

使用Code开发Django_模版和CSS

转到定义 和 查看定义 在使用Django或任何其他库的过程中,我们可能需要检查这些库中的代码。VS Code提供了两个方便的命令,可以直接导航到任何代码中的类和其他对象的定义: 转到定义 在Python开发环境中,我们可以轻松地对函数、类或者其他导入模块中的成员使用“Go to Def…

【C 数据结构】双向链表

文章目录 【 1. 基本原理 】【 2. 双向链表的 创建 】实例 - 输出双向链表 【 3. 双向链表 添加节点 】【 4. 双向链表 删除节点 】【 5. 双向链表查找节点 】【 7. 双向链表更改节点 】【 8. 实例 - 双向链表的 增删查改 】 【 1. 基本原理 】 表中各节点中都只包含一个指针&…

【算法练习】30:快速排序学习笔记

一、快速排序的算法思想 原理&#xff1a;快速排序基于分治策略。它的基本思想是选择一个元素作为“基准”&#xff0c;将待排序序列划分为两个子序列&#xff0c;使得左边的子序列中的所有元素都小于基准&#xff0c;右边的子序列中的所有元素都大于基准。这个划分操作被称为分…

2024年 最火的Python学习路线

写在前面&#xff1a;Python是一种广泛使用的高级编程语言&#xff0c;以其简洁易读的代码和强大的库支持而受到开发者的青睐。作为一名刚开始学习Python的新手&#xff0c;或许您会对如何系统地学习这门语言感到困惑。接下来&#xff0c;我将为您提供一个详细的Python学习路线…

Elasticsearch部署安装

环境准备 Anolis OS 8 Firewall关闭状态&#xff0c;端口自行处理 Elasticsearch&#xff1a;7.16.1&#xff08;该版本需要jdk11&#xff09; JDK&#xff1a;11.0.19 JDK # 解压 tar -zxvf jdk-11.0.19_linux-x64_bin.tar.gz# 编辑/etc/profile vim /etc/profile# 加入如下…

Halcon颜色抽取-多产品颜色(MLP)

前言 //颜色抽取&#xff0c;单产品多区域 https://blog.csdn.net/m0_51559565/article/details/135216905由于在颜色抽取上面&#xff0c;我已经发了一篇博客了&#xff0c;是单产品多区域的情况。所以对于细分原理上就不过多的描述了。 本文主要是针对多产品多颜色的情况进行…