來源: https://shimo.im/doc/dvSE3Wj0mTILi7BF
ROM, RAM, SRAM, DRAM, SDRAM, FLASH存儲(chǔ)器的特點(diǎn)颠猴。
【答】
ROM為只讀內(nèi)存,在斷電后仍可以保持?jǐn)?shù)據(jù)坡贺;
RAM為隨機(jī)存取內(nèi)存官辈,斷電后丟失數(shù)據(jù)箱舞;
SRAM為靜態(tài)RAM,速度非橙冢快晴股;
DRAM為動(dòng)態(tài)RAM,保留數(shù)據(jù)時(shí)間短肺魁,速度比SRAM慢队魏,但比任何ROM都快;
SDRAM為同步動(dòng)態(tài)RAM万搔,擁有DRAM的所有特點(diǎn)胡桨;
FLASH為閃存,具有ROM和RAM的長處瞬雹,斷電保持?jǐn)?shù)據(jù)昧谊,同時(shí)快速讀取數(shù)據(jù)ARM7采用的 I/O編址方式。
【答】I/O接口與存儲(chǔ)器統(tǒng)一編址
- Samsung S3C44B0x存儲(chǔ)器單元特點(diǎn)和分組特點(diǎn)酗捌。
【答】
支持大小端模式呢诬,通過外部引腳來選擇
包含8個(gè)地址空間,Bank0-Bank7胖缤,每個(gè)地址空間32MB
所有地址空間都可以通過編程設(shè)置8為尚镰、16位、32為寬數(shù)據(jù)對(duì)齊訪問
Bank0-Bank5支持ROM哪廓、SRAM狗唉,Bank6,Bank7支持ROM涡真,SRAM分俯,F(xiàn)P/EDO/SDRAM等
Bank0-Bank5起始地址、大小固定哆料,Bank6起始地址固定但大小可變缸剪,Bank7與Bank6大小相同
- ARM處理器異常組成,特點(diǎn)和地址分配东亦。
【答】
異常組成:
指令執(zhí)行引起的直接異常:如軟件中斷杏节,未定義指令,預(yù)取指中止
指令執(zhí)行引起的間接異常:數(shù)據(jù)中止
外部產(chǎn)生的與指令流無關(guān)的異常:復(fù)位典阵,IRQ奋渔,F(xiàn)IQ
特點(diǎn):
發(fā)生異常中斷時(shí),ARM進(jìn)入相應(yīng)的異常模式萄喳,然后從異常向量表中對(duì)應(yīng)的異常地址開始執(zhí)行中斷處理程序卒稳。
地址分配:
復(fù)位:0x0
未定義指令:0x4
軟件中斷:0x8
指令預(yù)取中止:0xC
數(shù)據(jù)訪問中止:0x10
外部中斷請(qǐng)求:0x18
快速中斷請(qǐng)求:0x1c
- Samsung S3C44B0x 尋址特點(diǎn)。
【答】
內(nèi)存訪問要通過LDR他巨,STR指令
- ARM7中充坑, STMED SP!, {R0-R12, LR}指令執(zhí)行過程和 SP的變化减江。
【答】
空遞減堆棧,R0->[sp],R1->[sp-0x4],...,R12->[sp-0x30],LR->[sp-0x34],最后sp->sp-0x38
Samsung S3C44B0x矢量和非矢量中斷的過程捻爷。
ARM7指令系統(tǒng)中辈灼,哪類指令可以訪問存儲(chǔ)器。
【答】str,ldr,stm,ldm
- 堆棧操作指令也榄。
【答】stm/ldm(ia,ib,da,db,fa,fd,ea,ed)
- 嵌入式系統(tǒng)啟動(dòng)代碼流程巡莹。
【答】
(1)啟動(dòng)代碼的第一步是設(shè)置中斷和異常向量。
(2)完成系統(tǒng)啟動(dòng)所必須的最小配置甜紫,某些處理器芯片包含一個(gè)或幾個(gè)全局寄存器降宅,這些寄存器必須在系統(tǒng)啟動(dòng)的最初進(jìn)行配置。
(3)設(shè)置看門狗囚霸,用戶設(shè)計(jì)的部分外圍電路如果必須在系統(tǒng)啟動(dòng)時(shí)初始化腰根,就可以放在這一步。
(4)配置系統(tǒng)所使用的存儲(chǔ)器拓型,包括 Flash额嘿,SRAM和 DRAM等,并為他們分配地址空間劣挫。如果系統(tǒng)使用了 DRAM或其它外設(shè)册养,就需要設(shè)置相關(guān)的寄存器,以確定其刷新頻率压固,數(shù)據(jù)總線寬度等信息球拦,初始化存儲(chǔ)器系統(tǒng)。有些芯片可通過寄存器編程初始化存儲(chǔ)器系統(tǒng)邓夕,而對(duì)于較復(fù)雜系統(tǒng)通常集成有 MMU來管理內(nèi)存空間刘莹。
(5)為處理器的每個(gè)工作模式設(shè)置棧指針, ARM處理器有多種工作模式焚刚,每種工作模式都需要設(shè)置單獨(dú)的棧空間扇调。
(6)變量初始化矿咕,這里的變量指的是在軟件中定義的已經(jīng)賦好初值的全局變量,啟動(dòng)過程中需要將這部分變量從只讀區(qū)域狼钮,也就是 Flash拷貝到讀寫區(qū)域中碳柱,因?yàn)檫@部分變量的值在軟件運(yùn)行時(shí)有可能重新賦值。還有一種變量不需要處理熬芜,就是已經(jīng)賦好初值的靜態(tài)全局變量莲镣,這部分變量在軟件運(yùn)行過程中不會(huì)改變,因此可以直接固化在只讀的Flash或 EEPROM中涎拉。
(7)數(shù)據(jù)區(qū)準(zhǔn)備瑞侮,對(duì)于軟件中所有未賦初值的全局變量的圆,啟動(dòng)過程中需要將這部分變量所在區(qū)域全部清零。
(8)最后一步是調(diào)用高級(jí)語言入口函數(shù)半火,如 main函數(shù)等越妈。
- ARM7中,調(diào)用子程序和實(shí)現(xiàn)從子程序返回的指令钮糖。
【答】BL xxx, MOV PC,R14
- Samsung S3C44B0x異常矢量表梅掠。
【答】
復(fù)位:0x0
未定義指令:0x4
軟件中斷:0x8
指令預(yù)取中止:0xC
數(shù)據(jù)訪問中止:0x10
外部中斷請(qǐng)求:0x18
快速中斷請(qǐng)求:0x1c
ARM7三級(jí)流水線
。
【答】
取值店归,譯碼阎抒,執(zhí)行
取值,譯碼消痛,執(zhí)行
取值且叁,譯碼,執(zhí)行Samsung S3C44B0x 執(zhí)行指令 LDR R2, =0x01C80000肄满;LDR R1, [R2,#8]谴古!后,選中的地址空間稠歉。
【答】[0x01c80008]->R1, R2+0x8->R2, 執(zhí)行后R2=0x01c80008
- ARM7中 掰担,若 SP=0x2028,執(zhí)行指令STMED SP!, {R0-R4, R5, R6, R7, LR}后 SP值怒炸。
【答】sp=0x2028-9*4=0x2004
ARM7處理器異常(EXCEPTIONS) 中斷的優(yōu)先級(jí)
带饱。
【答】1、復(fù)位阅羹; 2勺疼、數(shù)據(jù)異常中止; 3捏鱼、fiq执庐; 4、irq导梆; 5轨淌、預(yù)取指異常; 6看尼、swi递鹉,未定義指令ADDHIS R5, R4, R3, LSL R2的十六進(jìn)制機(jī)器碼。
Shift type: 00 = logical left, 01 = logical right,
10 = arithmetic right, 11 = rotate right
【答】
31-27
27-26
25
24-21
20
19-16
15-12
11-8
7
6-5
4
3-0
cond(HI)
00
(Rs)
opcode(add)
S
Rn(R4)
Rd(R5)
Rs(R2)
0
sh(lsl)
1
Rm(R3)
1000
00
0
0100
1
0100
0101
0010
0
00
1
0011
0b1000-0000-1001-0100-0101-0010-0001-0011
0x8094-5213
- S3C44B0X 存儲(chǔ)控制器藏斩。
【答】
- S3C44B0X I/O端口躏结。
【答】
外圍器件地址分配:
nGCS0
flash
BANKCON0
0x0~0x01BF-FFFF
nGCS6
sdram
BANKCON6
0x0c00-0000~0x0dff-ffff
中斷分配:int0-觸摸屏中斷源,int2-鍵盤中斷源
I/O端口分配:A-F
20.S3C44B0X 中斷控制器狰域。
【答】
30個(gè)中斷源
向量irq中斷模式減少中斷響應(yīng)周期
外部中斷源的電平/邊沿模式
可編程的電平/邊沿極性
支持fiq
- S3C44B0X 時(shí)鐘和電源管理 媳拴。
【答】
電源管理方案:
正常模式:時(shí)鐘向cpu和外設(shè)提供時(shí)鐘信號(hào)
低速模式:外部時(shí)鐘(非pll)作為主時(shí)鐘
空閑模式:時(shí)鐘斷開與cpu的連接黄橘,仍提供外設(shè)時(shí)鐘信號(hào)
停止模式:通過禁止pll來凍結(jié)cpu和外設(shè)提供時(shí)鐘信號(hào)
SL空閑模式:cpu和除lcd之外所有外設(shè)的時(shí)鐘都被禁止
- S3C44B0X CPU wrapper 和總線優(yōu)先權(quán)。
【答】
- S3C44B0X 看門狗定時(shí)器禀挫。
【答】
片內(nèi)集成旬陡,屬于軟件看門狗
受到故障時(shí),能繼續(xù)控制器的操作语婴∶杳希可作為16位定時(shí)器請(qǐng)求中斷服務(wù),并在每128個(gè)MCLK后產(chǎn)生周期復(fù)位信號(hào)
帶中斷請(qǐng)求的普通間隔定時(shí)器模式
計(jì)數(shù)值達(dá)到0時(shí)砰左,內(nèi)部復(fù)位信號(hào)被激活128個(gè)MCLK周期
16位看門狗定時(shí)器
定時(shí)器溢出時(shí)匿醒,發(fā)生中斷請(qǐng)求或系統(tǒng)復(fù)位
CISC和 RISC (Reduced Instruction Set Computing)的主要特征
。
【答】
CISC:復(fù)雜指令集缠导,高性能唐责,指令長度不相等懦傍,指令較多,難以實(shí)現(xiàn)流水線操作
RISC:簡單指令集,指令格式長度固定呆贿,指令類型少具钥,尋址方式少而簡單微服,只有Load/Store結(jié)構(gòu)的存取指令能訪問內(nèi)存下列常用的指令作用:
(1)
0x00000000: b Reset_Handler
0x00000004: b Undefined_Handler
0x00000008: b SWI_Handler
0x0000000C:b Prefetch_Handler
0x00000010: b Abort_Handler
0x00000014: b. ;Reserved vector
0x00000018: b IRQ_Handler
0x0000001C: b FIQ_Handler
【答】當(dāng)中斷請(qǐng)求產(chǎn)生時(shí)葡兑,根據(jù)上面的中斷向量表,跳轉(zhuǎn)到相應(yīng)的中斷處理程序
(2)
/* copy kernel from Flash address 0x10000 to RAM address 0xc300000 */
ldr r0, =0x10000
ldr r1, =0xc300000
add r2, r0, #(1536*1024)
copy_kernel:
ldmia r0!, {r3-r10}
stmia r1!, {r3-r10}
cmp r0, r2
ble copy_kernel
/* jump to ram */
ldr r0, =0xc300000
mov pc, r0
【答】將以0x10000為起始地址flash地址的連續(xù)1536*1024個(gè)字節(jié)復(fù)制到以0xc300000為起始地址的RAM內(nèi)存地址立膛,最后跳轉(zhuǎn)到0xc300000的RAM中執(zhí)行指令
(3)
ldr r0, =SMRDATA
ldmia r0, {r1-r13}
ldr r0, =0x01c80000 ; BWSCON Address
stmia r0, {r1-r13}
SMRDATA DATA
DCD 0x22221210 ; BWSCON
DCD 0x00000600 ; GCS0
DCD 0x00000700 ; GCS1
DCD 0x00000700 ; GCS2
DCD 0x00000700 ; GCS3
DCD 0x00000700 ; GCS4
DCD 0x00000700 ; GCS5
DCD 0x0001002a ; GCS6, EDO DRAM (Trcd=3, Tcas=2, Tcp=1,
CAN=10bit)
DCD 0x0001002a ; GCS7, EDO DRAM
DCD 0x00960000 + 953 ; Refresh (REFEN=1, TREFMD=0, Trp=3,
Trc=5, Tchr=3)
DCD 0x00000000 ; Bank Size, 32MB/32MB
DCD 0x00000020 ; MRSR 6(CL=2)
DCD 0x00000020 ; MRSR 7(CL=2)
【答】
取smrdata 數(shù)據(jù)段里的內(nèi)容存放到寄存器{r0-r13}
再把{r0-r13}寄存器的內(nèi)容存入地址0x01c80000,相當(dāng)于給BWSCON,GCS0...等寄存器賦值
- ARM7 reset后的PC地址揪罕,如何處理復(fù)位。下列指令寫入FLash后的地址宝泵。
Vectors
b ResetHandler ; for debug
b HandlerUndef ; handlerUndef
b HandlerSWI ; SWI interrupt handler
b HandlerPabort ; handlerPAbort
b HandlerDabort ; handlerDAbort
b . ; handlerReserved
ldr pc, =HandlerIRQ
b HandlerFIQ
【答】
在上電后首先處理復(fù)位中斷好啰,跳轉(zhuǎn)到相應(yīng)的子程序,在子程序里初始化硬件配置儿奶;依次是0x0,0x4..
- 矢量中斷方式中框往,下列指令執(zhí)行過程。
HandlerEINT4567 ;HANDLER HandleEINT4567
sub sp, sp, #4 ;reserved for PC
stmfd sp!,{r8-r9}
ldr r8, =HandleEINT4567
ldr r9, [r8 ]
str r9,[sp,#8]
ldmfd sp!,{r8-r9,pc}
【答】
sp地址減4闯捎,將r8-r9推入堆棧搅窿,sp指向[sp-12],取HandlerEINT4567地址的內(nèi)容給r9,并存入[sp-4],入棧操作,r8-r9恢復(fù)原來數(shù)據(jù)隙券,pc=HandlerEINT4567第一條指令的16進(jìn)制編碼,sp重新指向[sp]
sp
sp-4
HandlerEINT4567地址的內(nèi)容
sp-8
r9
sp-12
r8
- 如何用 ARM匯編語言實(shí)現(xiàn)中斷的初始化闹司。 (沒做完)
void init_int(void)
{
// interrupt settings
rI_ISPC = 0x3ffffff; // clear interrupt pending register
rEXTINTPND = 0xf; // clear EXTINTPND register
rINTMOD = 0x0; // all for IRQ mode
rINTCON = 0x1; // nonVectored mode, IRQ disable, FIQ
disable
rINTMSK = ~(BIT_GLOBAL|BIT_EINT4567);
// set EINT interrupt handler
pISR_EINT4567 = (int)int4567_isr;
// PORT G configuration
rPCONG = 0xffff; // EINT7~0
rPUPG = 0x0; // pull up enable
rEXTINT = rEXTINT | 0x22220020; // EINT4567 falling edge
mode
rI_ISPC |= BIT_EINT4567;
rEXTINTPND = 0xf; // clear EXTINTPND reg
}
【答】
rI_ISPC EQU 0X3FFFFFFF
rEXTINTPND EQU 0xf
rINTMOD EQU 0x0
rINTCON EQU 0x1
;rINTMSK EQU :NOT:(BIT_GLOBAL|BIT_EINT4567)
;pISR_EINT4567 = (int)int4567_isr;
// PORT G configuration
rPCONG EQU 0xffff; // EINT7~0
rPUPG EQU 0x0; // pull up enable
rEXTINT EQU rEXTINT :OR: 0x22220020; // EINT4567 falling edge
mode
rI_ISPC |= BIT_EINT4567;
rEXTINTPND EQU 0xf; // clear EXTINTPND reg
- 把內(nèi)存中從 0x00000000開始的 32Bytes寫入 SDRAM中娱仔。
【答】
ldr r0, =0x0
ldr r1, =0xc000000
ldmia r0!,{r3-r10}
stmia r1!,{r3-r10}
33.如何實(shí)現(xiàn):把0x00000000~0x00000003空間中的32位二進(jìn)制機(jī)器碼由高位到低位用LED亮/滅時(shí)間順序顯示,亮表示1游桩,滅表示0牲迫,亮/滅時(shí)間各1s耐朴。
【答】
參考28題,利用GPB5實(shí)現(xiàn)。 (PCONB: Address 0x01D20008,PDATB: Address 0x01D2000C)
area test,code,readonly
entry
code32
ldr r0, =0x01D20008
;取端口 B的控制寄存器端口地址
ldr r1, [r0] ;保留原來設(shè)置
ldr r2, =0xFFFFFFDF
and r1,r1,r2 ;端口 B的控制字為 PB[5]=0, 作為輸出端口
str r1,[r0]
ldr r0, =0x01D2000C
ldr r5, [r0]
ldr r10, =0x7DF
ldr r11, =0x020
ldr r1, =0x0
ldr r3,[r1] ;把0x00000000~0x00000003空間中的32位二進(jìn)制機(jī)器碼取出給r3
ror r3,#26
loop
ror r3,#1
bic r4,r3,r2
cmp r4,r11
beq led_on
led_off
orr r5,r5,r11
str r5, [r0] ;向端口B數(shù)據(jù)寄存器寫入PB[5]=1, 使LED滅
bl delay1s ;延時(shí) 1秒
b judge
led_on
and r5,r5,r10
str r5, [r0] ;向端口B數(shù)據(jù)寄存器寫入PB[5]=0, 使LED亮
bl delay1s ;延時(shí) 1秒
judge
add r6,r6,#1
cmp r6,#31
bls loop
b .
end