ARM汇编

来源:互联网 发布:stc单片机系统分析 编辑:程序博客网 时间:2024/06/16 15:10
volatile
特性:
防止编译器优化

应用场景:
1、中断中的flag
2、和const一起使用 
只读状态寄存器

SWP
由一次存储器的读和一次存储器的写组成的原子操作

原子操作特点:不能被打断

优势:
不能被中断
指令简单


.text
.globl _start
_start:
ldr r0,=myarray

mov r1,#4
mov r2,#8

swp r2,r1,[r0];temp=[r0];[r0]=r1;r2=temp

.data
myarray:
.word 0x11
.word 0x22
.word 0x33
.word 0x0
myarray_end:
.end


修改模式
指令: MRS R0,CPSR  @R0=CPSR
  MSR CPSR,R0  @CPSR=R0


mrs r0,cpsr @ r0=cpsr  SVC mode

mov r13,#0x11
mov r0,#0xdf

msr cpsr,r0 @ cpsr=r0   system mode
mov r13,#0x22

mov r0,#0xd3
msr cpsr,r0 @cpsr=r0  SVC mode


PC指 指的指令,而非正在执行的指令

执行时 PC-8


SWI 软中断
当异常产生时, ARM core:
1.拷贝 CPSR 到 SPSR_<mode>
2.设置适当的 CPSR 位: 
改变处理器状态进入 ARM 状态  
改变处理器模式进入相应的异常模式
设置中断禁止位禁止相应中断 (如果需要)
3.保存返回地址到 LR_<mode>

4.设置 PC 为相应的异常向量


返回时, 异常处理需要:
1.从LR_<mode>恢复PC 
2.从 SPSR_<mode>恢复CPSR

Note:这些操作只能在 ARM 态执行.



从SWI 和 Undef异常返回
MOVS pc,lr  --》添加'S' 在特权模式不仅仅更新PC,而且 拷贝SPSR 到 CPSR


从FIQ, IRQ 和 预取异常(Prefect Abort)返回
SUBS pc,lr,#4

从数据异常( Data Abort)返回
SUBS pc,lr,#8


蜂鸣器:

原理图中搜索BZ1

连接引脚 GPD0_0  

1、修改复用功能
GPD0CON[0]  [3:0]  RW
0x0 = Input
0x1 = Output
* 0x2 = TOUT_0
0x3 = LCD_FRM
0x4 to 0xE = Reserved
0xF = EXT_INT6[0]






2、PWM
Timer Input Clock Frequency = PCLK/({prescaler value + 1})/{divider value}
{prescaler value} = 1 to 255 
{divider value} = 1, 2, 4, 8, 16
Dead zone length = 0 to 254

PCLK 100MHZ  ---》 Clock management Unit  






原创粉丝点击