ARM裸机篇(一)——i.MX6ULL介绍

linux系列目录:
linux基础篇(一)——GCC和Makefile编译过程
linux基础篇(二)——静态和动态链接
ARM裸机篇(一)——i.MX6ULL介绍
ARM裸机篇(二)——i.MX6ULL启动过程
ARM裸机篇(三)——i.MX6ULL第一个裸机程序
ARM裸机篇(四)——重定位和地址无关码
ARM裸机篇(五)——异常和中断
linux系统移植篇(一)—— linux系统组成
linux系统移植篇(二)—— Uboot使用介绍
linux系统移植篇(三)—— Linux 内核使用介绍
linux系统移植篇(四)—— 根文件系统使用介绍
linux驱动开发篇(一)—— Linux 内核模块介绍
linux驱动开发篇(二)—— 字符设备驱动框架
linux驱动开发篇(三)—— 总线设备驱动模型
linux驱动开发篇(四)—— platform平台设备驱动


文章目录

  • 一、i.MX6ULL处理器介绍
  • 二、ARM架构介绍
    • 1、处理器命名的发展
    • 2、ARM处理器程序运行的过程
    • 3、指令集的发展
  • 三、ARM处理器模式和寄存器
    • 1.处理器模式
    • 2.寄存器
      • 2.1、状态寄存器
      • 2.2 协处理器

一、i.MX6ULL处理器介绍

i.MX6ULL是NXP基于ARM Cortex-A7架构的单核处理器家族,主频可以高900MHz。

二、ARM架构介绍

1、处理器命名的发展

以前, ARM使用一种基于数字的命名法。在早期(1990s),还在数字后面添加字母后缀,用来
进一步明细该处理器支持的特性。就拿ARM7TDMI来说, T代表Thumb指令集, D是说支持JTAG调试(Debugging), M意指快速乘法器, I则对应一个嵌入式ICE模块。后来,这4项基本功能成了任何新产品的标配,于是就不再使用这4个后缀——相当于默许了。但是新的后缀不断加入, 包括定义存储器接口的,定义高速缓存的,以及定义“紧耦合存储器(TCM) ”的,于是形成了新一套命名法,这套
命名法也是一直在使用的。
到了架构7时代, ARM改革了一度使用的, 冗长的、 需要“解码”的数字命名法,转到另一种看起
来比较整齐的命名法。比如, ARMv7的三个款式都以Cortex作为主名。这不仅更加澄清并且“精装”
了所使用的ARM架构,也避免了新手对架构 和系列 的混淆。

三、ARM处理器模式和寄存器

1.处理器模式

处理器可以使用直接写入CPSR模式位来实现模式之间切换。更常见的是,处理器会由于异常事件而自动切换模式。在用户模式下,无法改变处理器模式的PSR位[4:0]来切换模式和A,I和F位来使能或者禁止异步中止、IRQ和FIQ。

2.2 协处理器

协处理器,顾名思义它也是一个处理器,不过它是为了“协助”主处理器而存在的。ARM架构里有16个协处理器,CP0~CP15。编程时涉及CP15比较多。
CP15 协处理器一般用于存储系统管理, 但是在中断中也会使用到, CP15 协处理器一共有16 个 32 位寄存器。 CP15 协处理器的访问通过如下另个指令完成:
MRC: 将 CP15 协处理器中的寄存器数据读到 ARM 寄存器中。
MCR: 将 ARM 寄存器的数据写入到 CP15 协处理器寄存器中。
MRC 就是读 CP15 寄存器, MCR 就是写 CP15 寄存器, MCR 指令格式如下:
MCR{cond} p15, , , , ,
cond:指令执行的条件码,如果忽略的话就表示无条件执行。
opc1:协处理器要执行的操作码。
Rt: ARM 源寄存器,要写入到 CP15 寄存器的数据就保存在此寄存器中。
CRn: CP15 协处理器的目标寄存器。
CRm: 协处理器中附加的目标寄存器或者源操作数寄存器,如果不需要附加信息就将CRm 设置为 C0,否则结果不可预测。
opc2: 可选的协处理器特定操作码,当不需要的时候要设置为 0。

MRC 的指令格式和 MCR 一样,只不过在 MRC 指令中 Rt 就是目标寄存器,也就是从CP15 指定寄存器读出来的数据会保存在 Rt 中。而 CRn 就是源寄存器,也就是要读取的写处理器寄存器。
MRC 的指令格式和 MCR 一样,只不过在 MRC 指令中 Rt 就是目标寄存器,也就是从CP15 指定寄存器读出来的数据会保存在 Rt 中。而 CRn 就是源寄存器,也就是要读取的写处理器寄存器。
假如我们要将 CP15 中 C0 寄存器的值读取到 R0 寄存器中,那么就可以使用如下命令:
MRC p15, 0, r0, c0, c0, 0

c1 寄存器
c1 寄存器同样通过不同的配置,其代表的含义也不同,如图:

获取到 GIC 基地址以后就可以设置 GIC 相关寄存器了,GIC是中断控制块,在讲解到中断的时候,会用到此寄存器。

总结:
通过配置协处理器的 c1 寄存器可以使能或禁止 MMU、 I/D Cache 等;通过 c12 寄存器可以设置中断向量偏移;通过 c15 寄存器可以获取 GIC 基地址。

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24687 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年6月19日
下一篇 2022年6月19日

相关推荐