3-僞指令_FIQ_IRQ_乘法

僞指令:編譯器識別的指令。
  • ldr僞指令 ldr r0,=0x12345678
  • ldr指令 ldr r0,[r0]

  • mov r0,r1,asr #4

start:
cmp r0,r1
beq stop
subgt r0,r0,r1
sublt r1,r1,r0
b start
stop:
乘法指令:mul r0,r1,r2 r0 = r1*r2
  • mla 乘加
  • mull 64位乘法
  • mlal 乘加
ldr str
  • 加上B byte 8位
  • 加上H halfword 16位
  • 加上S 帶符號的
ldr r0,=0x40008000
ldr r1,[r0]
mov r1,#0x10
str r1,[r0]
ldm stm
  • 可以傳送多個寄存器到/從內存中
  • {r0,r1,r4}
  • {r0-r4}

IA 先操作,後增加

IB 先增加,後操作

DA 先操作,後遞減

DB 先遞減,後操作

r0r1
mov r2,r0
mov r0,r1
mov r1,r2
swi 可以切換到SVC模式

立即數尋址
寄存器尋址
寄存器移位尋址
寄存器間接尋址 ldr r0,[r1]
基址變址尋址 ldr r0,[r1,#4]
多寄存器尋址 ldm
相對尋址 相對於PC找到對應的位置
堆棧尋址 stmfd

.if
.else
.endif

.macro#define
.endm

.align 4 對齊

.include 包含頭文件
bf 向前跳轉
bb 向後跳轉
ATPCS 規定了函數之間參數傳遞的規則
4個以內的傳參通過r0-r3
以上的參數通過壓棧實現
stmfd 滿減棧的方式傳遞參數
asm volatile
("彙編\n\t"
:"輸出的單位"(寄存器、變量)
:"輸入"(寄存器、變量)
:"memory");
// = 表示只寫,缺省表示只讀,a 表示讀寫

* FIQ爲什麼比IRQ快

  • 1.優先級比較高
  • 2.擁有獨立的寄存器
  • 3.位於中斷向量表的末尾,可以直接運行中斷處理函數
IIC 半雙工 8bit 有應答 一個主機對應一個從機
  • 時序:
    • 開始數據傳送:SCL 高電平 SDA 下降沿
    • 結束: SCL 高電平 SDA 上升沿
SPI 全雙工 可以一個一個位的發送/接受數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章