1 为什么要学习底层课程?
1 解释应用层
2 为我们的职业发展更长远做准备
2 为什么要学习ARM?
1 学习一款硬件平台,一款主流的嵌入式平台
2 为后边底层课程做铺垫
3 ARM课程学什么?
汇编语言(arm指令集)+裸机编程
1 ARM介绍
1.1嵌入式系统:嵌入式软件+嵌入式硬件
1.2 原理图
flash: nor flash-->存放数据+运行程序
nand flash-->存放数据
1.3arm系统结构介绍
编程模型
ARM 采用的是32位架构:32位指的是CPU一次处理指令的能力是32位。
cpu的工作就是周期性去处理指令。
周期性:看CPU的主频,2.4GHz,该CPU在1S中内取2.4G条指令来处理。
周期=1/2.4G S
arm内核的状态和工作模式
ARM内核有两种工作状态:ARM态--》默认状态--》使用ARM指令集(32bits)
thumb态-->使用Thumb指令集(16bits)
当ARM内核处于ARM态时,该内核有8种工作模式:
User : 非特权模式,大部分任务执行在这种模式
FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式
IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式
Supervisor :当复位或软中断指令执行时将会进入这种模式 svc
Abort : 当存取异常时将会进入这种模式
Undef : 当执行未定义指令时会进入这种模式
System : 使用和User模式相同寄存器集的特权模式
Cortex-A特有模式:
Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式;
也是一种特权模式
2、汇编指令
cmp:比较指令,会自动影响CPSR的标志位
指令机器码:每一条ARM指令都对应唯一的一条指令机器码(32bit)
数据处理指令
算术指令: ADD ADC SUB SBC RSB RSC
逻辑指令: AND ORR EOR BIC
比较指令: CMP CMN TST TEQ
数据搬移: MOV MVN
合法立即数
立即数:汇编指令中操作数是一个小于等于32bit位的数为立即数
合法立即数:是可以被mov指令装在到寄存器中的立即数,该数中最多只有8bit是
有效位,其他位为0。
ldr伪指令
ldr rd,=<const> 可以被编译器编译成以下三种指令: mov mvn ldr汇编指令
移位指令
lsl lsr asr ror rrx
分支指令
b bl
用法:b/bl 标号(地址)
单字或单字节传送指令
ldr ldrh ldrb: 内存---》寄存器
str strh strb:寄存器---》内存
块传送指令
是指一次可以传送多个寄存器的内容到一片内存,或者将一片内存的内容传送
到多个寄存器中。
ldm:将多个内存单元的内容传送到多寄存器中去。 内存---》寄存器
stm:将多个寄存器的内容传送到多个内存单元中去。寄存器---》内存
swp--》软交换指令 寄存器《-----》内存
swp(b) r1,r1,[r0]
操作psr-->mrs msr
可以操作cpsr spsr
处理器模式切换:SVC--->usr
mrs r0,cpsr
bic r0,#0x1F
orr r0,#0x10
msr cpsr,r0
软中断
中断 :是一个过程,是指CPU在执行当前程序的过程中插入了
另外一段程序的执行过程。
中断的类型:1 软件中断--》由程序发起的中断,是预先设计好的,是可控的
2 硬件中断--》因为硬件故障导致的中断,硬件中断不可控。
3、汇编文件
1 汇编文件
1 异常向量表
2 reset
irq_hander-->保存现场 bl do_irq 恢复现场
2 C文件 1 initkey()-->9步
2 do_irq()-->第三阶段
3 main()
while(1);
4、看门狗:是一个定时器电路,一般有一个输入端叫喂狗端,一个输出端连接到mcu
的reset端,MCU正常工作时,每隔一段时间会输出一个信号到喂狗端,
看门狗电路里的递减计数器(递增计数器)的值会更新,如果超过一定时间
不喂狗(一般是程序跑飞或死机或死循环),递减计数器的值会递减到0,
看门狗电路会给MCU一个复位信号,使MCU复位。
目标:5S实现开发板重启
分析:1 给WTDAT放多大的值,让他递减到0可以耗时5S?
t_watchdog = 1/(PCLK/(Prescaler value + 1)/Division_factor)
=1/(100M/250/128)=1/3125(s)
每隔1/3125(s)给看门狗一个输入信号,每来一个输入信号,递减计数器减1
看门狗电路的原始时钟脉冲是100Mhz,假设一级分频是250,二级分频是128
经过两级分频后:100M/250/128=3125hz
3125hz:1秒钟给看门狗发送了3125个脉冲
(每隔1/3125 S给看门狗发送一个脉冲信号)
每隔1/3125 S给看门狗发送一个脉冲信号,那么需要发送多少个脉冲信号
才能耗时5S? 5/(1/3125)=5*3125=15625个
每给看门狗一个信号,WTDAT的值就会递减1(1/3125),那么需要给WTDAT多大的值
才能耗时5S? 5/(1/3125)=5*3125=15625次
24.1.1.1 WTCON 0x10060000 (8-15) 249 (3-4) 0x3 (5)1 (0)1
26.4.1.3 WTCNT 0x10060008 (0-15)15625
5、 pwm:脉冲宽度调制器
作用:用来调制时钟脉冲的样式 100Mhz--->1Mhz
占空比:高电平时间/时钟周期
目标:PWM驱动蜂鸣器响
已知:人耳能够听到声音频率的范围为20~20000hz,假设400hz
pclk=100Mhz
假设一级分频:25
二级分频:4
100M/25/4=1Mhz
将1Mhz的脉冲输入到逻辑控制器,逻辑控制器将它降频成400hz
TCNTB0--->存放用多少个输入波形产 生一个输出波形--》2500
TCMPB0-->存放高电平持续时间 1/2 *2500=1250
1 接线 BZ1(BUZZER)-->CON2--->CON1--->U1A(GPD0_0)-->pwm输出
配置:
1 设置GPD0_0为PWM输出模式
6.2.2.31 GPD0CON 0x114000A0 (0-3)0x2
2 一级分频 25 TCFG0
24.5.1.1 TCFG0 0x139D0000 (0-7)24
3 二级分频 4 TCFG1
24.5.1.2 TCFG1 0x139D0004 (0-3)0x2
4 TCNTB0:输入波形的个数2500
24.5.1.4 TCNTB0 0x139D000C (0-31) 2500
5 TCMPB0:高电平持续时间2500*1/2
24.5.1.5 TCMPB0 0x139D0010 (0-31)2500/2
6 TCON:更新规则
24.5.1.3 TCON 0x139D0008
(3)1:表示输出波形个数从2500减到0,再给TCNTB0=2500,然后继续
减到0,循环给TCNTB0
(1)1:表示立马修改寄存器TCNTB0和TCMPB0的值为新值
(1)0:表示不立即修改寄存器的值,而是等到本次TCNTB0的值一致减到
0后,在修改TCNTB0和TCMPB0.
(0)1:使能输出端口