(基于ARM的)微機原理與接口技術筆記(4)
(基于ARM的)微機原理與接口技術筆記(4)
物理上37個register 邏輯上R0-R15
r13 棧指針(SP)
r15 程序指針(PC)
ARM狀態(tài):32bit寬指令
Thumb狀態(tài):16bit指令
r14 鏈接寄存器 儲存函數返回等.
cpsr 程序狀態(tài)寄存器 當前cpu的模式 狀態(tài)
低5位[4:0]模式[5] ARM/Thumb [6]禁止快中斷位 [7]禁止中斷位
[31:28]N(負數結果)Z(零結果)C(進位/借位)V(溢出)
register是用觸發(fā)器實現(xiàn)的 成本高 小容量
memory是MOS+電容實現(xiàn)的 成本小 大容量
IO設備的register(配置寄存器)和cpu的不太一樣(且聽后面幾回分解).
ARM7TDMI硬件結構
這個圖是只有核的,如果要用的話需要單配外設

芯片廠子沒有這樣做的,都要附帶外設.
jtag接口和結構,可以用于偷窺寄存器和內存中

計算機-(usb)-jlink-(jtag)-單片機
處理器的時序
cpu的時序是CPU在執(zhí)行指時所需控制信號的時間順序
(上升沿,下降沿,寬度,周期,....)
時鐘周期 CPU工作時間的最小單位 完成任何操作都需要整數個時鐘周期
指令周期 一條指令從內存中取出到執(zhí)行完畢用時
總線周期 把CPU通過總線與內存 外設 內部部件之間進行一次數據交換操作需要的時間.
處理器的選型問題
1.內核
2.工作頻率
3.片內存儲器與存儲器擴展接口
4.封裝
5.片內功能模塊
飛控或者平衡車可以用Cortex-M0 CV等操作建議高端核Cortex-M7核
實驗用高端核 產品需要考慮,同樣性能盡量壓成本.
ST R710F處理器
R71xF 類芯片 現(xiàn)在能買到 最小系統(tǒng)開發(fā)板買不到
32位 20年前的高性能,低功耗
ARM指令集
ARM7TDMI ARM7TDMI-S 有ARM指令集(32位)和Thumb指令集(16位)
ARM和Thumb可以切換
例如下面的匯編
mov r1,r2
sub r0,r1,r2
ands r1,r1,r2,lsl r3
stmia r0!,{r2-r7,r12}
arm匯編的格式
<opcode 助記符> {<cond 執(zhí)行條件,可選>} {S 是否影響CPSR,可選} <rd 目標寄存器>,<Rn 操作數1的寄存器>,{<operand2 操作數2>}
匯編語言的語句是不區(qū)分大小寫的,assembler會自動識別這些語句,但是匯編程序中用戶定義的變量標號等,將區(qū)分其大小寫,編程時要注意這些區(qū)別.以免出錯.
操作:
數據處理
算術運算: add adc sub sbc rsb rsc
邏輯運算: and orr eor bic
數據傳送: mov mvn
存儲器訪問: ldr str ldm sdm
比較: cmp cmn tst teq
分支跳轉: b bl bx
其他
條件碼作為后綴 一般可以不寫,默認AS
if(a>b)a++;
else b++;
對應的arm匯編(假設a位于r0,b位于r1)
cmp r0,r1
addhi r0,r0,#1
addls r1,r1,#1
cmp改變psr addhi加s會影響psr
例1:
if(a==0)func(1);
對應arm匯編
cmp r0,#0
moveq r0,#1
bleq func
例2:
if(a==4||a>=10)x=0;
對應arm匯編(假設a在r0 x在r1)
cmp r0,#4
cmpne r0,#10
moveq r1,#0
p.s. 開全局變量會慢.
第二操作數可以有以下形式:
寄存器
移位值(5位unsigned) 另一register的lobyte
立即數(8位)
寄存器方式下 操作數即為寄存器的數值
sub r1,r1,r2
addeq r2,r4,r5
寄存器移位方式下 移位結果為操作數 Rm值不變
邏輯移位 左移*2 右移/2
算術移位 符號不變
循環(huán)移位 (擴展的寄存器方式會影響C標志位)
add r1,r1,r1,lsl #3
sub r1,r1,r2,lsr r3
立即數:8位二進制循環(huán)移位偶數位可以得到的
第1行: r1=r1+r1*8
第2行: r1=r1-(r2右移r3位)
裝載32位常數:
ldr rd,=#const
下載pdf版鏈接: