物理与光电学院《嵌入式系统》复习内容
来源: https://shimo.im/doc/dvSE3Wj0mTILi7BF
-
ROM, RAM, SRAM, DRAM, SDRAM, FLASH存储器的特点。
【答】
ROM为只读内存,在断电后仍可以保持数据;
RAM为随机存取内存,断电后丢失数据;
SRAM为静态RAM,速度非常快;
DRAM为动态RAM,保留数据时间短,速度比SRAM慢,但比任何ROM都快;
SDRAM为同步动态RAM,拥有DRAM的所有特点;
FLASH为闪存,具有ROM和RAM的长处,断电保持数据,同时快速读取数据 -
ARM7采用的 I/O编址方式。
【答】I/O接口与存储器统一编址
- Samsung S3C44B0x存储器单元特点和分组特点。
【答】
支持大小端模式,通过外部引脚来选择
包含8个地址空间,Bank0-Bank7,每个地址空间32MB
所有地址空间都可以通过编程设置8为、16位、32为宽数据对齐访问
Bank0-Bank5支持ROM、SRAM,Bank6,Bank7支持ROM,SRAM,FP/EDO/SDRAM等
Bank0-Bank5起始地址、大小固定,Bank6起始地址固定但大小可变,Bank7与Bank6大小相同
- ARM处理器异常组成,特点和地址分配。
【答】
异常组成:
指令执行引起的直接异常:如软件中断,未定义指令,预取指中止
指令执行引起的间接异常:数据中止
外部产生的与指令流无关的异常:复位,IRQ,FIQ
特点:
发生异常中断时,ARM进入相应的异常模式,然后从异常向量表中对应的异常地址开始执行中断处理程序。
地址分配:
复位:0x0
未定义指令:0x4
软件中断:0x8
指令预取中止:0xC
数据访问中止:0x10
外部中断请求:0x18
快速中断请求:0x1c
- Samsung S3C44B0x 寻址特点。
【答】
内存访问要通过LDR,STR指令
- ARM7中, STMED SP!, {R0-R12, LR}指令执行过程和 SP的变化。
【答】
空递减堆栈,R0->[sp],R1->[sp-0x4],...,R12->[sp-0x30],LR->[sp-0x34],最后sp->sp-0x38
-
Samsung S3C44B0x矢量和非矢量中断的过程。
-
ARM7指令系统中,哪类指令可以访问存储器。
【答】str,ldr,stm,ldm
- 堆栈操作指令。
【答】stm/ldm(ia,ib,da,db,fa,fd,ea,ed)
- 嵌入式系统启动代码流程。
【答】
(1)启动代码的第一步是设置中断和异常向量。
(2)完成系统启动所必须的最小配置,某些处理器芯片包含一个或几个全局寄存器,这些寄存器必须在系统启动的最初进行配置。
(3)设置看门狗,用户设计的部分外围电路如果必须在系统启动时初始化,就可以放在这一步。
(4)配置系统所使用的存储器,包括 Flash,SRAM和 DRAM等,并为他们分配地址空间。如果系统使用了 DRAM或其它外设,就需要设置相关的寄存器,以确定其刷新频率,数据总线宽度等信息,初始化存储器系统。有些芯片可通过寄存器编程初始化存储器系统,而对于较复杂系统通常集成有 MMU来管理内存空间。
(5)为处理器的每个工作模式设置栈指针, ARM处理器有多种工作模式,每种工作模式都需要设置单独的栈空间。
(6)变量初始化,这里的变量指的是在软件中定义的已经赋好初值的全局变量,启动过程中需要将这部分变量从只读区域,也就是 Flash拷贝到读写区域中,因为这部分变量的值在软件运行时有可能重新赋值。还有一种变量不需要处理,就是已经赋好初值的静态全局变量,这部分变量在软件运行过程中不会改变,因此可以直接固化在只读的Flash或 EEPROM中。
(7)数据区准备,对于软件中所有未赋初值的全局变量,启动过程中需要将这部分变量所在区域全部清零。
(8)最后一步是调用高级语言入口函数,如 main函数等。
- ARM7中,调用子程序和实现从子程序返回的指令。
【答】BL xxx, MOV PC,R14
- Samsung S3C44B0x异常矢量表。
【答】
复位:0x0
未定义指令:0x4
软件中断:0x8
指令预取中止:0xC
数据访问中止:0x10
外部中断请求:0x18
快速中断请求:0x1c
-
ARM7三级流水线
。
【答】
取值,译码,执行
取值,译码,执行
取值,译码,执行 -
Samsung S3C44B0x 执行指令 LDR R2, =0x01C80000;LDR R1, [R2,#8]!后,选中的地址空间。
【答】[0x01c80008]->R1, R2+0x8->R2, 执行后R2=0x01c80008
- ARM7中 ,若 SP=0x2028,执行指令STMED SP!, {R0-R4, R5, R6, R7, LR}后 SP值。
【答】sp=0x2028-9*4=0x2004
-
ARM7处理器异常(EXCEPTIONS) 中断的优先级
。
【答】1、复位; 2、数据异常中止; 3、fiq; 4、irq; 5、预取指异常; 6、swi,未定义指令 -
ADDHIS R5, R4, R3, LSL R2的十六进制机器码。
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 存储控制器。
【答】
- 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个中断源
向量irq中断模式减少中断响应周期
外部中断源的电平/边沿模式
可编程的电平/边沿极性
支持fiq
- S3C44B0X 时钟和电源管理 。
【答】
电源管理方案:
正常模式:时钟向cpu和外设提供时钟信号
低速模式:外部时钟(非pll)作为主时钟
空闲模式:时钟断开与cpu的连接,仍提供外设时钟信号
停止模式:通过禁止pll来冻结cpu和外设提供时钟信号
SL空闲模式:cpu和除lcd之外所有外设的时钟都被禁止
- S3C44B0X CPU wrapper 和总线优先权。
【答】
- S3C44B0X 看门狗定时器。
【答】
片内集成,属于软件看门狗
受到故障时,能继续控制器的操作。可作为16位定时器请求中断服务,并在每128个MCLK后产生周期复位信号
带中断请求的普通间隔定时器模式
计数值达到0时,内部复位信号被激活128个MCLK周期
16位看门狗定时器
定时器溢出时,发生中断请求或系统复位
-
CISC和 RISC (Reduced Instruction Set Computing)的主要特征
。
【答】
CISC:复杂指令集,高性能,指令长度不相等,指令较多,难以实现流水线操作
RISC:简单指令集,指令格式长度固定,指令类型少,寻址方式少而简单,只有Load/Store结构的存取指令能访问内存 -
下列常用的指令作用:
(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
【答】当中断请求产生时,根据上面的中断向量表,跳转到相应的中断处理程序
(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地址的连续1536*1024个字节复制到以0xc300000为起始地址的RAM内存地址,最后跳转到0xc300000的RAM中执行指令
(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 数据段里的内容存放到寄存器{r0-r13}
再把{r0-r13}寄存器的内容存入地址0x01c80000,相当于给BWSCON,GCS0...等寄存器赋值
- ARM7 reset后的PC地址,如何处理复位。下列指令写入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
【答】
在上电后首先处理复位中断,跳转到相应的子程序,在子程序里初始化硬件配置;依次是0x0,0x4..
- 矢量中断方式中,下列指令执行过程。
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地址的内容给r9,并存入[sp-4],入栈操作,r8-r9恢复原来数据,pc=HandlerEINT4567第一条指令的16进制编码,sp重新指向[sp]
sp
sp-4
HandlerEINT4567地址的内容
sp-8
r9
sp-12
r8
- 如何用 ARM汇编语言实现中断的初始化。 (没做完)
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
- 把内存中从 0x00000000开始的 32Bytes写入 SDRAM中。
【答】
ldr r0, =0x0
ldr r1, =0xc000000
ldmia r0!,{r3-r10}
stmia r1!,{r3-r10}
33.如何实现:把0x00000000~0x00000003空间中的32位二进制机器码由高位到低位用LED亮/灭时间顺序显示,亮表示1,灭表示0,亮/灭时间各1s。
【答】
参考28题,利用GPB5实现。 (PCONB: Address 0x01D20008,PDATB: Address 0x01D2000C)
area test,code,readonly
entry
code32
ldr r0, =0x01D20008
;取端口 B的控制寄存器端口地址
ldr r1, [r0] ;保留原来设置
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位二进制机器码取出给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数据寄存器写入PB[5]=1, 使LED灭
bl delay1s ;延时 1秒
b judge
led_on
and r5,r5,r10
str r5, [r0] ;向端口B数据寄存器写入PB[5]=0, 使LED亮
bl delay1s ;延时 1秒
judge
add r6,r6,#1
cmp r6,#31
bls loop
b .
end