最近在学ARM Cortex-M3,找了本号称很经典的书“An Definitive Guide to The ARM Cortex-M3”在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。

第三章 Cortex-M3 基础

这章的内容有不少是和第二章重复的。重复的部分这里就不再提了。

堆栈

Cortex-M3 的堆栈是倒生的,实栈顶。也就是R13指向最后一次压入堆栈的内容。
下面是个简单的例子:
PUSH {R0} ; *(--R13)=R0。R13是long*的指针
POP {R0} ; R0= *R13++

PUSH 和 POP 可以一次操作多个寄存器:
subroutine_1
PUSH {R0-R7, R12, R14} ; 保存寄存器列表
… ; 执行处理
POP {R0-R7, R12, R14} ; 恢复寄存器列表
BX R14 ; 返回到主调函数
上面的例子中顺带也用到了R14。因此就不单独讲解R14了。

特殊功能寄存器组

访问特殊功能寄存器需要用专用指令:
MRS <gp_reg>, <special_reg> ;读特殊功能寄存器的值到通用寄存器
MSR <special_reg>, <gp_reg> ;写通用寄存器的值到特殊功能寄存器

程序状态寄存器在其内部又被分为三个子状态寄存器:
 应用程序PSR(APSR)
 中断号PSR(IPSR)
 执行PSR(EPSR)
参看下图:

图 6 Cortex-M3中的程序状态寄存器(xPSR)

PRIMASK,FAULTMASK和BASEPRI 控制中断和异常的开启和屏蔽
PRIMASK = 1后只有NMI和硬fault可以响应,默认为0
FAULTMASK = 1后只有NMI和硬fault可以响应,默认为0
BASEPRI:优先级号大于等于此值的中断都被屏蔽
只有在特权级下,才允许访问这3个寄存器。

控制寄存器(CONTROL)
CONTROL[0]=1,用户级的线程模式
CONTROL[0]=0,特权级的线程模式
CONTROL[1]=1,选择使用MSP
CONTROL[1]=0,选择使用PSP

中断向量表

默认的中断向量表在地址0处,利用NVIC的重定位寄存器可以将其重定位。
另外,中断向量表的第一个向量的位置存放的是MSP的初始值。

ARM Cortex-M3 学习笔记(3)相关推荐

  1. [mmu/cache]-ARM MMU的学习笔记-一篇就够了

    ★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位 . 相关文章 1.ARM cache的学习笔记-一 ...

  2. [mmu/cache]-ARM cache的学习笔记-一篇就够了

    ★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位 . 相关文章 1.ARM MMU的学习笔记-一篇就 ...

  3. KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记3——串口Stdio实现

    KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记3--串口Stdio实现 一.介绍 任务目标 二.工程创建 三.软件设计 第一步,BSP构建 1, 添加前面的pll_config文件 2 ...

  4. KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记4——Directives

    KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记4--Directives 一.若干重要的DIRECTIVE介绍 二.一些概念 三.Directives详细介绍 1,GET/INCLUD ...

  5. ARM Cortex M3指令集

    一.跳转指令 跳转指令用于实现程序流程的跳转,在ARM 程序中有两种方法可以实现程序流程的跳转: Ⅰ.使用专门的跳转指令. Ⅱ.直接向程序计数器PC 写入跳转地址值. 通过向程序计数器PC 写入跳转地 ...

  6. ARM aarch64汇编学习笔记(一):ARMv8架构

    第一期专辑,主要写下自己学习如何在window下使用NDK-BUILD来实现ARM aarch64架构汇编编程. 为何要引入ARMV8: 考虑到ARMV7被市场广泛接受,以及形成的成熟的生态,因此后续 ...

  7. ARM 汇编语言编程学习笔记(1)

    0.1.Thumb指令集 Thumb指令集是ARM指令集的子集,其性能更低,但是代码密度更高,功耗更低. Thumb指令集分为Thumb-1指令集和Thumb-2指令集,其中Thumb-1指令集是16 ...

  8. arm汇编的学习笔记,对比x86和arm(1)-从最简单的函数谈起

    最简单的函数 x86下汇编指令 ARM下汇编指令 Hello World x86中汇编指令 ARM汇编 LDM/STM指令 LDMFD 指令 ADR指令: 知识点扩展: ADR ADRL: LDR指令 ...

  9. ARM aarch64汇编学习笔记(二):ARM DS-5模拟器安装和使用

    工欲善其事,必先利其器. 使用Qemu 虽然可以进行模拟开发,但在Qemu调试汇编有一些困难. DS-5 (即ARM Development Studio 5) ,是一款针对 ARM 支持的 Linu ...

  10. ARM汇编指令学习笔记(一)

    (一)数据常量定义汇编指令EQU EQU用于为程序中的常量.标号等定义一个有效的字符名称,类似于C语言中的#define,当表达式为32位常量时,可指定表达式的数据类型,CODE16,CODE32,D ...

最新文章

  1. 开发者建站免费.或者.收费空间
  2. JDBC——概述与JDBC的使用
  3. cad画流程图的插件_盘一盘,那些提效/创意的 vscode 插件
  4. 教你如何挑选深度学习GPU
  5. 移动平台开发项目(推箱子小游戏)
  6. 20191208_神经网络交叉验证
  7. Intellij idea 运行 vertx examples
  8. 渗透测试教程(基础篇)-2
  9. 手动解除加密文件夹 lockdir产生的文件com1.{d3e34b21-9d75-101a-8c3d-00aa001a1652}
  10. 基于java+jsp房屋租赁管理系统
  11. Linux终端复制粘贴后前后会多出0~和~1
  12. 域名被封跟服务器IP有没有关系?
  13. 微信小程序如何使用SCSS
  14. 计算机wold标题文字加背景,office word文档添加背景图片以及背景颜色来美化枯燥乏味的文字...
  15. signature=00e71e60a412c9a393d6d1740e539e14,2006年江苏专转本(英语)真题试卷
  16. 使用 Underminer Studios 的 MR 配置器工具制作现实混合虚拟现实视频
  17. 阿里妈妈不能攻百度也不能守淘宝 !
  18. 代码分享:面波数据快速成图
  19. 在C++中部署python深度学习-学习笔记
  20. MySQL:网络连接框架简析

热门文章

  1. TeX系列: dot2tex 和 dot2texi 配置步骤
  2. 如何减少PDF文件的大小
  3. Angular 个人深究(一)【Angular中的Typescript 装饰器】
  4. 计算机水平毕业研究生7分落户,应届生们注意啦!只要72分就可以落户上海
  5. 高速电路设计实践学习笔记(一)电阻 电容 电感 磁珠
  6. 磁珠和电感在解决EMI和EMC的不同应用
  7. ActiveMQ 无法访问管理页面
  8. Anbox源码分析(四)——Anbox渲染原理(源码分析)
  9. sql 计算法定假节假日解决方案一
  10. Windows修改注册表实现开机自启动