物理与光电学院《嵌入式系统》复习内容

2017-06-07  本文已影响154人  aiyolo

来源: https://shimo.im/doc/dvSE3Wj0mTILi7BF

  1. ROM, RAM, SRAM, DRAM, SDRAM, FLASH存储器的特点。
    【答】
    ROM为只读内存,在断电后仍可以保持数据;
    RAM为随机存取内存,断电后丢失数据;
    SRAM为静态RAM,速度非常快;
    DRAM为动态RAM,保留数据时间短,速度比SRAM慢,但比任何ROM都快;
    SDRAM为同步动态RAM,拥有DRAM的所有特点;
    FLASH为闪存,具有ROM和RAM的长处,断电保持数据,同时快速读取数据

  2. ARM7采用的 I/O编址方式。

【答】I/O接口与存储器统一编址

  1. 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大小相同

  1. ARM处理器异常组成,特点和地址分配。

【答】
异常组成:
指令执行引起的直接异常:如软件中断,未定义指令,预取指中止
指令执行引起的间接异常:数据中止
外部产生的与指令流无关的异常:复位,IRQ,FIQ

特点:
发生异常中断时,ARM进入相应的异常模式,然后从异常向量表中对应的异常地址开始执行中断处理程序。
地址分配:
复位:0x0
未定义指令:0x4
软件中断:0x8
指令预取中止:0xC
数据访问中止:0x10
外部中断请求:0x18
快速中断请求:0x1c

  1. Samsung S3C44B0x 寻址特点。

【答】
内存访问要通过LDR,STR指令

  1. ARM7中, STMED SP!, {R0-R12, LR}指令执行过程和 SP的变化。

【答】
空递减堆栈,R0->[sp],R1->[sp-0x4],...,R12->[sp-0x30],LR->[sp-0x34],最后sp->sp-0x38

  1. Samsung S3C44B0x矢量和非矢量中断的过程。

  2. ARM7指令系统中,哪类指令可以访问存储器。

【答】str,ldr,stm,ldm

  1. 堆栈操作指令。

【答】stm/ldm(ia,ib,da,db,fa,fd,ea,ed)

  1. 嵌入式系统启动代码流程。

【答】
(1)启动代码的第一步是设置中断和异常向量。
(2)完成系统启动所必须的最小配置,某些处理器芯片包含一个或几个全局寄存器,这些寄存器必须在系统启动的最初进行配置。
(3)设置看门狗,用户设计的部分外围电路如果必须在系统启动时初始化,就可以放在这一步。
(4)配置系统所使用的存储器,包括 Flash,SRAM和 DRAM等,并为他们分配地址空间。如果系统使用了 DRAM或其它外设,就需要设置相关的寄存器,以确定其刷新频率,数据总线宽度等信息,初始化存储器系统。有些芯片可通过寄存器编程初始化存储器系统,而对于较复杂系统通常集成有 MMU来管理内存空间。
(5)为处理器的每个工作模式设置栈指针, ARM处理器有多种工作模式,每种工作模式都需要设置单独的栈空间。
(6)变量初始化,这里的变量指的是在软件中定义的已经赋好初值的全局变量,启动过程中需要将这部分变量从只读区域,也就是 Flash拷贝到读写区域中,因为这部分变量的值在软件运行时有可能重新赋值。还有一种变量不需要处理,就是已经赋好初值的静态全局变量,这部分变量在软件运行过程中不会改变,因此可以直接固化在只读的Flash或 EEPROM中。
(7)数据区准备,对于软件中所有未赋初值的全局变量,启动过程中需要将这部分变量所在区域全部清零。
(8)最后一步是调用高级语言入口函数,如 main函数等。

  1. ARM7中,调用子程序和实现从子程序返回的指令。

【答】BL xxx, MOV PC,R14

  1. Samsung S3C44B0x异常矢量表。

【答】
复位:0x0
未定义指令:0x4
软件中断:0x8
指令预取中止:0xC
数据访问中止:0x10
外部中断请求:0x18
快速中断请求:0x1c

  1. ARM7三级流水线

    【答】
    取值,译码,执行
    取值,译码,执行
    取值,译码,执行

  2. Samsung S3C44B0x 执行指令 LDR R2, =0x01C80000;LDR R1, [R2,#8]!后,选中的地址空间。

【答】[0x01c80008]->R1, R2+0x8->R2, 执行后R2=0x01c80008

  1. ARM7中 ,若 SP=0x2028,执行指令STMED SP!, {R0-R4, R5, R6, R7, LR}后 SP值。

【答】sp=0x2028-9*4=0x2004

  1. ARM7处理器异常(EXCEPTIONS) 中断的优先级

    【答】1、复位; 2、数据异常中止; 3、fiq; 4、irq; 5、预取指异常; 6、swi,未定义指令

  2. 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

  1. S3C44B0X 存储控制器。

【答】

  1. 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

  1. S3C44B0X 时钟和电源管理 。

【答】
电源管理方案:
正常模式:时钟向cpu和外设提供时钟信号
低速模式:外部时钟(非pll)作为主时钟
空闲模式:时钟断开与cpu的连接,仍提供外设时钟信号
停止模式:通过禁止pll来冻结cpu和外设提供时钟信号
SL空闲模式:cpu和除lcd之外所有外设的时钟都被禁止

  1. S3C44B0X CPU wrapper 和总线优先权。

【答】

  1. S3C44B0X 看门狗定时器。

【答】
片内集成,属于软件看门狗
受到故障时,能继续控制器的操作。可作为16位定时器请求中断服务,并在每128个MCLK后产生周期复位信号

带中断请求的普通间隔定时器模式
计数值达到0时,内部复位信号被激活128个MCLK周期
16位看门狗定时器
定时器溢出时,发生中断请求或系统复位

  1. CISC和 RISC (Reduced Instruction Set Computing)的主要特征

    【答】
    CISC:复杂指令集,高性能,指令长度不相等,指令较多,难以实现流水线操作
    RISC:简单指令集,指令格式长度固定,指令类型少,寻址方式少而简单,只有Load/Store结构的存取指令能访问内存

  2. 下列常用的指令作用:

(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...等寄存器赋值

  1. 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..

  1. 矢量中断方式中,下列指令执行过程。

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

  1. 如何用 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

  1. 把内存中从 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 

来源: https://shimo.im/doc/dvSE3Wj0mTILi7BF

上一篇下一篇

猜你喜欢

热点阅读