跳转到主要内容

Cortex-M3

Cortex-M3寄存器等基础知识

judy /

1.寄存器

CM3拥有R0~R15通用寄存器和一些特殊功能寄存器

R0~R12这些通用寄存器,复位初始值都是不可预料的

2.CM3有R0到R15的通用寄存器组

<center><img width="600" src="http://mcu.eetrend.com/files/2018-04/wen_zhang_/100011268-39800-1.jpg&q…; alt="Cortex-M3寄存器等基础知识"></center>

注:绝大部分的16位thumb只能访问R0到R7,而32位thumb-2可以访问全部寄存器

3.特殊功能寄存器

Cortex-M3的六个知识点

judy /

1.不再像别的ARM7那样从thumb状态和ARM状态来回切换

Thumb-2指令集横空出世,Cortex-M3不支持ARM指令集

2.BKP备份寄存器(42个16位寄存器组成),用来存储用户应用程序数据。。在Vdd掉电时由Vbat供电。。在待机复位、系统复位、电源复位后,这些寄存器不会被复位

3.DMA用来提供外设和存储器以及存储器和存储器之间的高速数据传输,而不需要CPU干预。

当DMA和CM3核同时访问相同的目标(外设或者RAM)时,总线仲裁器会循环调度,确保CM3核得到至少一半的系统总线带宽。

4.Cortex-M3的内核是指MCU的CPU,而完整的MCU还要加上其他外设,如存储器、IO等其他模块。

Cortex-M3的一些概念

judy /

<strong>【工作模式】</strong>

线程模式(Thread mode):处理器复位或异常退出时为此模式。此模式下的代码可以是特权代码也可以是用户代码,通过CONTROL[0]控制。
处理模式(Handler mode):出现异常(包括中断)时进入此模式,此模式下所有代码为特权访问。

<strong>【代码限权】</strong>

特权访问:对处理器资源拥有完全访问限权;处理器复位后进入此访问模式;清零 CONTROL[0]进入用户模式。
用户访问:禁止访问多数系统寄存器。只能通过进入异常(中断)来返回特权模式。进入异常前是用户级访问,则退出异常时自动回到用户及,除非在异常中修改CONTROL[0]位。

<strong>【工作状态】</strong>

Thumb状态(正常执行指令状态)和调试状态;

基于低功耗32位MCU的智能温控器节能解决方案

Lee_ /

建筑能耗即建筑的运行能耗,就是人们日常用能,如采暖、空调、照明、炊事、洗衣等的能耗,是建筑能耗中的主导部分。随着城市化进程的加快和人民生活质量的改善,我国建筑能耗的总量逐年上升,建筑节能状况落后,浪费及其严重。因此建筑智能化刻不容缓,芯科科技(Silicon Labs)公司采用ARM Cortex-M3内核设计而来的EFM32是全球最低功耗的32位微控制器,对于用电池供电的温控器来说,大大延长电池的使用寿命,实现了节能环保。

<strong>节能设计架构与性能优异的外设</strong>

下面就是基于EFM32G2X MCU的智能温控器的原理框图,其利用各种传感器、无线Wi-Fi模块接收网络上的天气信息,以及通过网络传送的控制命令来达到控制功能。

嵌入式ARM Cortex-M3工作模式与异常

Lee_ /

<strong> 一、工作模式</strong>

线程模式和手柄模式。

<center><img src="http://mm32.eetrend.com/files/2016-11/wen_zhang_/100003954-13168-1.png&…; alt="" width="600"></center>

当处理器处在线程状态下时,既可以使用特权级,也可以使用用户级;另一方面, handler模式总是特权级的。在复位后,处理器进入线程模式+特权级。

<strong>二、异常和中断</strong>

ARM Cortex-M3微处理器测试方法研究与实现

editor /

摘要: 作为32位RISC 微处理器主流芯片, ARM 芯片得到长足发展和广泛应用。因而, ARM 芯片的测试需求更加强劲的同时,测试工作量在加大,测试复杂度也在增加.本文给出了基于ARMCo rte x-M3 的微处理器测试方法,该方法也可用于类似结构的微处理器测试。

作为32位RISC微处理器主流芯片,ARM芯片得到长足发展和广泛应用。因而,ARM芯片的测试需求更加强劲的同时,测试工作量在加大,测试复杂度也在增加。本文给出了基于ARM Cortex-M3的微处理器测试方法, 该方法也可用于类似结构的微处理器测试。

<strong>引言</strong>

如何移植uCOS-II到Cortex-M3平台?这里有步骤!

editor /

本文的目的是希望读者能够通过本文的内容掌握移植uCOS-II 的规范方法。如果只是需要移植文件,可以直接去Micriμm的官网上下载。

移植uCOS-II,主要的移植工作是编写如下三个文件:

<strong>OS_CPU.H</strong>

OS_CPU_C.C
OS_CPU_A.ASM

下面就按照这三个文件的顺序来介绍。本文以STM32F107+RealView Compiler 开发环境为例。如果使用的其他的开发环境,个别代码可能需要做些小修改。

OS_CPU.H

OS_CPU.H 的第一部分是定义了一个宏OS_CPU_EXT。这一部分暂时可以先不去管。
#ifdef OS_CPU_GLOBALS
#define OS_CPU_EXT
#else
#define OS_CPU_EXT extern
#endif

在Cortex-M系列上如何准确地做us级延时?

editor /

前几天刚好同事问起在Cortex-M上延时不准的问题,在网上也没找到比较满意的答案,干脆自己对这个问题做一个总结。

根据我们的经验,最容易想到的大概通过计算指令周期来解决。该思路在Cortex上并不是很适用:一方面MCU从Flash取指是有延时的,另一方面Cortex的指令集不是固定周期的,特别从M3加入分支预测后,分支指令在Cortex-M不同型号上的结果都不相同。因此除了指令周期外,我们需要考虑的东西还有很多,才能得到正确的结果。

<strong>不带分支预测器的情况</strong>

仍然先从不带分支预测器的Cortex-M0开始,通过计算指令周期延时的实现代码如下:

void delay_us(us) {
delay_ntimes((us * sysclk - 8) / 4);
}
__asm void delay_ntimes(unsigned int n)
{
L1
SUBS R0, #1
BCS L1
BX LR
}

从这段代码可发现两个主要问题: