购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 ARM嵌入式系统的硬件构成

由于ARM公司成功的商业模式,使得ARM在嵌入式市场上取得了巨大的成功。基于ARM技术的微处理器系统占据了32位RISC微处理器75%以上的市场份额。目前嵌入式行业主流的ARM微处理器包括Cortex、ARM7、ARM9、Xscale等几个系列,这些系列的架构特点如表1.2所示。

表1.2 常见ARM微处理器系列

对于上表中所列出的各种型号ARM嵌入式微处理器,都利用ARM公司的IP授权为ARM内核定制了各种各样的设备。各个芯片开发商在此基础上形成了上述ARM微处理器芯片。同样,用户也可以结合图1.15查看ARM处理器的分类。

图1.15 ARM嵌入式处理器的分类

1.3.1 ARM嵌入式处理器结构

一般而言,ARM嵌入式芯片主要由32位ALU、31个32位通用寄存器和6个状态寄存器、32×8位乘法器、32×32位桶形移位寄存器、指令译码及控制逻辑、指令流水线和数据/地址寄存器组成,如图1.16所示。

图1.16 ARM嵌入式处理器的结构

在ARM处理器结构中,使用了流水线技术以提高处理器指令的运行速度。在流水线操作中,允许多个操作同时进行,以及处理和存储系统连续操作。以3级流水线为例,指令的执行分为以下3级。

1)取指级

在取指级中,处理器主要完成程序存储器中指令的读取,并放入指令流水线中等候处理。

2)译码级

在译码级中,对指令进行译码,为下一个周期的操作运行准备数据路径所需要的控制信号。在译码级操作中,处理器占用“译码逻辑”而不使用“数据路径”。

3)执行级

在执行级指令中,处理器使用“数据路径”,寄存器堆栈被读取,操作数在桶形移位寄存器中进行移位操作,ALU(算术运算寄存器)产生相应的运算结果并回写到目的寄存器中。ALU的计算结果根据指令要求更改状态寄存器的条件位。

1.3.2 ARM嵌入式处理器中的指令

指令是指用来指示ARM嵌入式处理器进行操作的命令。下面这行代码就是一条常用的ARM指令。

该指令用来将寄存器R1中的值加上0x33,然后将计算的结果保存到寄存器R0中。需要注意的是,在汇编语言中,分号“;”用来对代码进行注释,以增加代码的可读性和可维护性。

一般情况下,不同类型的ARM处理器会支持不同的指令集。在常用的ARM嵌入式系统中,处理器可以支持两种不同的指令模式和指令集:32位的ARM指令集(ARM模式)和16位的Thumb指令集(Thumb模式)。

需要提醒用户注意的是,虽然ARM嵌入式系统开发中大多数应用程序都采用了C语言进行编程,但也不能忽视汇编语言的功能。因为汇编语言是所有编程语言中效率最高、最直接的编程方法。通过汇编语言,用户可以直接对ARM处理器底层的寄存器进行操作。

在ARM指令集中就是以汇编程序语言为基础设计的。在基于ARM的嵌入式系统开发中,即使大部分代码都可以用C语言或者其他高级语言来实现,但系统的引导程序、启动代码仍必须使用汇编语言来实现。在本书的第2章,将详细向读者介绍有关ARM指令集的相关内容。

1.3.3 ARM硬件配置

用户在进行ARM嵌入式系统开发之前,需要对ARM处理器的硬件配置有一定的了解。在这里,针对常用的车载ARM嵌入式芯片STM32F103XX,以Cortex-M3内核为例,详细介绍ARM的硬件配置。

Cortex-M3是一个32位ARM处理器内核。内部的数据宽度是32位的,寄存器也是32位的,存储器的接口同样也是32位的。与常用的ARM嵌入式处理器一样,Cortex-M3采用了哈佛结构,拥有独立的指令总线和数据总线,可以同时进行取址操作和数据访问操作。

采用哈佛结构的数据/指令存储方式,处理器在访问数据的时候不再占用数据总线,从而提升了系统处理的性能。为进一步提高ARM处理器的处理能力,CM3的内部结构中包含了多条总线接口方式,每条总线都专门为特定的应用场合进行综合优化,并可以多条总线并行工作。

图1.17 Cortex-M3中的寄存器组

1.CM3中的寄存器组

在CM3处理器中包含了R0~R15寄存器组,如图1.17所示。其中,R13为堆栈指针SP。需要注意的是,SP寄存器有两个,但在同一时刻,用户只能看到其中的某一个,也就是所谓的“banked”寄存器。

其中,R0~R12为通用寄存器,都是32位的寄存器,主要用于ARM处理器内部的数据操作,但在ARM指令集中,并不是所有的语句都可以访问R0~R12寄存器。其中,绝大部分的16位Thumb指令只能访问R0~R7寄存器,而32位的Thumb-2指令则可以访问所有的寄存器。

2.嵌套向量中断控制器

Cortex-M3在ARM内核上搭载了一个终端控制器,即嵌套向量终端控制器(NVIC,NestedVectored Interrupt Controller),它与ARM内核紧密耦合,并提供如下功能:

● 支持系统嵌套中断;

● 支持向量中断;

● 支持动态调整中断优先级;

● 较短的中断延迟;

● 可屏蔽系统中断。

3.存储器映射

总体而言,Cortex-M3可以支持4GB的存储空间,并且被划分为若干区域,具体如图1.18所示。

图1.18 存储器映射成若干区域

从图1.18中可以看出,与其他ARM处理器不同的是,在Cortex-M3内核中,系统预先定义了存储器映射框架。通过将片上外设的寄存器映射到外设区,就可以实现以访问内存的方式来访问外部存储器,从而控制外设的工作。

4.存储器保护单元

在Cortex-M3中有一个可选的存储器保护单元。通过存储器保护单元可以对特权级访问和用户级访问分别实现不同的访问限制。在系统运行的过程中,当检测到权限犯规(Violated)时,存储器会产生一个fault的异常。这个异常可以由fault异常的服务例程来分析,同时也可以对其进行更正。 L+OOjBqsUtsTTNemUr4ZkzbZ081EU4eZlsjIaLLadY8rUwhsCaTX9vYO+yOdSaDl



1.4 ARM嵌入式系统开发实例
——车载嵌入式芯片STM32F103XX

STM32系列32位闪存ARM控制器来自ARM公司具有突破性的Cortex-M3内核,该内核是专门设计用于满足高性能、低功耗、实时响应、具有竞争价格的嵌入式领域的要求,是一款广泛应用于汽车电子、智能仪表等嵌入式系统的ARM处理器芯片。

STM32系列处理器现有的产品有STM32F10XX系列,其中分为STM32F101XX系列和STM32F103XX系列。STM32F101XX系列是基本型系列,可工作的最高频率为36MHz。STM32F103XX系列是增强型系列,可工作在72MHz,并且带有片内RAM和丰富的外设资源。这两个系列的处理器具有相同的片内闪存选项,在软件代码和芯片封装方面全面兼容。

1.4.1 系统资源与性能参数

STM32处理器采用ARM最先进的系统架构Cortex-M3,主要具有以下优势:

● 系统采用哈佛结构,数据与程序相互独立;

● Thumb-2指令集以16位的代码密度具有32位指令的性能;

● 单周期乘法指令及硬件除法指令,提高浮点运算的处理能力;

● 内置快速中断控制器NVIC,提高系统实时性,中断间的延迟时间只需6个CPU周期;

● 支持休眠/唤醒模式,从低功耗模式唤醒的时间只需6个CPU周期;

● 与ARMTDMI相比,运行速度可以提高35%,且代码量最多可节省45%。

在Cortex-M3平台上,STM32处理器具有极低的系统功耗。在STM32F103XX系列单片机中,针对实际工程应用中三种主要的能耗需求进行优化。这三种能耗需求分别是运行模式下高效率的动态耗电机制、待机状态时极低电能的消耗和电池供电时低电压工作的能力。为此,在STM32F103XX系列单片机中提供了3种低功耗模式和灵活的时钟控制机制,用户可以根据实际工程的需要进行合理优化。

值得注意的是,STM32的优势来源于两路高级外设总线(APB)结构,其中一个高速APB甚至可以达到CPU的运行频率,连接到该总线上的外设能以更高的速度运行。

STM32F103XX系列嵌入式处理器基于高性能32位的RIS的ARM Cortex-M3内核,工作频率为72MHz,并在片上集成了高速存储器,其中,Flash存储器最多可达512KB,SRAM最多可达48KB。所有的设备都提供了标准的通信接口,包含I 2 C接口、SPI灯口,以及USART接口等。片上系统还集成了一个12位的ADC,一个12位的DAC及多个16位的定时/计时器。具体型号的硬件资源如表1.3所示。

表1.3 STM32F103XX系列硬件资源

续表

1.ARM内核

采用ARM 32位的Cortex-M3处理器,最高工作频率可达72MHz,1.25DMIPS/MHz,支持单周期乘法和硬件除法。

2.片上存储器

处理器集成32~512KB的Flash存储器,6~48KB的SRAM存储器。

3.时钟、复位和电源管理

芯片支持2.0~3.6V的电源供电,其中IO接口的驱动电压最高可达5V。在芯片内部,集成了POR、PDR及可编程的电压。外接4~16MHz的无源晶振,内嵌出厂前调校的8MHz的RC振荡电路,以及40kHz的RC振荡电路。除此之外,系统还支持带校准功能的用于实时时钟RTC的32.768kHz晶振。

4.节电模式

芯片提供了3种支持低功耗的模式:休眠、停止及待机模式。在节电模式中,只维持为实时时钟RTC,以及备份寄存器供电使用的后备电源VBAT。

● 休眠模式:在休眠模式(Sleep-Now或者Sleep-On-EXIT)中,只有CPU停止工作,而其他所有的外设都继续运行。在中断/事件发生的时候唤醒CPU。

● 停止模式:停止模式允许以最小的系统功耗来保持SRAM和寄存器中的内容。1.8V区域的时钟都停止。PLL、HIS和HSE都被禁止使能。处理器可以通过外部中断从停止模式唤醒。

● 待机模式:在待机模式中,除了上述节点模式中禁止使能的资源外,1.8V内核电源也被关闭。

在表1.4中详细列出了不同节电模式的资源使能情况及唤醒操作。

5.模拟/数字转换器

系统内部自带了两个12位的ADC,其测量范围是0~3.6V,并且具有多路采样和数据保持功能。另外,片上还集成了一个温度传感器。

6.DMA

芯片内部集成12通道的DMA控制器,并支持定时/计数器、ADC、DAC、I 2 C、SPI、USART等接口。

表1.4 不同节电模式的资源使能情况及唤醒操作

7.快速IO端口

根据芯片型号的不同,STM32分别有26、37、51、80和112个独立的数据输入/输出(IO)端口,所有的端口都可以映像到16个外部中断向量。需要注意的是,除了特定的模拟信号输入端口,如ADC的参考电压输入端口(Vref+, Vref-),其他的数字端口都可以接受5V以内的电压输入。

8.调试模式

系统支持串口调试(SWD)模式和JTAG调试接口。

1.4.2 系统硬件设计

STM32F103XX系列芯片的内部总线和两条APB时钟总线将片上系统和外设资源紧密连接起来,其中内部总线是主系统总线,连接了CPU、存储器,以及系统时钟等。APB1总线用于连接高速外设,APB2则用于连接系统通用外设和中断控制。所有的数字输入/输出端口最多可以划分为(支持)PA、PB、PC、PD、PE、PF和PG这7个16位的端口。其他的外设接口引脚都是通过与这些IO端口的引脚“功能复用”而实现的,一般用AF来表示端口引脚的复用功能。

1.集成嵌入式Flash和SRAM存储器的ARM CortexTM-M3内核

ARM Cortex-M3处理器是用于嵌入式系统的最新一代的ARM处理器,具有极低的系统功耗和较高的性价比,并且提供了更高的数据处理能力和更快的中断系统响应。与以往的8位和16位的处理器相比,ARM Cortex-M3 32位的RISC处理器提供了更高效的代码效率。由于STM32F103XX系列处理器采用的是ARM内核,所以该系列处理器都可以兼容所有的ARM工具和软件。

2.嵌入式Flash存储器和RAM存储器

系统内置了多达512KB的嵌入式Flash,可用于存储程序代码和数据。多达64KB的嵌入式SRAM可以以CPU的时钟速度进行读写数据。

3.外部中断/事件控制器(EXTI)

外部中断/事件控制器由用于19条产生中断/事件请求的边沿探测器线组成。每根探测器线可以被单独配置用于选择触发事件(上升沿触发或下降沿触发),也可以被单独屏蔽。有一个挂起寄存器专门用来维护中断请求的状态。当外部线上出现长度超过内部APB2时钟周期的脉冲时,EXTI就可以探测到中断。整个系统具有112个GPIO引脚,且被分配到16个外部中断线。

4.系统时钟和启动

系统在启动时需要进行系统时钟的选择,但需要注意的是,在复位时内部8MHz的晶振被选作CPU处理器时钟。当然,用户也可以选择一个外部的4~16MHz时钟,并且在选用外部时钟的情况下,系统会对其进行监视以判定是否启动成功。

在这期间,控制器被禁止使能并且软件中断管理也随后被禁止使能。此外,多个预比较器可以用来配置AHB的频率,主要包括高速APB(APB2)和低速APB(APB1)。高速APB的最高频率为72MHz,低速APB的最高频率为36MHz。

5.Boot模式

系统在启动时,boot[1:0]引脚被用来设置boot启动选项,具体参数配置如表1.5所示。一般而言,系统均以第一种模式(BOOT1=x,BOOT0=1)进行工作进入用户编写的代码区;在BOOT1=0,BOOT0=1的模式下,芯片将从系统存储器启动。在这种模式下,用户可通过厂家设置的程序进行程序下载,即以ISP下载模式(串口下载)将烧写程序下载到芯片中。

表1.5 STM32F103XX的系统启动模式

6.电源管理

STM32F103XX系列处理器有一个完整的上电复位(POR)和掉电复位(PDR)电路。这两个电路一直有效,用于确保系统从2V启动或者电压回落到2V时进行一些必要的操作。当系统电源VDD低于一个特定的下限电压时,不需要外部复位电路,芯片也可以进入复位模式。

值得注意的是,STM32F103XX系列处理器中还嵌入了一个可编程的电压探测器(PVD)。PVD主要用于检测VDD,并且和VPVD限值进行比较,当VDD低于VPVD或者VDD高于VPVD时会产生一个中断。中断服务程序可以产生一个警告信息或者将处理器设置到一个安全状态。

1.4.3 系统外围接口

在STM32F103XX系列处理器中,主要包含以下几种片内外设。

1.DMA

12通道的通用DMA(Direct Memory Access,直接内存存取)可以用于存储器到存储器、外设到存储器和存储器到外设之间的数据传输。DMA控制器支持循环缓冲器管理,从而避免在到达缓冲区末端时产生中断。

每个通道都连接到专用的硬件DMA请求,同时支持软件触发,可以由用户对软件参数进行配置。

DMA可以和一些常用的外设一起使用,以提高处理速度,包括SPI、I 2 C、USART、通用定时器、DAC和ADC等。

2.RTC(实时时钟)和备份寄存器

RTC和备份寄存器通过一个开关来控制供电。当VDD有效时通过VDD供电,否则通过VBAT供电。备份寄存器可以用来在VDD无效时保存数据。

3.看门狗

STM32系列ARM Cortex-M3微控制器提供了两种不同的看门狗:独立看门狗和窗口看门狗。

独立看门狗基于12位的倒计数器和8位的预比较器,它由一个独立的40kHz的内部RC提供时钟,由于和主时钟独立工作,所以它可以随时工作在停止和待机模式。既可以用在系统出问题时来复位芯片,也可以作为一个空转定时器。独立看门狗的软件和硬件都可以通过参数来进行配置,而且计数器在调试模式下可以冻结。

系统所提供的另外一个看门狗是窗口看门狗。窗口看门狗基于一个在空转时可以设置的7位倒计数器,可以用在系统出问题时进行复位操作。窗口看门狗由系统主时钟提供时钟源,能够实现提早警告中断,并且计数器在调试模式下也可以冻结。

4.通用定时器(TIMx)

STM32系列处理器最多自带4个同步标准定时器。这些定时器基于一个16位的自动重载顺序/倒序计数器和一个16位的预比较器。每个定时器都具有分别用于输入捕获、输出比较、PWM或者单脉冲模式输出的4个独立通道。通过同步连接特性或者事件链,可以将多个定时器拼接在一起工作。 L+OOjBqsUtsTTNemUr4ZkzbZ081EU4eZlsjIaLLadY8rUwhsCaTX9vYO+yOdSaDl

点击中间区域
呼出菜单
上一章
目录
下一章
×