第2章第1节 ARM7芯片基本结构

ARM芯片、内核、架构、指令集的联系与区别 问题1:单片机和CPU的区别在嵌入式领域ARM芯片和CPU有什么区别呢?其实随着嵌入式科技的不断发展,单片机(像ARM芯片)和CPU的界限越来越模糊,我们暂且可以认为ARM芯片就是一个CPU,或者暂且认为单片机就相当于一个CPU。问题2:什么是ARM芯片凡是采用ARM内核的芯片(或者凡是采用ARM内核的CPU)都是ARM芯片。例如高通的OMAP36X0系列处理器(Droid 2和Droid X用的... 阅读详情

源码请在https://github.com/ifreecoding/MbedRtos.git下载

第1节 ARM7芯片基本结构

ARM7芯片构架比较简单,32bits线性地址空间统一排列,任何地址都是唯一的,不同的片上资源及外设被分配到不同的地址空间,不同数据结构的指针固定为4字节长度,这相对51芯片来说方便很多也清晰很多,从用户编程的角度来看入手比较简单,因此本手册首先选用ARM7芯片来作为开发操作系统的硬件平台。选用的ARM7芯片,是ADI公司的一款芯片——Aduc7024。

Aduc7024具有片上AD、DA、GPIO、UART、I2C、SPI、TIMER、WDT、PWM等外设,具有62KBytes的内部FLASH程序空间和8KBytes的内部RAM空间,无需外挂ROM和RAM,芯片的具体细节可以查阅附录中的参考文档1。在我们的开发过程中,我们主要使用了芯片的UART,也就是串口,作为打印数据的端口,输出到PC上来观察操作系统的运行。

当我们完成了操作系统的一些基本功能后,我们会将Wanlix和Mindows移植到另外一款ARM芯片上——Cortex内核的ARM芯片,并在此芯片上继续完善Mindows的功能。这么做,第一是让读者了解wanlix和Mindows的移植过程,第二是让读者在移植过程中体会操作系统与用户代码无关的重要性,第三,Cortex内核芯片功能更强、资源更丰富,可以在此芯片上实现更多的功能。Cortex内核是ARM公司新推出的一种内核,其功能强大,性价比高,后面章节我们再详细讨论,我们首先来了解ARM7芯片。

ARM7支持7种处理器模式,分别是USR模式、SYS模式、SVC模式、ABT模式、UND模式、IRQ模式和FIQ模式,虽然有这么多种模式但可以归纳为2大类:正常工作模式和中断工作模式。

正常工作模式包括USR模式和SYS模式,USR模式没有任何特性,是芯片最常用的模式,芯片一般都是在USR模式下运行的。SYS模式与USR模式也没什么区别,仅比USR模式权限大些,能访问到芯片的特殊寄存器,适合操作系统使用(但我不知道怎么使用,本手册没有使用该模式)。

而中断工作模式又分为异常中断模式和正常中断工作模式。芯片无法正常运行时就会进入异常中断模式,芯片进入异常中断模式后软件就无法再继续提供原有功能了,异常中断模式仅是为定位问题而提供的。异常中断模式包括ABT模式和UND模式,指令或数据出错时就会进入ABT模式,例如,ARM模式下的一条指令是需要访问4字节对齐的地址,如果实际访问的地址不是4字节对齐的话,这时芯片就会进入ABT模式,程序PC指针就会跳转到ABT的异常中断向量,执行ABT的中断服务程序。如果用户为ABT模式编写了定位信息程序并挂到ABT异常中断上,那么就可以利用这些代码输出产生ABT异常的原因了。UND模式与ABT模式的工作原理是一样的,只不过UND模式是在遇到没有定义的指令时才会进入。

正常中断模式是为用户实现系统功能而设计的中断模式,它是预先设计好的,是系统运行所必须的。正常中断模式又分为IRQ模式、FIQ模式和SVC模式。IRQ模式就是普通的中断模式,当芯片产生中断时就会进入IRQ模式,等同于其它芯片的中断。FIQ是快速中断模式,它比IRQ中断优先级高,备份、还原中断现场时间更少些,也就是说能更优先更快速的产生中断,除此之外它与RIQ中断没什么区别。SVC是软中断模式,由软件触发,常用于操作系统中,软中断在本手册将会有非常重要的应用。

 

图 2  ARM7工作模式

程序可以看做是指令+数据的组合,程序运行的过程就是不断的取出指令并按照指令不断计算数据的过程,在这个计算过程中需要使用寄存器来存放指令和数据。寄存器与芯片内核直接相连,因此芯片操作它们的速度要远快于操作内存的速度。但寄存器的数量较少,因此指令和数据平时是存放在FLASH或者RAM中的,只有当使用时才会放入寄存器进行运算。

每种芯片内部都会有寄存器,不同芯片的寄存器种类、数量各不相同,但都会有下面这3种:一、PC(Program Counter)寄存器,PC寄存器中存放的是当前执行的指令所在的地址,芯片是通过PC寄存器找到其需要执行的指令的,更改PC寄存器就会发生指令跳转,当我们在C语言里调用函数或者产生分支跳转时,实际上就是通过改变PC寄存器的值实现的。二、状态寄存器,状态寄存器里都会有N、Z、C、V这4个状态标志,N用来表示数据是有符号数还是无符号数,Z用来表示0还是非0,C是进位标志,当产生进、借位时影响的就是这个标志,V是溢出标志,数据运算过程中产生数据溢出了就会更改此标志。三、通用寄存器,这些通用寄存器用来临时存放数据,供芯片运算时使用,某些通用寄存器也可能会有其它专有的功能,各个芯片的定义不一样。

ARM7芯片每种工作模式下有17个寄存器可以使用,分别是R0~R15和CPSR寄存器,

其中R15寄存器又可以称之为PC寄存器,CPSR是状态寄存器,其余的可以认为是通用寄存器,在这些通用寄存器里,R13和R14是比较特殊的,R13寄存器又可以称之为SP(Stack pointer)寄存器,用来指示当前堆栈的位置,R14寄存器又可以称之为LR(Link register)寄存器,当使用某些跳转指令时,硬件会自动将跳转前的指令存入LR寄存器中,以供返回时使用。

    前面说了ARM7芯片有7种工作模式,有些寄存器是这7种模式共用的,但ARM7芯片也为每种不同的工作模式提供了专有的寄存器,进入不同模式便可以使用不同模式下的专有寄存器,如下图所示,ARM7芯片共有37个寄存器,但每种模式仅有17个寄存器可以使用。

图 3  ARM7工作模式与寄存器

图3中寄存器左下角不带阴影的是不可备份寄存器,各个模式共用,带阴影的是可备份寄存器,为每个模式所单独拥有,只有进入该模式才可以使用。

不可备份寄存器对各个模式来说是共用的,因此,为防止切换后模式破坏切换前模式中的数据,在模式切换后的需要使用软件将这些不可备份寄存器保存起来,当切换回原模式后再恢复这些不可备份寄存器。可备份寄存器则无需软件保存,硬件会在切换模式时自动将切换后模式下的可备份寄存器替换为切换前模式下的可备份寄存器,虽然名字一样,但实际上的物理空间是不同的,因此在不同模式下尽管使用了相同的可备份寄存器,但实际上并没有数据上的冲突,看下面的例子:

在USR模式下将R0和R13的值置为0:

MOV R0, #0

MOV R13, #0

此时,发生了从USR模式到IRQ模式的切换,然后在IRQ模式下将R0和R13加1:

ADD R0, R0, #1

ADD R13, R13, #1

R0是不可备份寄存器,因此上述操作是对同一个R0寄存器操作的。在USR模式下先将R0置为0,然后在IRQ模式下将R0加1,最后R0的值为1。而R13是可备份寄存器,在USR模式下先将USR模式下的R13置为0,进入IRQ模式后将IRQ模式下的R13加1,最后USR模式下的R13的值仍为0,而IRQ模式下的R13值在它原有的基础上加了1。在上述操作中,虽然软件使用的都是R13这同一个名字,但芯片会根据不同模式而对不同模式下的R13寄存器进行操作,上述对R13的操作就是对不同的2个R13寄存器进行的操作。

FIQ的可备份寄存器是R8~R14,其它模式的可备份寄存器是R13~R14,包括IRQ模式,因此切换到FIQ模式时需要备份的寄存器少一些,因此FIQ要比IRQ快一些。

CPSR寄存器不允许被软件随意改写,改写CPSR寄存器是需要权限的,只有特权模式,即非USR模式才可改写,CPSR寄存器的结构如下:

图 4  ARM7 CPSR寄存器结构

其中bits27~31为程序运行时的进位、溢出等标志,前面已经说过一些,具体含义请读者自行查阅附录中的参考文档2。bits0~4为芯片工作状态标志,对应关系为:

图 5  ARM7 芯片模式位

CPSR与R寄存器不同,所有模式下均是使用同一个CPSP寄存器,在模式切换时硬件会自动将切换前模式的CPSR寄存器保存到切换后模式的SPSR寄存器中,然后切换后的模式会继续使用CPSR寄存器作为自己的状态寄存器,当需要切换回原有模式时,硬件会自动将CPSR从当前模式的SPSR寄存器恢复过来。

ARM7芯片软件的运行完全是由上述的这些寄存器决定的,只要能合理的修改这些寄存器就能控制软件的运行,操作系统就是通过备份、还原、更改这些寄存器来控制程序执行流程的,进而实现任务之间的切换。由于C语言无法访问到这些寄存器,因此必须使用汇编语言才能对这些寄存器进行操作,下节我们将了解一些ARM7的汇编语言,以便理解操作系统的任务切换过程。

移动终端基带芯片基本架构 基带数字处理功能以及手机基本外围功能都集中到单片片上系统(SOC)中,其基本构架都采用了微处理器+数字信号处理器(DSP)的结构,微处理器和DSP的处理能力一直增强。微处理器是整颗芯片的控制中心,会运行一个实时嵌入式操作系统(如Nucleus PLUS)。DSP子系统是基带处理的重点,其中包含了许多硬件加速器和基带专用处理模块,完成所有物理层功能。本文概述了单模和多模基带芯片的架构。 阅读详情

相关推荐

第2章ARM技术与ARM体系结构—ARM内核模块

ARM处理器一般都带有嵌入式追踪宏单元ETM(Embedded Trace Macro),ETM是ARM公司自己推出的调试工具,如图2-1所示。 ARM处理器都支持基于JTAG(Joint Test Action Group,联合测试行动小组)的调试方法。它利用芯片内部的嵌入式ICE来控制ARM内核操作,可完成单步调试和断点调试等操作。当CPU处理单步执行完毕或到达断点处时,就可以在宿主机端...

xiezhi123456的博客 968

uboot(三)

Bootloader启动大多数都分为两个阶段。第一阶段主要包含依赖于CPU的体系结构硬件初始化的代码,通常都用汇编语言来实现;第二阶段通常用C语言完成,以便实现更复杂的功能,也使程序有更好的可读性和可移植性。 U-Boot的启动代码分布在start.S、low_level_init.S、 board.c和main.c文件中。 start.S 是U-Boo...

weixin_30822451的博客 111

arm7 可用的中文手册

arm7手册,可以解压使用;

嵌入式(3)ARM7指令系统

ARM文件类型 *.c,C语言 *.s,汇编 ARM指令集 分为16位thumb指令集与32位ARM指令集 ;注释,end结束 ARM每条指令4字节长度 ARM指令分为目的操作数,第一第二操作数 第二操作数12位,三种形式 ARM寻址方式 这个简单,和微机原理机组差不多。 阅读多为右往左读。 eg: add r0,r1,r2 r1+r2放入r0 第一位为目的寄存器,后两个为操作数 ...

qq_43430273的博客 599

各种NXP的ARM7芯片原理图

包括lpc21xx,lpc22xx,lpc23xx,lpc24xx 很全面

ARM7 TDMI芯片手冊

ARM7 TDMI 手冊 ARM7芯片的詳細說明

西邮嵌入式系统复习

期末复习知识点总结 第一次整理提示:以下是本篇文章正文内容,下面案例可供参考1.1.0 嵌入式系统发展(选择 4个阶段)无操作系统的单片机阶段–>以微控制器为基础、以简单操 作系统为核心的嵌入式系统阶段–>以通用的嵌入式操作系 统和系统级芯片为标志的嵌入式系统阶段–>面向Internet 的应用阶段1.1.1 嵌入式系统的定义(简答)嵌入式系统是以应用为中心,以计算机技术为基础,并且软 硬件可裁剪。适用于应用系统对功能、可靠性、成本、体 积、功耗有严格要求的专用计算机系统。

m0_46064819的博客 3197

ARM7芯片LPC2104手册

LPC2104手册,ARM7微控制器芯片

ARMv7,ARM7,ARMA7有什么区别

ARMv7,ARM7,ARMA7有什么区别

XXY2083123843的博客 5867

避坑指南:将大华官方Java SDK无缝迁移到SpringBoot 2.x项目的完整流程

本文详细介绍了如何将大华官方Java SDK无缝迁移到SpringBoot 2.x项目,重点解决内存管理、连接池设计和异步处理等核心问题。通过设备连接池化、异步非阻塞接口改造和内存管理优化,实现刷卡、刷脸等认证功能的高效整合,提升Web服务的稳定性和性能。

weixin_42557830的博客 417

ESP8266 + MQTT :如何实现 LED 灯的远程控制

MQTT 是轻量级的、灵活的物联网消息交换和数据传递协议,致力于为 IoT 开发人员实现灵活性与硬件/网络资源的平衡。 NodeMCU 是一个开源的物联网平台。它使用 Lua 语言编程。该平台基于eLua开源项目,底层使用ESP8266 sdk 0.9.5版本。 在此项目中我们将实现 NodeMCU(ESP8266) 与 EMQ X Cloud 运营和维护的免费公共 MQTT 服务器远程控制 LED 灯,并使用 Arduino IDE 来对 NodeMCU ESP8266 进行编程。 EMQ X Cloud

emqx_broker的博客 3357

深入浅出ARM7与内存保护单元MPU的应用场景详解

本文深入探讨ARM7架构下内存保护单元(MPU)的应用场景,解析其在工业控制、医疗设备等高可靠性系统中的关键作用。通过实际配置示例和安全设计策略,展示如何在资源受限环境中实现内存隔离与故障防护,提升嵌入式系统安全性。

gamma的博客 1344

淘宝链接跳转微信全攻略:自建合规中转页实现私域引流

在跨平台运营中,链接跳转是连接不同生态、实现流量引导的关键技术。其核心原理是通过服务器端或前端逻辑,将用户从一个平台的链接安全引导至目标页面,同时规避平台间的访问限制。这项技术的核心价值在于打破数据孤岛,实现跨平台用户沉淀与精细化运营,广泛应用于电商引流、私域流量构建和跨平台营销等场景。本文聚焦于**淘宝短链**与**企业微信**之间的跳转难题,提供了一套基于自建中转页面的完整工程解决方案,手把手教你如何通过合规的技术手段,将淘宝流量高效、安全地引导至微信生态,并实现数据追踪与客户分流。

weixin_34185512的博客 411

第2章第2节 ARM7汇编语言简介

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第2节ARM7汇编语言简介 ARM7芯片有2种汇编语言指令集,一种叫做ARM指令集,字长为32bits,另一种叫THUMB指令集,字长为16bits。这两种指令集各有优缺点,它们可以单独使用也可以混合在一起使用,在ARM7芯片上,我们将只使用ARM指令集,在后续的Cortex芯片上

ifreecoding的博客 1834

RLHF的数学表示

RLHF(Reinforcement Learning with Human Feedback)是一种结合了强化学习和人类反馈的机器学习方法。它通常用于训练智能体(agent)在复杂环境中做出决策,同时利用人类的反馈来指导和改进学习过程。RLHF 没有一个统一的数学表示式,因为它依赖于具体的应用场景和实现细节。然而,我们可以从强化学习和人类反馈的角度来描述RLHF的一些关键数学概念。

xw555666的博客 687

C#跨平台制图新纪元:Mapsui,一库在手,地图我有

深入学习Mapsui的渲染机制,定制属于你的地图样式,无论是颜色、图标还是文字,都可以随心所欲。

java专栏 1457

第2章第3节 ARM7芯片的函数调用标…

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第3节ARM7芯片的函数调用标准 在上节,我们最后用汇编语言写了一个函数,但该函数没有入口参数,那么C语言函数、汇编函数之间是如何传递参数和返回值的?函数在执行过程中是如何使用栈的?它们需要遵守什么规则?本节我们将介绍这方面的内容。 如果我们不是在编写操作系统,只是编写正常

ifreecoding的博客 573

Node-RED系列(二九):使用slider与chart节点来实现双折线时间序列图

今天教使用dashboard的chart组件和slider组件来是实现一个双线的折线图。效果如下 拖动顶部的电量和水量,低下的图表会实时显示时间和值之所以做这个模拟案例,是将教 大家使用chart节点和slider节点先说一下slider节点,该节点是一个滑块节点,可以接受上一节点的 msg.payload,作为滑块的值, slider必须设置最大值和最小值。且不能动态设置。 此外当用户拖动slider滑块,改变值时,该节点会向下传递当前值 以属性payload装载。在说一下chart节点,该节点可以用于

知无涯 4968

ARM、ARM架构、ARM架构芯片

ARM

风高秋月白,雨霁晚霞红 1万+

【读代码】SQLBot:开源自然语言转SQL智能助手原理与实践

SQLBot是 DataEase 团队开源的自然语言转 SQL 智能助手,致力于让非技术用户也能通过自然语言与数据库对话,自动生成 SQL 查询,实现自助数据分析、智能BI问答、报表生成等场景。SQLBot 结合了大语言模型(LLM)、数据库元数据解析、SQL解析与执行等多项技术,具备强大的多数据库适配能力和灵活的扩展性。降低数据分析门槛,让业务人员无需掌握SQL即可获取数据洞察支持多种数据库类型,适应企业多样化数据环境提供可扩展的API和插件机制,便于集成到各类BI、数据平台和业务系统。

kakaZhui的博客 829

静态时序分析(STA)—— 标准单元库

目录 1、时序库 概览 2、时序模型 1、基本概念 2、影响因素 3、线性延时模型 4、非线性延时模型 5、单元时序弧 1、组合逻辑单元 2、时序逻辑单元 6、线负载模型 参考说明 上一篇,学习了 STA相关的基本概念,本篇继续学习 STA相关的 标准单元库。 1、时序库 概览 库文件概览: 2、时序模型 1、基本概念 2、影响因素 对于组合逻辑的时序弧而言,其延时的大小取决于: 1、输出负载,即,输出端的电容负载的大小。容性负载越大,...

记录所学,分享知识,结识挚友 2853

苹果M1芯片及新产品布局对ARM生态影响

在PC领域,苹果在2005年之前采用IBM PowerPC芯片,从2005-2020年采用Intel x86芯片,最近则新发布了苹果M1芯片。M1是一款基于ARM架构的苹果自研芯片。本文简单介绍苹果M1芯片及新产品布局对ARM生态影响。 1 苹果M1芯片及新产品布局 1.1 M1芯片介绍 苹果新的M1芯片是一个完整的系统级芯片(SoC),采用了统一内存架构,将CPU、GPU、神经引擎(Neural Engine)、缓存、DRAM内存全部通过Fabric高速总线连接在一起,可带来足够高的带宽、足够低的延

sillysunny的博客 7968

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ARM芯片上电启动流程

自己理解的芯片启动流程

妄想吃透Linux内核源码的xxs 5889

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ARM7体系结构

ARM7体系结构的基本介绍

weixin_46317268的博客 2038

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

第2章ARM技术与ARM体系结构—ARM体系结构版本与内核

目前嵌入式处理器以32位为主,在32位微处理器中又以ARM为核心,因此以ARM为核心搭建嵌入式开发平台,基于此平台介绍嵌入式开发技术。 主要介绍ARM处理器的产生及版本发展历史以及各个版本的典型处理器及应用情况和性能分析、ARM处理器的内核调试结构,ARM处理器的工作模式及寄存器组织结构(分析在什么情况下进入相应的工作模式),ARM处理器支持的内存数据存储方式(分为大端格式和小端格式),介绍AR...

xiezhi123456的博客 1181

STM32单片机与ARM7、ARM9、ARM11

本内容详细介绍了 ARM 与 STM32 的关系,STM32 与 ARM7、ARM9、ARM11 的区别,美国芯片巨头英伟达欲收购 ARM 资讯。

让你爱上电路设计 6173
上一篇: 第2章 写操作系统前的预备知识
下一篇: 第2章第2节 ARM7汇编语言简介
ifreecoding
博客等级 码龄15年 148粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值