历史上的今天
返回首页

历史上的今天

今天是:2025年03月30日(星期日)

正在发生

2020年03月30日 | arm架构基础知识小结

2020-03-30 来源:eefocus

前言

从单片机转到ARM,主要需要学习ARM的架构,ARM相比单片机多了一些外设和总线。在仅仅是裸奔的情况下,如果熟悉了ARM架构,那么我认为使用任何ARM架构的芯片和用单片机将没有区别。ARM架构之所以更复杂,当然是为了跑更快以及更好地支持片上系统,所以在某种程度上来说对片上系统不是很了解的话那对于ARM架构的理解也不会那么深。


ARM的历史版本

ARM7TDMI是基于ARMv4T架构的。


ARMv5TE架构则是伴随着ARM9E处理器家族亮相的。


ARM11是基于ARMv6架构基于ARMv6架构的处理器包括ARM1136J(F)-S,ARM1156T2(F)-S,以及ARM1176JZ(F)-S。


最近的几年,基于从ARMv6开始的新设计理念,ARM进一步扩展了它的CPU设计,成果就是ARMv7架构的闪亮登场。在这个版本中,内核架构首次从单一款式变成3种款式。


就拿ARM7TDMI来说,T代表Thumb指令集,D是说支持JTAG调试(Debugging),M意指快速乘法器,I则对应一个嵌入式ICE模块。后来,这4项基本功能成了任何新产品的标配,于是就不再使用这4个后缀——相当于默许了。

通用寄存器

R13通常被用作栈指针,进入异常模式时,可以将需要使用的寄存器保存在R13所指的栈中;当退出异常吹程序时,将保存在R13所指的栈中的寄存器值弹出。


R14又被称为连接寄存器(LinkRegister,LR),即PC的返回值。


R15又被记作PC。ARM指令是字对齐的,PC的值的第0位和第1位总为0。也就是说是32位对齐。

就Cortex-M3来说,拥有R0-R15的寄存器组。其中R13作为堆栈指针SP。SP有两个,分别为R13(MSP)和R13(PSP)即主堆栈指针(MSP)和进程堆栈指针(PSP),但在同一时刻只能有一个可以看到,这也就是所谓的“banked”寄存器。这些寄存器都是32位的。


ARM的各个模式

ARM有以下7种模式:

用户模式(User,usr)正常程序执行的模式


快速中断模式(FIQ,fiq)用于高速数据传输和通道处理


外部中断模式(IRQ,irq)用于通常的中断处理


特权模式(Supervisor,svc)供操作系统使用的一种保护模式


数据访问中止模式(Abort,abt)用于虚拟存储及存储保护


未定义指令中止模式(Undefined,und)用于支持通过软件方针硬件的协处理器


系统模式(System,sys)用于运行特权级的操作系统任务


其中除了用户模式之外都称之为特权模式(privileged modes),而在privileged modes中除了系统模式其它都称为异常模式,即exception mode。起初关于异常这个词我的理解有些偏差,我认为异常模式就是这个系统出错了,而实际上不是。exception mode的意思是例外,意思是“这模式什么时候会发生不好说……”,比如说来了个外部中断也会进入异常模式,但是此时系统是运行完好的。


其中SVC用于在系统刚启动的启动文件BOOT程序中,跳转到kernel之前必须为SVC,SVC具有最高权限,可以对任何寄存器进行操作。在裸机程序中我们有时候会一直处于SVC模式下。


关于什么时候会进入用户模式或者系统模式,以下是我的猜测,比如进入linux kernel之后会设置成sys模式,比如任务调度等等都会在sys模式中,而执行用户编写的应用程序时,系统是处于usr模式中。以上猜测需要在linux中找出证据验证。


其中FIQ,IRQ为中断模式,有中断发生时会进入FIQ模式或者IRQ模式,至于到底是进入哪个模式是由开发者设定的。理论上FIQ模式的响应速度比IRQ模式要快。


其中abt模式通常发生于在访问地址没有对齐时的情况,此时会跳转到abt所属的中断向量地址中去。und模式应该是取到指令之后发现指令不能用,,此时会跳转到abt所属的中断向量地址中去。以上两种模式应该是开发过程中出现BUG才会进入的,也是一种调试手段,在版本发行之前应该消除这些错误(我猜= =)。


启动文件

这一部分只要了解一下协处理器CP15的相关作用以及ARM或者THUMB汇编再看一下网上的例程以及解释应该不难理解。


在启动文件中我们可以做任何事情,但是通常我们可以做这些:改变程序大小端排序,关闭看门狗,屏蔽中断,设置各个时钟,设置从SLEEP或者IDLE启动时的程序,初始化SDRAM,设置各模式指向的堆栈,设置好中断向量表,判断是从NOR还是NAND FLASH启动,将文件拷到SDRAM中,运行Main。


以上也说明了为什么需要一个汇编写的启动文件,设置各个模式下的SP指针以及初始化中断向量的跳转(ARM的中断较多设置也较灵活)也只有汇编干比较合适了。甚至在SOC(片上系统)中每个任务都有自己的堆栈,所以改变堆栈指针的那一部分程序也是放在汇编里做的。总之了解启动文件是一个非常好的切入点。


MMU相关地址基本概念

关于MMU,因为多种存储设备的物理地址不同以及不连贯性,将其地址安放在合理的连续虚拟地址上是很必要的,所以MMU出现了。MMU即将不同的地址放在合适的虚拟地址中,以便调度。比如要跑LINUX必须要有MMU的支持才行。


ARM920T中有三种类型的地址:


虚拟地址(VA),变换后的虚拟地址(MVA),物理地址(PA)。


以下是一个当一个指令被请求时地址所做操作的例子:


1、指令VA(IVA)被ARM920T发出


2、它被ProcID(当前进程所在的进程空间块的编号)转换成指令MVA(IMVA),指令CACHE(ICACHE)和MMU看到的就是IMVA。


3、如果在IMMU上的保护模块确认IMVA不会被中断,并且IMVA标签也在ICACHE中,指令数据会读出并返回到ARM920T内核中。


4、如果IMVA tag并不在ICACHE中,那么IMMU会产生出一个指令PA(IPA)。地址会给AMBA总线接口以获取外部数据。

那么VA是如何被PID转换为MVA的呢?


这有关于CP15中的13,FCSE PID register


R13是fast context switch extension(FCSE 快速上下文切换扩展)processidentifier(PID 进程标识符)寄存器,此寄存器复位时为0。


读R13会得到FCSE PID的值,写R13会更新FCSE PID的值到[31:25]中,位[24:0]应该是零。


如何使用FCSE PID:


920T内核发出的地址都是0-32MB的范围,4GB的逆序空间被分成了1238个进程空间块,每个进程空间块大小为32MB。每个进程空间块中可以包含一个进程。系统128个进程空间块的编号0-127,编号为I的进程空间块中的进程实际使用的虚拟地址空间为(I*0x02000000)到(I*0x02000000+0x01FFFFFF)。


所以VA通常高7位都为0时 MVA = VA | (PID << 25)


当VA高7位不为0时 MVA = VA,这种VA是本进程用于访问别的进程中的数据和指令的虚拟地址,注意这时被访问的进程标识符不能为0。


注意:当FCSE_PID为0时,即当前复位,则当前920T和CACHES及MMU之间是平面映射的关系(很巧妙:))。


TLB是什么?


TLB即translate look-aside buffer,快表就是存储几个常用的页表,以提高系统运行的速度。在更新页表之前要使其无效,其操作的寄存器为R8,R8为只写寄存器,如果读它则会造成不可估计的后果。

AP赋值表:

而DOMAIN的赋值则是在C3中的,32bit共有16个域,每个域分两个bit,这两个bit控制当前域的权限。而以上四个bit是为了选择0-15个域的其中一个。


关于C、B赋值:

以上有关于两种写缓存,写通以及写回。写回法是指CPU在执行写操作时,被写的数据只写入cache,不写入主存,仅当需要替换时,才把已经修改的cache块写回到主存中。写通法是指CPU在执行写操作时,必须把数据同时写入cache和主存。


时钟以及总线概念

FCLK, HCLK, andPCLK


FCLK is used byARM920T.


HCLK is used forAHB bus, which is used by the ARM920T, the memory controller, the interruptcontroller, the LCD controller, the DMA and USB host block.


PCLK is used forAPB bus, which is used by the peripherals such as WDT, IIS, I2C, PWM timer, MMCinterface,ADC, UART, GPIO, RTC and SPI.


What is AHB/APB?


InternalAdvanced Microcontroller Bus Architecture(AMBA)是一种总线标准,以下两项都符合此标准。


AHB(AdvancedHigh performance Bus),主要用于系统高性能、高时速速率模块间通信。


APB(AdvancedPeripheral Bus),主要用于慢速片上外设与ARM核的通讯。


AHB私有外设总线,只用于CM3内部的AHB外设,它们是:NVIC,FPB, DWT和ITM。


APB私有外设总线,既用于CM3内部的APB设备,也用于外部设备(这里的“外部”是对内核而言)。CM3允许器件制造商再添加一些片上APB外设到APB私有总线上,它们通过APB接口来访问。


四种耗电模式:


NORMAL,SLOW,IDLE,SLEEP


先配置主PLL MPLL给CPU用。在上电复位的时候PLL是不稳定的,所以在PLLCON在被软件配置之前Fin直接是跳过MPll给FCLK,所以不配置PLLCON也是可以正常工作。即使工作在正常状态下,也可以对MPLLCON进行配置,配置之后等待PLL Lock-time过后内部各模块的CLK才可以被正常供应。


DMA

阅读芯片手册即可。

推荐阅读

史海拾趣

GE Sensing ( Amphenol Advanced Sensors )公司的发展小趣事

对于4h的交流电源定时器(555,BH4024)电路,网友可能会提出一系列问题。以下是一些常见问题及其详细回答:

1. 电路的基本工作原理是什么?

回答:该电路结合了555定时器(作为时基电路)和BH4024(7级二进制串行计数器/分频器)来实现4小时的定时功能。555定时器用于产生定时信号,而BH4024则负责将定时信号转换成所需的时间间隔。每当按下AN(定时触动按钮)时,电路开始计时,并在4小时后自动切断交流电源。

2. 如何调整定时时间?

回答:直接调整4小时的定时时间可能不直接通过电路中的元件实现,因为定时时间主要由BH4024的分频特性和555定时器的振荡频率决定。然而,可以通过改变555定时器的外部电阻和电容值来调整其振荡频率,但这通常会影响整个电路的定时精度和稳定性。对于精确调整至4小时,可能需要使用微控制器或其他可编程逻辑设备来替代或辅助BH4024和555定时器。

3. 电路中的555定时器具体起到什么作用?

回答:在这个电路中,555定时器作为时基电路,负责产生稳定的振荡信号。这个振荡信号的频率和占空比可以通过调整与555定时器相连的电阻和电容值来改变。然而,在这个特定的应用中,555定时器的输出信号通常被用作BH4024的输入信号,以便控制BH4024的计数和分频过程。

4. BH4024是如何实现定时功能的?

回答:BH4024是一个7级二进制串行计数器/分频器,它能够根据输入的时钟信号进行计数,并在达到预定次数后输出一个翻转信号。在这个电路中,BH4024的计数频率由555定时器的输出信号决定。当计数器达到某个预设值时(这个值决定了4小时的定时长度),BH4024会输出一个信号来切断交流电源。

5. 电路中的电源要求是什么?

回答:电路中的电源要求取决于所使用的555定时器和BH4024的具体型号以及电路中的其他元件。通常情况下,555定时器可以在较宽的电源电压范围内工作(如4.5V至16V),但具体值应参考器件的数据手册。对于BH4024和其他元件,也应遵循类似的电源要求。此外,由于该电路涉及交流电源的控制,因此还需要注意电路的安全性和稳定性问题。

6. 如何确保电路的可靠性和安全性?

回答:为了确保电路的可靠性和安全性,需要采取以下措施:

  • 选择质量可靠的元件和器件,并按照正确的规格和参数进行连接。
  • 在电路设计中考虑适当的保护措施,如过流保护、过压保护等。
  • 在实际使用中,注意避免电路受到外部干扰和损坏。
  • 定期对电路进行检查和维护,以确保其正常运行和延长使用寿命。

7. 电路有哪些潜在的应用场景?

回答:该电路具有广泛的应用场景,包括但不限于:

  • 家庭自动化系统中的定时开关功能。
  • 工业生产线上的自动断电和重启功能。
  • 实验室和测试设备中的定时控制功能。
  • 公共场所的自动照明和节能控制功能等。

总之,对于4h的交流电源定时器(555,BH4024)电路,网友可能会关注其工作原理、定时时间调整、元件作用、电源要求、可靠性和安全性以及潜在应用场景等方面的问题。以上回答旨在提供全面的信息和指导。

AIC [Analog Intergrations Corporation]公司的发展小趣事
  1. 公司成立与初期发展:Analog Integrations Corporation(AIC)是一家总部位于台湾的半导体公司,专注于设计、制造和销售高性能模拟集成电路(IC)产品。公司成立于1996年,由一群拥有丰富经验的工程师共同创立。最初,AIC致力于为广泛的应用领域提供稳定可靠的模拟芯片解决方案,如消费电子、通信、工业控制等。

  2. 技术创新与产品发展:AIC在技术创新和产品研发方面投入了大量资源,不断推出具有竞争力的新产品。公司的产品涵盖了各种模拟IC产品系列,包括功率管理IC、放大器、比较器、数据转换器等。这些产品具有高性能、低功耗、小尺寸等特点,得到了广大客户的青睐。

  3. 全球市场拓展:随着公司技术和产品的不断成熟,AIC开始着眼于国际市场的拓展。公司积极参与国际电子展览和行业会议,与全球客户建立合作关系,拓展海外市场份额。通过建立销售代理商、设立海外办事处等方式,AIC在北美、欧洲、亚太等地区建立了稳固的销售网络。

  4. 质量管理与认证:AIC始终将产品质量视为企业发展的关键。公司严格遵循国际质量管理体系标准,建立了完善的质量管理体系。AIC的生产工艺和产品测试流程经过精心设计和严格监控,确保产品质量的稳定性和可靠性。此外,公司的产品经过了多项国际认证,包括ISO 9001质量管理体系认证、ISO 14001环境管理体系认证等。

  5. 社会责任与可持续发展:作为一家负责任的企业,AIC积极履行社会责任,关注环境保护和可持续发展。公司致力于降低能源消耗和减少废物排放,推动绿色生产和循环利用。此外,AIC积极参与社会公益活动,支持教育、健康、环保等多个领域的项目,为社会发展做出积极贡献。

Amperite Co公司的发展小趣事

Amperite Co. 是一家在电子行业中知名的公司,专注于生产和销售电子元件。以下是关于Amperite Co. 发展的五个相关故事:

  1. 成立与早期发展:Amperite Co. 成立于20世纪40年代初,总部位于美国纽约州。公司最初专注于生产和销售电子继电器和时间延迟器等元件,以满足当时快速发展的电子设备市场的需求。通过不断的技术创新和产品优化,Amperite Co. 在行业内建立了良好的声誉。

  2. 技术创新与产品多样化:随着电子行业的发展和技术的进步,Amperite Co. 不断进行技术创新,扩展产品线。除了传统的继电器和时间延迟器,公司还推出了一系列新型电子元件,包括光耦合器、固态继电器、传感器等。这些新产品的推出使得Amperite Co. 能够满足不同客户的需求,并保持竞争力。

  3. 质量控制与生产优化:Amperite Co. 始终把质量放在首位,实施严格的质量控制措施。公司采用先进的生产设备和工艺,确保产品质量稳定可靠。此外,Amperite Co. 不断优化生产流程,提高生产效率,降低生产成本,以提供更具竞争力的产品价格。

  4. 客户服务与合作伙伴关系:Amperite Co. 重视客户服务,并与客户建立了长期稳定的合作关系。公司为客户提供及时的技术支持和售后服务,满足客户的需求。此外,Amperite Co. 还与全球各种电子设备制造商建立了合作伙伴关系,共同推动技术创新和产品发展。

  5. 持续发展与市场拓展:Amperite Co. 不断追求发展和壮大,通过开拓新市场和拓展业务范围实现了持续增长。公司将目光投向国际市场,扩大产品销售网络,拓展海外客户群。同时,Amperite Co. 还积极参与行业展会和技术交流活动,加强品牌宣传,提升市场知名度。

这些故事展示了Amperite Co. 从成立初期到如今在技术创新、产品多样化、质量控制、客户服务与合作伙伴关系以及持续发展与市场拓展等方面取得的重要进展。

3M公司的发展小趣事
  1. 起源和早期发展: 3M公司(Minnesota Mining and Manufacturing Company)创立于1902年,在美国明尼苏达州成立。最初,公司主要从事矿石开采和研磨业务,以及生产砂纸和磨粉。在早期几十年里,3M致力于技术创新和产品开发,包括防水砂纸、透明胶带等产品,为公司奠定了良好的发展基础。

  2. 科技创新和产品多样化: 20世纪中叶,3M公司持续推动科技创新,不断扩展产品线。其中,最著名的是1950年代推出的可粘贴便签纸(Post-it)和1960年代推出的微型胶带(Scotch-Brite),这些产品成为公司的标志性产品,极大地推动了其业务的发展。

  3. 国际化战略和全球扩张: 20世纪后半叶,3M公司加速了国际化战略,并在全球范围内扩张业务。通过收购和合作,公司进入了新的市场和领域,如医疗保健、电子、汽车、能源等。3M在全球建立了广泛的生产基地和研发中心,成为一家跨国企业。

  4. 持续创新和技术领导: 3M公司一直致力于持续创新和技术领导,投入大量资金用于研发和技术创新。公司不断推出新产品和解决方案,满足市场需求并保持竞争优势。特别是在电子领域,3M推出了许多创新产品,如电子材料、封装材料、导热材料等,为电子行业提供了关键的解决方案。

  5. 可持续发展和社会责任: 3M公司致力于可持续发展和社会责任,在全球范围内推动环保和社会公益事业。公司制定了一系列环保政策和计划,努力降低能源消耗、减少废物排放,并积极参与社区建设和公益活动,为社会做出积极贡献。

Curtis Instruments Inc公司的发展小趣事

Curtis自成立以来,始终将创新作为公司的核心驱动力。公司每年将总收入的10%以上投资于研发,运营着四个研发中心,分别位于加利福尼亚、瑞士、纽约和中国。这些研发中心聚集了高度专业化的工程师和技术人员,专注于设计和开发适用于所有类型电动汽车的先进电机速度控制器等产品。正是这种持续的技术创新,使Curtis在电子行业中保持领先地位。

Belden Wire and Cable公司的发展小趣事

随着业务的不断扩展,Belden公司于1910年搬迁至芝加哥更大的区域,并在产品线上增加了橡胶绝缘电线。这一举措不仅扩大了公司的生产规模,也进一步丰富了产品种类,满足了市场的多样化需求。随后,百通工程师于1927年发明的软橡胶塞技术,进一步推动了公司的技术创新和业务拓展。

问答坊 | AI 解惑

arm技术中的异步传输模式ATM

是新一代的数据传输与分组交换技术,是当前网络技术研究与应用的热点问题。 - R% F1 }1 V0 I F9 b: M  . p- |. j6 M$ j! C  N\' Y) V  ATM技术的主要特点是:3 ATM是一种面向连接的技术,采用小的,固定长度的数据传输单元。. {. {& ...…

查看全部问答>

四轴飞行器资料集锦

每次路过北航,总看到一些学生在操场里试飞行,而且也听朋友说,翱翔在天际的那种四轴飞行器充满了神秘和吸引力。 于是乎 在此单开一贴,希望大家 1、分享自己整理的四轴飞行器资料; 2、晒晒自己的作品; 3、提供国外的DIY 四轴飞行器的一些 ...…

查看全部问答>

导波雷达问题

工作中碰到浙江瑞安EGWR型705导波雷达测量液位时,显示经常卡在20.5mA处,但实际液位并不是满量程,测量介质是MEK。以前并没有出现过这种现象,前几天才出现这种现象,自此以后就会每天大约出现2到3次,出现这种现象时把筒放空后,显示还是20.5mA, ...…

查看全部问答>

求助:急:c 编程

void main() {       P1M1=0x00;     P1M2=0x00;     P3M1=0x00;     P3M2=0x00; Send_ADFReg(Initialization_Value);     Send_ADFReg(Function_Value);  ...…

查看全部问答>

Platform Builder 5.0 生成 nk.bin的时候报这个错误,谁知道怎么解决?

Windows CE ROM Image Builder v4.0.000 Copyright (c) Microsoft Corporation Built: Jun 16 2004 15:09:27 Error: Could not find file \'D:\\WINCE500\\PBWorkspaces\\arm2410\\RelDir\\smdk2410_ARMV4I_Release\\kernkitl.exe\' on disk nk. ...…

查看全部问答>

好玩的东西,在RT-Thread上运行NES游戏模拟器

    这是开版后我发的第一个贴,非常感谢soso的支持,从此RT-Thread在eeworld也有了专门的版面。 可能大部分eeworld的网友还不太熟悉RT-Thread,我先发一些好玩的东西,让大家感受下在RT-Thread上面可以玩的东西是很多的。上面的图 ...…

查看全部问答>

关于8962开发板can总线的问题

 在multi_rx.c例程里面有这样一段代码   sCANMessage.ulMsgID = 0x1001;               // CAN msg ID    sCANMessage.ulMsgIDMask = 0xfffff; ...…

查看全部问答>

发现一个嵌入式学习资料下载网站,很不错的

        刚才上网下载一个资料,偶然发现了这个网站。本来就是一个普通的网站,但发现,这个网站它不要注_册,不要登录,直接免费下载。       我从来碰到过的网站都需要注册,然后登录才能下载的。所以来 ...…

查看全部问答>

2次调用到OSTimeDly就死掉

我只只创建一个任务,里面有while(1) {OSTimeDly(11); IO0SET=LED;OSTimeDly(11);IO0CLR=LED;}在这个任务2次调用到OSTimeDly,第一次调用能正常切换到空闲任务,且延时到了能切换回该任务继续第二次调用,此时调用OSCtxSw切换不到空闲任务。仿真时 ...…

查看全部问答>