文章具体介绍了关于 ARM 的 22 个常用概念
1.ARM 中一些常见英文缩写解释
MSB: 最高有效位;
LSB: 最低有效位;
AHB: 先进的高性能总线;
VPB: 连接片内外设功能的 VLSI 外设总线;
EMC: 外部存储器控制器;
MAM: 存储器加速模块;
VIC: 向量中断控制器;
SPI: 全双工串行接口;
CAN: 控制器局域网, 一种串行通讯协议;
PWM: 脉宽调制器;
ETM: 嵌入式跟踪宏;
CPSR: 当前程序状态寄存器;
SPSR: 程序保护状态寄存器;
2.MAM 使用注意事项:
答: 当改变 MAM 定时值时, 必须先通过向 MAMCR 写入 0 来关闭 MAM, 然后将新值写入 MAMTIM 最后, 将需要的操作模式的对应值写入 MAMCR, 再次打开 MAM
对于低于 20MHz 的系统时钟, MAMTIM 设定为 001 对于 20MHz 到 40MHz 之间的系统时钟, 建议将 Flash 访问时间设定为 2cclk, 而在高于 40MHz 的系统时钟下, 建议使用 3cclk
3.VIC 使用注意事项
答: 如果在片内 RAM 当中运行代码并且应用程序需要调用中断, 那么必须将中断向量重新映射到 Flash 地址 0x0 这样做是因为所有的异常向量都位于地址 0x0 及以上通过将寄存器 MEMMAP(位于系统控制模块当中)配置为用户 RAM 模式来实现这一点用户代码被连接以便使中断向量表装载到 0x4000 0000
4. ARM 启动代码设计
答: ARM 启动代码直接面对处理器内核和硬件控制器进行编程, 一般使用汇编语言启动代码一般包括:
中断向量表
初始化存储器系统
初始化堆栈初始化有特殊要求的端口设备
初始化用户程序执行环境
改变处理器模式
呼叫主应用程序
5.IRQ 和 FIQ 之间的区别
答: IRQ 和 FIQ 是 ARM 处理器的两种编程模式 IRQ 是指中断模式, FIR 是指快速中断模式对于 FIQ 你必须尽快处理你的事情并离开这个模式 IRQ 可以被 FIQ 所中断, 但 IRQ 不能中断 FIQ 为了使 FIQ 更快, 所以这种模式有更多的影子寄存器 FIQ 不能调用 SWI(软件中断)FIQ 还必须禁用中断如果一个 FIQ 例程必须重新启用中断, 则它太慢了, 并应该是 IRQ 而不是 FIQ
6.ARM 处理器对异常中断的响应过程
答: ARM 处理器对异常中断的响应过程如下所述:
保存处理器当前状态中断屏蔽位以及各条件标志位;
设置当前程序状态寄存器 CPSR 中的相应位;
将寄存器 lr_mode 设置成返回地址;
将程序计数器值 PC, 设置成该异常中断的中断向量地址, 跳转到相应异常中断处执行
7.ARM 指令与 Thumb 指令的区别
答: 在 ARM 体系结构中, ARM 指令集中的指令是 32 位的指令, 其执行效率很高对于存储系统数据总线为 16 位的应用系统, ARM 体系提供了 Thumb 指令集 Thumb 指令集是对 ARM 指令集的一个子集重新编码得到的, 指令长度为 16 位通常在处理器执行 ARM 程序时, 称处理器处于 ARM 状态; 当处理器执行 Thumb 程序时, 称处理器处于 Thumb 状态 Thumb 指令集并没有改变 ARM 体系地层的程序设计模型, 只是在该模型上加上了一些限制条件 Thumb 指令集中的数据处理指令的操作数仍然为 32 位, 指令寻址地址也是 32 位的
8. 什么是 ATPCS
答: 为了使单独编译的 C 语言程序和汇编程序之间能够相互调用, 必须为子程序之间的调用规定一定的规则 ATPCS 就是 ARM 程序和 Thumb 程序中子程序调用的基本规则这些规则包括寄存器使用规则, 数据栈的使用规则, 参数的传递规则等
9.ARM 程序和 Thumb 程序混合使用的场合
答: 通常, Thumb 程序比 ARM 程序更加紧凑, 而且对于内存为 8 位或 16 位的系统, 使用 Thumb 程序效率更高但是, 在下面一些场合下, 程序必须运行在 ARM 状态, 这时就需要混合使用 ARM 和 Thumb 程序
强调速度的场合, 应该使用 ARM 程序;
有些功能只能由 ARM 程序完成如: 使用或者禁止异常中断;
当处理器进入异常中断处理程序时, 程序状态切换到 ARM 状态, 即在异常中断处理程序入口的一些指令是 ARM 指令, 然后根据需要程序可以切换到 Thumb 状态, 在异常中断程序返回前, 程序再切换到 ARM 状态
ARM 处理器总是从 ARM 状态开始执行因而, 如果要在调试器中运行 Thumb 程序, 必须为该 Thumb 程序添加一个 ARM 程序头, 然后再切换到 Thumb 状态, 执行 Thumb 程序
10.ARM 处理器运行模式
答: ARM 微处理器支持 7 种运行模式, 分别为:
用户模式(usr):ARM 处理器正常的程序执行状态;
快速中断模式(fiq): 用于高速数据传输或通道管理;
外部中断模式(irq): 用于通用的中断处理;
管理模式(svc): 操作系统使用的保护模式;
数据访问终止模式(abt): 当数据或指令预取终止时进入该模式, 用于虚拟存储及存储保护;
系统模式(sys): 运行具有特权的操作系统任务;
未定义指令中止模式(und): 当未定义指令执行时进入该模式, 可用于支持硬件协处理器的软件仿真
11.ARM 体系结构所支持的异常类型
答: ARM 体系结构所支持的异常和具体含义如下(圈里面的数字表示优先级):
复位: 当处理器的复位电平有效时, 产生复位异常, 程序跳转到复位异常处执行(异常向量: 0x0000,0000);
未定义指令: 当 ARM 处理器或协处理器遇到不能处理的指令时, 产生为定义异常可使用该异常机制进行软件仿真(异常向量: 0x0000,0004);
软件中断: 有执行 SWI 指令产生, 可用于用户模式下程序调用特权操作指令可使用该异常机制实现系统功能调用(异常向量: 0x0000,0008);
指令预取中止: 若处理器的预取指令的地址不存在, 或该地址不允许当前指令访问, 存储器会向处理器发出中止信号, 当预取指令被执行时, 才会产生指令预取中止异常(异常向量: 0x0000,000C);
数据中止: 若处理器数据访问的指令的地址不存在, 或该地址不允许当前指令访问, 产生数据中止异常(异常向量: 0x0000,0010);
IRQ(外部中断请求): 当处理器的外部中断请求引脚有效, 且 CPSR 中的 I 位为 0 时, 产生 IRQ 异常系统的外设可以该异常请求中断服务(异常向量: 0x0000,0018);
FIQ(快速中断请求): 当处理器的快速中断请求引脚有效, 且 CPSR 中的 F 位为 0 时, 产生 FIQ 异常(异常向量: 0x0000,001C)
说明: 其中异常向量 0x0000,0014 为保留的异常向量
12.ARM 体系结构的存储器格式
答: ARM 体系结构的存储器格式有如下两种:
大端格式: 字数据的高字节存储在低地址中, 字数据的低字节存放在高地址中;
小端格式: 与大端存储格式相反, 高地址存放数据的高字节, 低地址存放数据的低字节
13.ARM 寄存器总结:
ARM 有 16 个 32 位的寄存器(r0 到 r15)
r15 充当程序寄存器 PC,r14(link register)存储子程序的返回地址, r13 存储的是堆栈地址
ARM 有一个当前程序状态寄存器: CPSR
一些寄存器 (r13,r14) 在异常发生时会产生新的 instances, 比如 IRQ 处理器模式, 这时处理器使用 r13_irq 和 r14_irq
ARM 的子程序调用是很快的, 因为子程序的返回地址不需要存放在堆栈中
14. 存储器重新映射 (Remap) 的原因:
使 Flash 存储器中的 FIQ 处理程序不必考虑因为重新映射所导致的存储器边界问题;
用来处理代码空间中段边界仲裁的 SRAM 和 Boot Block 向量的使用大大减少;
为超过单字转移指令范围的跳转提供空间来保存常量
ARM 中的重映射是指在程序执行过程中通过写某个功能寄存器位操作达到重新分配其存储器地址空间的映射一个典型的应用就是应用程序存储在 Flash/ROM 中, 初始这些存储器地址是从 0 开始的, 但这些存储器的读时间比 SRAM/DRAM 长, 造成其内部执行频率不高, 故一般在前面一段程序将代码搬移到 SRAM/DRAM 中去, 然后重新映射存储器空间, 将相应 SRAM/DRAM 映射到地址 0, 重新执行程序可达到高速运行的目的
15. 存储异常向量表中程序跳转使用 LDR 指令, 而不使用 B 指令的原因:
LDR 指令可以全地址范围跳转, 而 B 指令只能在前后 32MB 范围内跳转;
芯片具有 Remap 功能当向量表位于内部 RAM 或外部存储器中, 用 B 指令不能跳转到正确的位置
16. 锁相环 (PLL) 注意要点:
PLL 在芯片复位或进入掉电模式时被关闭并旁路, 在掉电唤醒后不会自动恢复 PLL 的设定;
PLL 只能通过软件使能;
PLL 在激活后必须等待其锁定, 然后才能连接;
PLL 如果设置不当将会导致芯片的错误操作
17.ARM7 与 ARM9 的区别:
ARM7 内核是 0.9MIPS/MHz 的三级流水线和冯 & S226; 诺伊曼结构; ARM9 内核是五级流水线, 提供 1.1MIPS/MHz 的哈佛结构
ARM7 没有 MMU,ARM720T 是 MMU 的; ARM9 是有 MMU 的, ARM940T 只有 Memory protection unit. 不是一个完整的 MMU
ARM7TDMI 提供了非常好的性能功耗比它包含了 Thumb 指令集快速乘法指令和 ICE 调试技术的内核 ARM9 的时钟频率比 ARM7 更高, 采用哈佛结构区分了数据总线和指令总线
18.VIC 的基本操作如下:
答: 设置 IRQ/FIQ 中断, 若是 IRQ 中断则可以设置为向量中断并分配中断优先级, 否则为非向量 IRQ 然后可以设置中断允许, 以及向量中断对应地址或非向量中断默认地址当有中断后, 若是 IRQ 中断, 则可以读取向量地址寄存器, 然后跳转到相应的代码当要退出中断时, 对向量地址寄存器写 0, 通知 VIC 中断结束当发生中断时, 处理器将会切换处理器模式, 同时相关的寄存器也将会映射
19. 使用外部中断注意
把某个引脚设置为外部中断功能后, 该引脚为输入模式, 由于没有内部上拉电阻, 所以必须外接一个上拉电阻, 确保引脚不被悬空;
除了引脚连接模块的设置, 还需要设置 VIC 模块, 才能产生外部中断, 否则外部中断只能反映在 EXTINT 寄存器中;
要使器件进入掉电模式并通过外部中断唤醒, 软件应该正确设置引脚的外部中断功能, 再进入掉电模式
20.UART0 的基本操作方法
设置 I/O 连接到 UART0;
设置串口波特率(U0DLMU0DLL);
设置串口工作模式(U0LCRU0FCR);
发送或接收数据(U0THRU0RBR);
检查串口状态字或等待串口中断(U0LSR)
21.I2C 的基本操作方法
答: I2C 主机基本操作方法:
设置 I2C 管脚连接;
设置 I2C 时钟速率(I2SCLHI2SCLL);
设置为主机, 并发送起始信号(I2CONSET 的 I2ENSTA 位为 1,AA 位为 0);
发送从机地址(I2DAT), 控制 I2CONSET 发送;
判断总线状态(I2STAT), 进行数据传输控制;
发送结束信号(I2CONSET)
I2C 从机基本操作方法:
设置 I2C 管脚连接;
设置自身的从机地址(I2ADR);
使能 I2C(I2CONSET 的 I2ENAA 位为 1);
判断 SI 位或等待 I2C 中断, 等待主机操作;
判断总线状态 I2STAT, 进行数据传输控制
22. PWM 基本操作方法:
连接 PWM 功能管脚输出, 即设置 PINSEL0PINSEL1;
设置 PWM 定时器的时钟分频值(PWMPR), 得到所要的定时器时钟;
设置比较匹配控制(PWMMCR), 并设置相应比较值(PWMMRx);
设置 PWM 输出方式并允许 PWM 输出 (PWMPCR) 及锁存使能控制(PWMLER);
设置 PWMTCR, 启动定时器, 使能 PWM;
运行过程中要更改比较值时, 更改之后要设置锁存使能
使用双边沿 PWM 输出时, 建议使用 PWM2PWM4PWM6; 使用单边 PWM 输出时, 在 PWM 周期开始时为高电平, 匹配后为低电平, 使用 PWMMR0 作为 PWM 周期控制, PWMMRx 作为占空比控制
来源: http://www.bubuko.com/infodetail-2529795.html