ARM处理器开发详解

article/2025/11/9 10:16:26

目录

  • 第一章 嵌入式系统基础知识(不考)
    • 嵌入式系统特点
    • 交叉调试调试器
  • 第二章 嵌入式 ARM 技术概论
    • ARM的基本数据类型(不考)
    • 选择ARM芯片的一般原则
    • Cortex-A9内核的八种工作模式
    • 流水线(不考)
    • 寄存器组织
    • 程序状态寄存器(重要)
      • 标志位
      • 控制位
      • 条件码表
  • 第三章 ARM 微处理器的指令系统
    • ARM 处理器寻址方式
      • 批量Load/Store指令寻址方式
      • 堆栈操作寻址方式
    • ARM处理器的指令集
      • 数据操作指令
      • Load/Store指令
        • 单寄存器时
        • 多寄存器时
      • 跳转指令
      • 状态操作指令(操作程序状态寄存器)
  • 第四章 ARM 汇编语言程序设计
    • ARM汇编器支持的伪指令
    • GNU ARM 内联汇编(编程)
    • 汇编和C语言混合编程
      • C程序调用汇编程序
      • 汇编程序调用C程序
  • 第六章 GPIO
  • 第七章 ARM 异常及中断处理
    • ARM的7种异常类型
    • 复位异常中断处理(不考)
  • 第八章 FIQ 和 IRQ中断
    • 通用中断控制器(GIC)
      • GIC中断控制器类型分为三种
      • GIC中断控制器中断状态
    • GIC寄存器
  • 第九章 通用异步收发接口(UART)
    • 串行通信和并行通信的比较:
      • 异步串行方式特点
      • 同步串行方式特点
    • RS-232C串口规范
  • 第十章 PWM定时器
  • 第十一章 看门狗定时器
  • 第十二章 RTC定时器
  • 第十三章 A/D转换器
    • A/D转换的技术指标
  • 第十四章 I2C总线
    • I2C的专业术语
    • I2C总线信号和时序
    • I2C通信流程
    • I2C总线寻址
    • I2C控制器操作流程
    • 几种操作时序图
  • 第十五章 SPI接口
    • SPI的四个引脚
  • 题目预测
    • 编程题
      • 汇编语言编程
      • 内联汇编编程
    • 问答题
      • 1、描述程序状态寄存器各位的作用
      • 2、列出Cortex-A9处理器的八个工作模式
      • 3、列出七个ARM指令的寻址方式
      • 4、列出Cortex-A9的七个异常类型
    • 列举题
      • 1、ARM Cortex-A9有两种工作状态,它们分别是
      • 2、ARM处理器有多少个寄存器
      • 3、GPIO端口有哪两种方向
      • 4、串口通信的停止位有三种,它们分别是
      • 5、在汇编语言中定义一个全局数值变量用的伪操作是什么,定义局部字符串变量用的伪操作是什么

第一章 嵌入式系统基础知识(不考)

嵌入式系统特点

1,专用、软硬件可剪裁可配置

2,低功耗、高可靠性、高稳定性

3,软件代码短小精悍

4,代码可固化

5,实时性

6,弱交互性

7,需要专门的开发工具和开发环境

8,要求开发,设计人员有较高的技能

交叉调试调试器

1、软件方式:gdb调试器

2、硬件方式:ROM Monitor、ROM Emulator、In-Circuit Emulator、In-Circuit Debugger

第二章 嵌入式 ARM 技术概论

ARM Cortex处理器基于ARM v7架构,Cortex分为三个系列:Cortex A、Cortex R、Cortex M

使用场景:

​ Cortex A:多功能复杂性

​ Cortex R:实时性要求高

​ Cortex M:嵌入式,单片机


ARM的基本数据类型(不考)

类型中文大小
Byte字节8bit
Halfword半字16bit
Word32bit

选择ARM芯片的一般原则

1、功能:

​ 考虑处理器本身能够支持的功能,如支持USB、网络、串口、液晶显示功能等。

2、性能:

​ 从处理器的功耗、速度、稳定性、可靠性方面考虑。

3、价格:

​ 通常产品总是希望在完成功能要求的基础上,成本越低越好。在选择处理器时需要考虑处理器的价格,以及由处理器衍生出的开发价格。如开发板价格、处理器自身价格、外围芯片价格、开发工具价格、制版价格等。

4、熟悉程度及开发资源:

​ 通常公司对产品的开发周期都有严格的要求,选择一款自己熟悉的处理器可以大大降低开发风险。在自己熟悉的处理器都无法满足功能的情况下,可以尽量选择开发资源丰富的处理器。

5、操作系统支持:

​ 在选择嵌入式处理器时,如果最终的程序需要运行在操作系统上,那么还应该考虑处理器对操作系统的支持

6、升级:

​ 很多产品在开发完成后都会面临升级的问题,正所谓人无远虑必有近忧。所以在选择处理器时必须要考虑升级的问题。要尽量选择具有相同封装的不同性能等级的处理器;考虑产品未来可能增加的功能。

7、供货稳定:

​ 供货稳定也是选择处理器时的一个重要参考因素,尽量选择大厂家和比较通用的芯片。

Cortex-A9内核的八种工作模式

处理器工作模式简写描述
用户模式usr正常程序执行模式,大部分任务执行在这种模式下。
快速中断模式fiq当一个高优先级中断产生时会进入这种模式,一般用于高速数据传输通道处理
外部中断模式irq当一个低优先级中断产生会进入这种模式一般用于通常的中断处理。
特权模式svc当复位或者软中断指令执行时将会进入这种模式,一般用于通常的中断处理。
数据访问中止模式abt当存取异常时进入这种模式,用于虚拟存储或者存储保护。
未定义指令中止模式und当执行未定义指令时进入这种模式,有时用于通过软件仿真协处理器硬件的工作方式。
系统模式sys使用和user模式相同寄存器的模式,用于特权级操作系统任务。
监控模式mon可以在安全模式和非安全模式之间进行转换。

除了用户模式之外的其他7种处理器模式被称为特权模式,除了用户模式和系统模式之外的6种模式被称为异常模式

流水线(不考)

**3级流水线:**取指令、译码、执行

**5级流水线:**取指令、译码、执行、LS1负责加载和存储指令中制定的数据,LS2则负责提取、符号扩展,通过字节或半字加载命令来加载数据。(但是LS1和LS2仅对加载(LDR)和存储命令(STR)有效,其他的指令是不需要执行这两个阶段的)

寄存器组织

ARM处理器内部有40个32位寄存器,其中包括:32个通用寄存器,7个状态寄存器(1个CPSR,6个SPSR),1个程序计数器PC。

CPSR:当前程序状态寄存器

SPSR:备份程序状态寄存器

特殊的几个寄存器:

​ SP:R13寄存器(用作堆栈指针)

​ LR:R14寄存器(连接寄存器)

​ PC:R15寄存器

程序状态寄存器(重要)

程序状态寄存器格式

标志位

条件标志位:N、Z、C、V 通称为条件标志位,也就是CPSR的高4位。条件标志位会根据程序中的算术指令或逻辑指令的执行结果进行修改。

条件标志位含义
N当两个由补码组成的有符号整数运算时,N=1表示运算的结果为负数,N=0表示运算的结果为正数或0。
ZZ=1表示运算的结果为0,Z=0表示结果为不为0
C加法指令(包括比较指令CMN),当结果产生了进位,则C=1,表示无符号数运算发生上溢出;其他情况下C=0。在减法指令中(包括比较指令CMP),当运算中发生了错位(即无符号数运算发生下溢出),则C=0;其他情况下C=1。对于在操作数中包含移位操作的运算指令(非加减指令),C被设置为被移位寄存器最后移出去的位。对于其他非加减运算指令,C的值通常不受影响。
V对于加减指令,当运算结果溢出时V=1,表示符号位溢出,没有溢出V=0。对于非加减指令,V的值通常不受影响

控制位

CPSR的低8位(I、F、T、M[4:0])统称为控制位。当异常发生时,这些位的值将发生响应的变化。

(1)中断禁止位

​ I=1,IRQ被禁止

​ F=1,FIQ被禁止

(2)状态控制位

​ T位是处理器的状态控制位,T位只有在T系列的ARM处理器上才有效,在非T系列的ARM版本中,T位始终为0

​ T=0,处理器处于ARM状态(即正在执行32位的ARM指令)

​ T=1,处理器处于Thumb状态(即正在执行16位的Thumb指令)

(3)模式控制位

​ M[4:0]是位模式控制位,这些位的组合确定了处理器处于哪种状态。

条件码表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gt5QKlQa-1592389913678)(https://s1.ax1x.com/2020/06/12/tXyf5d.jpg)]

第三章 ARM 微处理器的指令系统

ARM指令集可以分为跳转指令数据处理指令程序状态寄存器传输指令Load/Store指令协处理器指令异常中断产生指令

ARM 处理器寻址方式

ARM指令的寻址方式分为数据处理指令寻址方式内存访问指令寻址方式

数据处理指令寻址方式:立即数寻址方式、寄存器寻址方式、寄存器移位寻址方式。主要的作用是对数据的处理。

内存访问指令寻址方式:主要的作用是将内存中的数据加载到寄存器中(load)或者是将寄存器中的数据存储到内存中(store)。

批量Load/Store指令寻址方式

格式模式解释
IA后递增方式每次传送后地址加4
IB先递增方式每次传送前地址加4
DA后递减方式每次传送后地址减4
DB先递减方式每次传送前地址减4

堆栈操作寻址方式

格式模式解释
FD满递减方式堆栈指针指向栈顶元素,堆栈向内存地址减小的方向增长。
ED空递减方式堆栈指针指向第一个可用元素(也就是空位置),堆栈向内存地址是增加的方向增长。
FA满递增方式堆栈指针指向栈顶元素,堆栈向内存地址减小的方向增长。
EA空递增方式堆栈指针指向第一个可用元素(也就是空位置),堆栈向内存地址是增加的方向增长。

ARM处理器的指令集

数据操作指令

注意:数据处理指令加上S,指令的执行结果将会影响CPSR中的标志位。

1、MOV 指令 说明:相当于赋值,将寄存器中的值或者立即数转移

MOV R0, R1
MOV R0, #4
MOV R0, R0, LSL #3

2、MVN 指令 说明:反相传送,将操作数的反码传送到目标寄存器

MVN R0, #4	; R0=-5
MVN R0, #0	; R0=-1

3、AND 指令 说明:逻辑与运算

AND R0, R0, #3
AND R2, R1, R3

4、EOR 指令 说明:逻辑异或运算

EOR R0, R0, #3

5、SUB 指令 说明:减法运算

SUB R0, R1, R2

6、ADD 指令 说明:加法运算

ADD R0, R1, R2
ADD R0, R0, #4

7、CMP 指令 说明:比较两个数是不是相等

CMP R1, #10		; 比较R1和立即数10并设置响应的标志位
CMP R1, R2		; 比较寄存器R1和R2的值并设置相关的标志位

8、CMN 指令 说明:比较两个数是不是相反数

CMN R0, #1

9、ORR 指令 说明:逻辑或运算

ORR R0, R0, #3

10、BIC 指令 说明:位清零运算

BIC R0, R0, #0x1011	; 将立即数中为1的位清零

11、MUL 指令 说明:乘法运算

MUL R1, R2, R3		; R1 = R2 × R3
MULS R0, R3, R7		; R0 = R3 × R7,并同时设置CPSR中的N位和Z位

12、MLA 指令 说明:乘法运算后加上一个操作数

MLA R1, R2, R3, #10		; R1 = R2 × R3 + 10

13、SWP指令 说明:交换指令

MOV R0, #0
SWP R1, R1, [R0]	; 将R0地址中的值和R1互换位置
SWP R1, R2, [R3]	; 将R3地址中的值给R1,将R2的值放到R3的地址中

Load/Store指令

单寄存器时

LDR指令:

LDR R1, [R0, #0x12]			; 将R0+12地址处的数据读出存放到R1中
LDR R1, [R0]				; 将R0地址处的数据读出存放到R1中
LDR R1, [R0, R2]			; 将R0+R2地址处的数据读出存放到R1中
LDR R1, [R0, R2, LSL #2]	; 将R0+R2×4地址处的数据读出存放到R1中
LDR Rd, label				
LDR Rd, [Rn], #0x04			; 将Rn地址处的数据读出存放到Rd中,然后Rn的值变成原来的值加0x04

STR指令:

STR R1, [R0]	; 将R1的值保存到R0地址中

多寄存器时

LDM指令:

LDMIA R0!, {R3~R9}		; 从R0指向的地址上加载数据到R3~R9上,R0值更新
STMIA R1!, {R3~R9}		; 将R3~R9的数据存储到R1指向的地址上,R1值更新
STMFD SP!, {R0~R7,LR}	; 现场保存,将R0~R7、LR入栈
LDMFD SP!, {R0~R7,PC}	; 恢复现场,异常处理返回

注:!表示完成数据传输后要更新基址寄存器

跳转指令

指令说明作用
B跳转指令使程序跳转到指定的地址执行程序
BL带返回的连接跳转将下一条指令的地址复制到LR中,然后跳转到指定地址运行程序
BX跳转并切换状态能切换Thumb状态和ARM状态
BLX带返回的跳转并切换状态能切换Thumb状态和ARM状态,也能返回

状态操作指令(操作程序状态寄存器)

指令作用
MRS把程序状态寄存器的值送到一个通用寄存器
MSR把通用寄存器的值送到程序状态寄存器或把一个立即数送到程序状态字
MRS R1, CPSR	; 读取CPSR的值,保存到R1中
MRS R2, SPSR	; 读取SPSR的值,保存到R2中
MSR CPSR, #0xD3	; 低8位设置为:1101 0011 切换到管理模式
MSR CPSR, R3	; 将R3的内容保存到CPSR中

第四章 ARM 汇编语言程序设计

ARM汇编器支持的伪指令

伪指令名作用
ADR小范围地址读取伪指令
ADRL中等范围地址读取伪指令
LDR装载一个32位的常数或一个地址到寄存器

LDR常用

LDR R3, =0xff0	; 将常数0xff0读进寄存器R3中
LDR R1, =place	; 将place标号地址读入R1中

GNU ARM 内联汇编(编程)

语法:asm volatile ("asm code":output:input:changed); 如果后面没有任何内容:可以省略,前面或中间的:不能省略。

汇编语句放到字符串中,多个字符串之间只要不加任何符号编译完之后就会变成一个字符串,汇编指令之间必须要换行。

"mov r0, r0\n\t"
"mov r1, r1\n\t"
"mov r2, r2"

output是输出值:汇编语言 -> C语言

input是输入值:C语言 -> 汇编语言

看一下output的格式:

asm volatile("asm code":"约束"(变量));

约束定义了变量的存放位置:

r : 使用任何可用的通用寄存器

m : 使用变量的内存地址

还有一些输出的修饰符:

+ : 可读可写

= : 只写

& : 该输出操作数不能使用输出部分使用过的寄存器,只能 +& 或 =& 方式使用

再看一下input的格式:

asm volatile("asm code"::"约束"(变量 或 立即数));

约束定义了输入变量或是立即数的存放位置:

r : 使用任何可用的通用寄存器(变量和立即数都可以)

m : 使用变量的内存地址(不能用立即数)

i : 使用立即数(不能用变量)

使用占位符

int a = 100, b = 200;
int result;
asm volatile("mov %0,%3\n\t""ldr r0,%1\n\t""ldr r1,%2\n\t""str r0,%2\n\t""str r1,%1\n\t": "=r"(result), "+m"(a), "+m"(b): "i"(123)
);

引用占位符

int num = 100;
asm volatile("add %0,%1,#100\n\t": "=r"(a): "0"(a)	// 引用时不能加%,只能是 input 引用 output,引用是为了更能分清输出输入部分
);

&修饰符

int num;
asm volatile("mov %0,%1\n\t": "=&r"(num)	// 输入和输出的寄存器不相同: "r"(123)
);

内联汇编实例

#include <stdio.h>
unsigned long ByteSwap(unsigned long val)
{int ch;asm volatile("eor r3, %1, %1, ror #16\n\t""bic r3, r3, #0x00FF0000\n\t""mov %0, %1, ror, #8\n\t""eor %0, %0, r3, lsr #8": "=r"(val): "0"(val): "r3");
}
int main(void)
{unsigned long test_a = 0x1234, result;result = ByteSwap(test_a);printf("Result:%d\r\n", result);return 0;
}

汇编和C语言混合编程

C程序调用汇编程序

c语言程序:

#include <stdio.h>
extern void strcopy(char* d, const char* s);
int main()
{const char* srcstr = "First string - source ";char dststr[] = "Second string - destination";printf("Before copying:\n");printf("%s\n%s\n", srcstr, dststr);strcopy(dststr, srcstr);printf("After copying:\n");printf("%s\n%s\n", srcstr, dststr);return 0;
}

汇编语言程序:

.global strcopy
strcopy:				; R0指向目的字符串,R1指向源字符串LDRB R2, [R1], #1	; 加载字节并更新源字符串指针地址STRB R2, [R2], #1	; 存储字节并更新目的字符串指针地址CMP R2, #0			; 判断是否为字符串结尾BNE strcopy			; 如果不是,程序跳转到strcopy继续复制MOV PC, LR			; 程序返回

汇编程序调用C程序

C语言函数

int g(int a, int b, int c, int d, int e)
{return a + b + c + d + e;
}

汇编语言程序

# int f(i){ return g(i, 2*i, 3*i, 4*i, 5*i); }
.text
.global _start
_start:STR LR, [SP, #-4]!	; 保存返回地址 LRADD R1, R0, R0		; 计算2*i(第2个参数)ADD R2, R1, R0		; 计算3*i(第3个参数)ADD R3, R1, R2		; 计算5*iSTR R3, [SP, #-4]!	; 第5个参数需要通过堆栈传递ADD R3, R1, R1		; 计算4*i(第4个参数)BL g				; 调用C程序ADD SP, SP, #4		; 从堆栈中删除第5个参数LDR PC, [SP], #4	; 返回

第六章 GPIO

GPIO也就是通用IO接口。接口至少有两个寄存器:通用IO控制寄存器、通用IO数据寄存器。

GPIO端口有两种方向:输出 和 输入。

1、引脚控制寄存器(GPxCON):用来配置每个引脚的功能

2、引脚数据寄存器(GPxDAT):如果引脚功能被配置成输出功能,可以通过向该寄存器对应为写入数据,控制引脚输出响应电平。如果被配置为输入功能,则可以从对应位读出数据

第七章 ARM 异常及中断处理

ARM的7种异常类型

异常类型处理器模式执行低地址执行高地址
复位异常特权模式0x000000000xFFFF0000
未定义指令异常未定义指令中止模式0x000000040xFFFF0004
软中断异常特权模式0x000000080xFFFF0008
预取异常数据访问中止模式0x0000000C0xFFFF000C
数据异常数据访问中止模式0x000000100xFFFF0010
外部中断异常外部中断请求模式0x000000180xFFFF0018
快速中断异常快速中断请求模式0x0000001C0xFFFF001C

复位异常中断处理(不考)

1、设置异常中断向量表

2、初始化数据栈和寄存器

3、初始化存储系统

4、初始化关键I/O设备

5、使能中断

6、处理器切换到合适的模式

7、初始化C变量,跳转到应用程序执行

第八章 FIQ 和 IRQ中断

**中断软件分支处理:**非向量中断控制器NVIC、通用中断控制器GIC


通用中断控制器(GIC)

GIC架构分为:分配器、CPU接口、虚拟CPU接口

GIC中断控制器类型分为三种

(1)软中断(SGI)

​ 中断号0-15为SGI保留

(2)专用外设中断(PPI)

​ 中断号16-31为PPI保留

(3)共享外设中断(SPI)

​ 中断号32-1020用于共享外设中断

GIC中断控制器中断状态

GIC中断在不同的状态间切换:

(1)Inactive(无效)

​ 中断没有发生

(2)Pending(待处理)

​ 中断已经发生,但是等待核心来处理。待处理中断都做为CPU接口发送到核心处理的候选者

(3)Active(正在处理)

​ 中断发送给了核心,目前正在进行中断处理

(4)Active and pending(处理和待处理)

​ 一个中断源正在进行中断处理而GIC又接收到来自同一中断源的中断触发信号

GIC寄存器

1,CPU中断通道使能寄存器(ICCICR_CPUN n=0~3)

2,中断使能寄存器(ICDISERm_CPUn m=0~4 n=0~3)

3,CPU优先级过滤寄存器(ICCPMR_CPUn n=0~3)

4,GIC中断使能寄存器(ICDDCR)

5,中断目标CPU配置寄存器(ICDIPTRm_CPUn m=0~39 n=0~3)

6,中断响应寄存器(ICCIAR_CPUn n=0~3)

7,GIC中断状态清除寄存器(ICDICPRm_CPUn m=0~5 n=0~3)

8,中断处理结束寄存器(ICCEOIR_CPUn n=0~3)

9,I2C传输配置寄存器(I2CCONn n=0~7)

第九章 通用异步收发接口(UART)

在微型计算机中,通信有两种方式:串行通信并行通信

串行通信和并行通信的比较:

串行通信通常传输速度慢,但使用的传输设备成本低,可利用现有的通信手段和通信设备,适合于计算机的远程通信

并行通信的速度快,但使用的传输设备成本高,适合于近距离的数据传送。

异步通信:指数传送以字符为单位,字符与字符间的传送是完全异步的,位与位之间的传送基本上是同步的。

异步串行方式特点

1、以字符为单位传送信息

2、相邻两字符间的间隔是任意长

3、因为一个字符中的波特位长度有限,所以需要的接收时钟和发送时钟只要相接近就可以

4、异步方式特点就是:字符间异步,字符内部各位同步

同步串行方式特点

1、以数据块为单位传送信息

2、在一个数据块(信息帧)内,字符与字符间无间隔

3、因为一次传输的数据块中包含的数据较多,所以接收时钟与发送时钟严格同步,通常要有同步时钟

RS-232C串口规范

9针引脚定义

引脚简写功能说明
1CD载波侦测
2RXD接收数据
3TXD发送数据
4DTR数据终端设备
5GND地线
6DSR数据准备好
7RTS请求发送
8CTS清除发送
9RI振铃指示

接线方式:2接3、3接2、5接5

第十章 PWM定时器

功能:定时触发、标记事件间隔(还可以用来输入捕捉、输出比较、PWM信号输出等)。

定时器的实质:定时器的本质就是一个计数器,只不过计数器记录的是处理器外部发生的事情,定时器记录时钟脉冲的个数。

**PWM(脉冲宽度调制):**是利用处理器的数字输出对模拟电路进行控制的一种非常有效的技术,广泛应用在测量、通信、功率控制个变换等多个领域。

**PWM控制技术优点:**控制简单、灵活、动态响应好;从处理器到被控制系统信号都是数字形式的,在进行数模转换时,可将噪声影响降到最低。

**4412-PWM定时器:**Exynos4412中共有5个32位定时器,可产生中断信号给ARM子系统。定时器0、1、2、3包含了脉冲宽度调制(PWM),并可驱动其外部的I/O口。

特点:

1、5个32位定时器

2、2个8位PCLK分频器提供1级预分,5个独立的2级分频器

3、可编程时钟选择的PWM独立通道

4、4个独立的PWM通道,可控制极性和占空比

5、静态配置:PWM停止

6、动态配置:PWM启动

7、支持自动重装模式及出发脉冲模式

8、两个PWM输出课带Dead-Zone发生器

9、中断发生器

第十一章 看门狗定时器

**看门狗的作用:**看门狗定时器用于检测程序的正常运行,当微控制器受到干扰进入错误状态后,使系统在一定时间间隔内自动复位重启。因此看门狗是保证系统长期、可靠个稳定运行的有效措施。主要的作用就是防死机。

**看门狗的原理:**启动看门狗后,必须在看门狗复位之前向特定寄存器中写入数值,不让看门狗定时器溢出,这样看门狗就会重新计时。当用户程序在规定时间内没有向特定寄存器中依次写入数值,看门狗定时器计数溢出,引起看门狗复位,看门狗产生一个强制系统复位。这样可以使程序重新运行,减少程序跑死的危害。看门狗需要不停的接收信号或者重新设置计数值,保持计数值不为0,如果一旦一段时间内接收不到信号或者计数值为0,看门狗就会发出复位信号。

**看门狗定时器特点:**需要不停的接收信号(一些外置看门狗芯片)或重新设置计数值(如Exynos4412的看门狗控制器),保持计数值不为0。一旦一段时间接收不到信号,或计数值为0,看门狗将发出复位信号复位系统或产生中断。

主要特性: 1、通用的中断方式的16位定时器。2、当计数器减到0(发生溢出)时,产生128个PLK周期的复位信号。

看门狗定时器寄存器:

1、看门狗定时器控制寄存器(WTCON)

2、看门狗定时器数据寄存器(WTDAT)

3、看门狗计数寄存器(WTCNT)

第十二章 RTC定时器

**RTC定时器的作用:**为一个嵌入式系统提供可靠的时间,并且要求系统处于关机状态下也能正常工作。

**Exynos4412RTC定时器概述:**RTC可以通过STRB/LDRB指令将8位BCD码数据送至CPU。这些BCD包括秒、分、时、日期、星期、月和年。RTC单元通过一个外部的32.768kHz晶体提供时钟。具有定时报警功能。

RTC定时器特点:

1、时钟数据采用BCD编码

2、能够对闰年的年月日进行自动处理

3、具有告警功能,当系统处于关机状态时,能产生告警中断

4、具有独立的电源输入

5、提供毫秒级时钟中断,该中断可用于作为嵌入式操作系统的内核时钟

RTC定时器软件设计流程:

1、设置RTC控制寄存器中的CTLEN为1,使能时间值寄存器数据的读/写

2、设置RTC当前时钟时间

3、在掉电前,RTCEN位应清0来预防误写入RTC寄存器中

4、读取年、月、日等相关寄存器的数据通过串口打印到屏幕上

第十三章 A/D转换器

A/D转换的技术指标

(1)分辨率

​ 表示会触发数字量变化的最小模拟信号的变化量。通常以输出二进制(或十进制)数的位数来表示。n位输出的A/D转换器能区分2n个不同等级的输入模拟电压,能区分输入电压的最小值为满量程输入的1/2n。 最大输入电压一定时,输出位数越多,量化单位越小,分辨率越高。

(2)转换速率

​ 指完成一次A/D转换所需的时间的倒数。积分型A/D转换时间是毫秒级的,属低速A/D;逐次比较型是微秒级的,属中速A/D;全并行/串并行型A/D是纳秒级的。采样时间则指两次转换的间隔。采样速率必须小于或等于转换速率,转换速率在数值上可等同于采样速率。采样速率常用单位是Ksps和Msps,表示每秒采样千/百万次。

(3)量化误差

​ 由于A/D的有限分辨率而引起的误差。通常是一个或半个最小数字量的模拟变化量。表示为1LSB、1/2LSB.

(4)偏移误差

​ 输入信号为0时输出信号不为0的值,可外接电位器调至最小。

(5)满度误差

​ 满度输出时对应的输入信号与理想输入信号值之差。

(6)线性度

​ 实际禅话器的转移函数与理想直线的最大偏差。

第十四章 I2C总线

I2C总线是两线式串行总线,是同步通信的一种特殊形式。Exynos4412芯片包含8个通用I2C接口控制器。

I2C接口是全双工的,只要求两条总线线路:一条串行数据线 SDA、一条串行时钟线 SCL

I2C总线的优点:接口线少,控制方式简单,器件封装形式小,通信速率较高。

I2C的专业术语

术语描述
发送器发送数据到总线的器件
接收器从总线接收数据的器件
主机初始化发送,产生时钟信号和终止发送的器件
从机被主机寻址的器件
多主机同时有多于一个主机尝试控制总线但不破坏报文
仲裁是一个在有多于一个主机尝试控制总线,但只允许其中一个控制总线并使报文不被破坏的过程
同步两个或多个器件同步时钟信号的过程

I2C总线信号和时序

I2C总线传输过程中有三种信号:开始信号(S)、结束信号(P)、应答信号(ACK)

开始信号:SCL为高电平时,SDA从高电平向低电平跳变,开始发送数据

结束信号:SCL为高电平时,SDA从低电平向高电平跳变,结束发送数据

应答信号:接收设备在接收到8bit(一个字节)的数据后,在第9个时钟周期,向发送设备发送低电平,表示成功收到数据

I2C总线时序

I2C通信流程

(1)开始时SDA和SCL线都是高电平,主机发送开始信号,SDA向低电平跳变,开始数据传输。

(2)数据一位一位的进行传输,SCL时钟为低电平周期时发送器发送数据,SDA线上数据可以发送变化,SCL时钟为高电平周期时接收器接收数据,SDA线上数据必须保持稳定

(3)当传输到8bit时,在第9个时钟周期,发送器释放对SDA线的控制,SDA线恢复高电平,若第9个时钟周期内,SDA线始终为高电平,发送器没有接收到ACK信号,就会发出停止信号停止本次通信或者重新发送开始信号。如果接收到ACK信号就会继续发送下一个字节。

(4)直到主机发送结束信号,结束本次通信。

I2C总线寻址

I2C设备用一个7位或10位的数字唯一标识自己。I2C设备地址由固定部分和可编程部分组成,这样就可以支持一个I2C总线上挂载多个同样的器件,而地址不同。I2C地址的可编程部分的最大数量就是可以连接到I2C总线上相同的数量。

通常是开始信号之后第一个字节决定了主机选择哪一个从机(例外的情况是可以寻址所有器件的广播地址)。第一个字节的前7位组成了从机地址,第8位决定了数据传输的方向,如果第8位是0表示主机会向从机写信息,是1表示主机会向从机读信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZiFBBV6U-1592389913684)(https://s1.ax1x.com/2020/06/13/tvdykR.jpg)]

如果是10位编址的话,用开始信号后的两个字节表示地址,第一个字节的前7位是 11110XX(XX是10位地址的两个最高位),第一个字节的第8位是R/W位,决定了数据传输的方向,第二个字节是地址剩下的8位。

I2C控制器操作流程

(1)配置主机发送模式

(2)将要通信的I2C从机的地址和读写位写入I2CDS寄存器

(3)将0xF0写入I2CSTAT寄存器

(4)I2C控制器发出开始信号后,在(2)中写入的I2CDS寄存器地址自动发送到SDA总线上,用来寻找从机。

(5)在ACK周期后,I2C控制器发生中断,I2CCON[4]被自动置1,I2C传输暂停

(6)I2C数据通信是否结束,若结束跳转到(10),否则跳转到7

(7)将要传输的数据写入I2CDS寄存器准备发送

(8)清除中断标志位,通过向I2CCON[4]中写0实现

(9)清除中断标志位后,I2CDS寄存器内的数据就开始发送到SDA总线上。发送完成后,跳转到(5)

(10)将0xD0写入I2CSTAT寄存器

(11)清除中断标志位,通过向I2CCON[0]中写0实现

(12)延时等待一段时间,使得停止信号生效,I2C通信结束

几种操作时序图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K5pCnCBU-1592389913686)(https://s1.ax1x.com/2020/06/13/tvrVR1.md.jpg)]

第十五章 SPI接口

SPI的四个引脚

  • CLK(串行时钟引脚)
  • MISO(主设备输入/从设备输出数据引脚)
  • MOSI(主设备输出/从设备输入数据引脚)
  • CS(从设备选择引脚,低电平有效)
信号信号描述
CLK时钟信号主设备发出,用于控制数据发送和接受的时序
MISO时钟信号做为主设备时,从从设备接收输入数据;做为从设备时,向主设备发送输出数据
MOSI时钟信号做为主设备时,向从设备发送输出数据;做为从设备时,从主设备接收输入设备
CS片选信号从设备选择信号,当CS为低电平时,所有的数据发送/接收依次被执行

通过设置GPOL(极性)和GPHA(相位)的值,我们选定当前要使用的SPI数据传输格式。

GPOLGPHA
功能控制时钟极性控制时钟相位
值为0SPI总线空闲时,SCK为低电平SCK第一个跳变沿采样
值为1SPI总线空闲时,SCK为高电平SCK第二个跳变沿采样

题目预测

编程题

汇编语言编程

1、用汇编语言实现求1~100的和

START:MOV R0, #1MOV R1, #1
LOOP:ADD R1, R1, #1ADD R0, R0, R1CMP R1, #100BEQ ENDBNE LOOP
END:B END	; R0中就是和

2、用汇编语言实现求5!

START:MOV R0, #5MOV R1, #4
LOOP:MUL R0, R0, R1SUB R1, R1, #1CMP R1, #0BEQ ENDBNE LOOP
END:B END	; R0中就是阶乘

内联汇编编程

1、用 ARM 内联汇编实现求1~100的和

int a = 1, b = 1;
int result;
asm volatile("LOOP:""ADD %2, %2, 1""ADD %1, %1, %2""CMP %2, #100""BNE LOOP""MOV %0, %1": "=r"(result): "+r"(a), "+r"(b)
);

2、用ARM内联汇编实现求5!

int a = 5, b = 4;
int result;
asm volatile("LOOP:""MUL %1, %1, %2""SUB %2, %2, #1""CMP %2, #0""BNE LOOP""MOV %0, %1": "=r"(result): "+r"(a), "+r"(b)
);

问答题

1、描述程序状态寄存器各位的作用

标志位

条件标志位:N、Z、C、V 通称为条件标志位,也就是CPSR的高4位。条件标志位会根据程序中的算术指令或逻辑指令的执行结果进行修改。

条件标志位含义
N当两个由补码组成的有符号整数运算时,N=1表示运算的结果为负数,N=0表示运算的结果为正数或0。
ZZ=1表示运算的结果为0,Z=0表示结果为不为0
C加法指令(包括比较指令CMN),当结果产生了进位,则C=1,表示无符号数运算发生上溢出;其他情况下C=0。在减法指令中(包括比较指令CMP),当运算中发生了错位(即无符号数运算发生下溢出),则C=0;其他情况下C=1。对于在操作数中包含移位操作的运算指令(非加减指令),C被设置为被移位寄存器最后移出去的位。对于其他非加减运算指令,C的值通常不受影响。
V对于加减指令,当运算结果溢出时V=1,表示符号位溢出,没有溢出V=0。对于非加减指令,V的值通常不受影响

控制位

CPSR的低8位(I、F、T、M[4:0])统称为控制位。当异常发生时,这些位的值将发生响应的变化。

(1)中断禁止位

​ I=1,IRQ被禁止

​ F=1,FIQ被禁止

(2)状态控制位

​ T位是处理器的状态控制位,T位只有在T系列的ARM处理器上才有效,在非T系列的ARM版本中,T位始终为0

​ T=0,处理器处于ARM状态(即正在执行32位的ARM指令)

​ T=1,处理器处于Thumb状态(即正在执行16位的Thumb指令)

(3)模式控制位

​ M[4:0]是位模式控制位,这些位的组合确定了处理器处于哪种状态。

2、列出Cortex-A9处理器的八个工作模式

处理器工作模式简写描述
用户模式usr正常程序执行模式,大部分任务执行在这种模式下。
快速中断模式fiq当一个高优先级中断产生时会进入这种模式,一般用于高速数据传输通道处理
外部中断模式irq当一个低优先级中断产生会进入这种模式一般用于通常的中断处理。
特权模式svc当复位或者软中断指令执行时将会进入这种模式,一般用于通常的中断处理。
数据访问中止模式abt当存取异常时进入这种模式,用于虚拟存储或者存储保护。
未定义指令中止模式und当执行未定义指令时进入这种模式,有时用于通过软件仿真协处理器硬件的工作方式。
系统模式sys使用和user模式相同寄存器的模式,用于特权级操作系统任务。
监控模式mon可以在安全模式和非安全模式之间进行转换。

除了用户模式之外的其他7种处理器模式被称为特权模式,除了用户模式和系统模式之外的6种模式被称为异常模式

3、列出七个ARM指令的寻址方式

立即寻址、寄存器寻址、寄存器间接寻址、寄存器移位寻址、变址寻址、多寄存器寻址、相对寻址、堆栈寻址、块复制寻址

4、列出Cortex-A9的七个异常类型

异常类型处理器模式执行低地址执行高地址
复位异常特权模式0x000000000xFFFF0000
未定义指令异常未定义指令中止模式0x000000040xFFFF0004
软中断异常特权模式0x000000080xFFFF0008
预取异常数据访问中止模式0x0000000C0xFFFF000C
数据异常数据访问终止模式0x000000100xFFFF0010
外部中断异常外部中断请求模式0x000000180xFFFF0018
快速中断异常快速中断请求模式0x0000001C0xFFFF001C

列举题

1、ARM Cortex-A9有两种工作状态,它们分别是

​ 答: ARM、Thumb(如果是三种状态的话是 ARM、Thumb、ThumbEE)

2、ARM处理器有多少个寄存器

​ 答:有40个32位寄存器

3、GPIO端口有哪两种方向

​ 答:输出 和 输入

4、串口通信的停止位有三种,它们分别是

​ 答:1位、1.5位、2位

5、在汇编语言中定义一个全局数值变量用的伪操作是什么,定义局部字符串变量用的伪操作是什么

​ 答:GBLA、LCLS


http://chatgpt.dhexx.cn/article/y5GaItl5.shtml

相关文章

ARM嵌入式常用开发工具介绍及插画开发流程(更新)

这里接着前边的开发环境的配置说&#xff0c;其实用于开发的话&#xff0c;基本的开发环境已经架构好了&#xff0c;不过由于嵌入式开发环境的特殊性(交叉编译)&#xff0c;我们还会用到一些其他的外围工具&#xff0c;这里做简要的说明。并重新介绍一下整个开发环境中&#xf…

ARM介绍

什么是ARM&#xff1f; ARM即可以是一家芯片设计厂商的名字&#xff0c;也可以代表一类微处理器的通称&#xff0c;还可以表示为一种技术的名称&#xff08;这个问题面试的时候可能问道&#xff09; 1、ARM是一个公司&#xff1a;Advanced RISC Machine Acorn RISC Machi…

《 Arm Compiler 5.06 》__ARM编译器官网下载、安装和使用说明(小白也能懂)

目录 一、前言 二、官方网站下载 三、编译器安装在 Keil 软件上 四、Keil选择编译器V5 “ V5.06 update 7(build 960) ” 五、测试 六、我的资源 (*&#xffe3;︶&#xffe3;)创作不易&#xff01;期待你们的 点赞、收藏和评论喔。 一、前言 Keil MDK-Arm5.37不再默认…

arm-linux开发板相关软件的使用

文章目录 1. 串口调试1.1 简介1.2 secureCRT使用步骤 2. 文件传输2.1 文件传输: tftp2.2 文件传输: NFS (相当于将主机作为一个u盘插入开发板) 3. 交叉编译3.1 下载3.2 配置 1. 串口调试 1.1 简介 一般而言&#xff0c;嵌入式开发板使用串口来监控后台。可以使用串口线连接开…

嵌入式:ARM相关开发工具概述

文章目录 JTAG仿真器J-LINK仿真调试器J-Link ARM主要特点 U-LINK仿真调试器ULINK2特点ULINK和JLINK的比较 ADS1.2集成开发环境使用ADS创建工程 JTAG仿真器 JTAG(Joint Test Action Group&#xff1b;联合测试行动小组)是一种国际标准测试协议&#xff08;IEEE 1149.1兼容&…

嵌入式:ARM常用开发编译软件介绍

文章目录 编译器介绍1、ADS1.22、ARM RealView Developer Suite (RVDS)3、IAR EWARM4、KEIL ARM-MDKARM5、WIN ARM-GCC ARM 编译器介绍 1、ADS1.2 ADS&#xff08;ARM Developer Suite&#xff09;&#xff0c;是在1993年由Metrowerks公司开发是ARM处理器下最主要的开发工具。…

北京邮电大学计算机考研资料汇总

北京邮电大学研招网 北京邮电大学计算机学院 北京邮电大学软件学院 北京邮电大学网络空间安全学院 北京邮电大学&#xff08;Beijing University of Posts and Telecommunications&#xff09;&#xff0c;简称北邮&#xff0c;是中华人民共和国教育部直属、工业和信息…

23届计算机保研经验帖(北邮)

21届计算机保研经验帖 本文非常适合保研非实力派选手&#xff0c;越早阅读离心仪学校就越近一步。有很多同学担心自己拿到推免资格却无学可上&#xff0c;这大可放心&#xff0c;我们学校很多同学都轻松得到西南985高校的offer&#xff0c;但如果想保到北上广的计算机强校的话…

2019年北理工计算机北航计算机中山大学计算机北邮网研院保研夏令营

目录 1.个人情况 2.夏令营入营情况 3.报名准备建议 3.1 准备一个txt 文本&#xff0c;上面有个人信息&#xff0c;方便填写每个大学的报名申请&#xff0c;包括以下信息&#xff1a; 3.2 电脑上新建一个文件夹和一个网页收藏夹 3.3 一些可能需要使用的工具和软件&#xf…

北邮考研复试机试准备过程(已上岸)

纯自用请勿转载&#xff0c;用来给自己最后复习和捋思路用的&#xff0c;主要参考牛客网王道机试指南&#xff0c;C、C混用。考研人太久不写代码了…什么都不记得了&#xff0c;从头开始过一遍吧。 黑色代码段是要记住的重点函数/方法。每天下午做几个小时&#xff0c;一共不到…

2024考研北京邮电大学计算机/软件/网安/智能考研信息汇总

一、北京邮电大学简介 二、各院官方网址 北京邮电大学研究生院官网 计算机学院&#xff08;国家示范性软件学院&#xff09;官网 网络空间安全学院官网 人工智能学院官网 三、招生目录和导师重要性介绍 北邮以前共有四个学院属于计算机类&#xff0c;分别为&#xff1a;计…

所有计算机专业考研都变了!西安邮电大学计算机考研改考

西安邮电大学是一所双非大学&#xff0c;位于陕西省西安市。虽然是双非&#xff0c;但是计算机学科评估C&#xff0c;软件工程学科评估C&#xff0c;计算机实力在双非大学中还算不错。邮电类大学的计算机专业一般都比较强&#xff0c;比如北京邮电大学&#xff0c;南京邮电大学…

2019北邮计算机院机试真题

目录 19计算机院机试真题Problem A 二进制Problem B 二叉树Problem C 最短路径Problem D 方块阵 19计算机院机试真题 计算机院的机试题真难&#xff0c;没有4A的&#xff0c;第四题的题目看了一下&#xff0c;好像是矩阵的&#xff0c;题目记不清了&#xff0c;如果你考计算机…

北邮 计算机网络

一、前言 本文总结北邮计算机学院《计算机网络》的学习资料&#xff0c;希望能帮到学弟学妹&#xff0c;打好基础。 计算机网络也是计算机专业考研的必考科目之一&#xff0c;4学分&#xff0c;重要性不言而喻。学科特点是知识点非常多&#xff0c;每一章都要画一整张的思维导…

北邮考研_2019_计算机学院/网研院_时间和各科目规划安排

时间安排 科目 3-7月 7-9月 10-11 12月 数学 暑假前争取将一轮数学复习完 中期复习书&#xff1a;李正元数学全书&#xff08;比李永乐写的好&#xff09; 《李永乐真题大全解》 掐表做题 英语 3-4月&#xff1a;单词 预计7月中旬,将英语第一遍阅读做完&…

录取清华/北大/中科院/北邮都有!双非北京信息科技大学计算机考研光荣榜

上次我们看了几个二本大学的计算机考研光荣榜&#xff0c;发现虽然有上岸985/211大学的同学&#xff0c;但是不多。可以说&#xff0c;上岸好大学的概率非常非常低&#xff0c;是一件很难的事情。 那么有没有考上好大学多一些的&#xff0c;成绩比较好的双非大学呢&#xff1f;…

北邮考研上岸历程

考研初试倒数第一上岸北邮心路历程 嗨&#xff0c;准研究生们&#xff01; 从去年到现在考研终于算是告一段落&#xff0c;所以想记录一下&#xff0c;与君共勉。 本人概况 本科双非&#xff0c;本科信息安全专业&#xff0c;一志愿北京邮电大学网络空间安全专业。初试总分…

2023北京邮电大学计算机考研信息汇总

北京邮电大学研招网 北京邮电大学计算机学院 北京邮电大学软件学院 北京邮电大学网络空间安全学院 北京邮电大学&#xff08;Beijing University of Posts and Telecommunications&#xff09;&#xff0c;简称北邮&#xff0c;是中华人民共和国教育部直属、工业和信息…

20考研历程-北京邮电大学计算机学院

首先&#xff01;&#xff01;&#xff01; 凝紫暮学长吐血整理的巨全的北邮考研信息 帮助很大&#xff01;&#xff01; 初试&#xff1a; 数一、英一、4门专业课&#xff08;803&#xff08;21后就是408了&#xff09;&#xff0c;难度20年近似408、出题范围不限于408范围…

北邮2018计算机院考研复试机试上机题解+结果统计

昨天刚考完&#xff0c;oj上题目已经看不了了&#xff0c;不过交的代码都还在&#xff0c;趁热回忆一下 整体情况&#xff1a; 共169人&#xff0c;第四题全军覆没&#xff0c;8人3A&#xff0c;77人2A&#xff0c;40人1A&#xff0c;44人0A。 最后的排行榜&#xff08;id截掉…