ARM第五章平时作业

5 S3C2440 嵌入式系统( 63
一、简述启动代码存储在 NAND Flash 存储器上时, S3C2440 的启动过程。 6 分)
为了支持 NAND Flash boot loader S3C2440A 配备了一个内部的 SRAM 缓冲器名
为 “ Steppingstone ”(垫脚石)。 (2 分)
启动时, NAND Flash 上的前 4KByte 字节 将被装载到 Steppingstone 中,并且装载
Steppingstone 上的启动代码会被执行。 (2 分)
一般情况下,启动代码会拷贝 NAND Flash 上的内容到 SDRAM 中,在引导代码执行
完毕后就跳转到 SDRAM 执行。 (2 分)
二、功率管理模块能够使系统工作在哪四种模式下?并分别对每种模式进行简
单描述。 12 分)
(1)正常模式:功率管理模块向 CPU 和所有 外部设备 提供时钟。这种模式下,系统
功率将达到 最大 (3 分)
(2)低速模式:低速模式直接使用 外部时钟 XTIpll 或者 EXTCLK) 作为 FCLK ,没有使
PLL 产生的 时钟。这种模式下,功率仅由 外部时钟 决定。 (3 分)
(3)空闲模式:仅关掉 FCLK ,停止为 CPU 提供时钟信号,而继续提供时钟给其他外
设。 (3 分)
(4)掉电模式:功率管理模块断开内部电源,因此 CPU 和除 唤醒逻辑单元 以外的外
设都不会 产生功耗 。要执行掉电模式需要有 两个 独立的电源,其中一个给 唤醒逻辑单元
供电,另一个给 包括 CPU 在内的其他模块 供电。在掉电模式下,第 二个 电源将被关掉。
(3 分)
三、 DMA 的主要优点是什么?简单描述 S3C2440 DMA 不同源和目的设备
的四种情况。 11 分)
DMA 的主要优点是:可以不通过 CPU 的中断来实现数据的传输, DMA 的运行可以通
过软件或者通过外围设备的中断和请求来初始化。 (3 分)
(1) 源设备和目标都在系统总线 AHB 上; (2 分)
(2) 源设备和目标都在外围总线 APB 上; (2 分)
(3) 源设备在系统总线,而目标设备位于外围总线; (2 分)
(4) 源设备在外围总线,而目标设备位于系统总线。 (2 分)
四、简单描述 DMA 传输时,需求模式和握手模式的区别。 8 分)
主要区别如下:
在一次传输结束时, DMA 检查 DMA 请求信号 的状态。 (2 分)
在需求模式下:如果 DMA 请求信号仍然有效,则传输马上再次开始,否则等待; (3 分)
在握手模式下:如果一次传送结束, DMA 的请求信号还是有效的,那 DMA 控制器,
不会进行下一次传送,而是要等待,直到 DMA 请求信号变得无效后,下一次请求到来时,
才能进行新的一次传输。每请求一次传输一次。 (3 分)
五、简单描述 S3C2440 PWM 模块的自动加载模式和双缓冲模式的主要作用。 6 分)
自动加载模式:自动加载模式 使能 时,当 TCNTn 的值到 0 时,自动加载操作 复制 TCNTBn 的值到 TCNTn 中。但是如果自动加载模式没有使能, TCNTn 将不进行任何操
作。 (3 分)
双缓冲模式:脉宽调制定时器有一个双缓冲功能 ,在这种情况下,改变 下次加载值
同时不影响当前 定时周期 。因此,尽管设置一个新的定时器值,当前定时器的操作将会继
续完成而不受影响。 (3 分)
六、假如 CPU 响应 TIMER1 中断进入中断服务程序,为了避免该中断请求信号
再次引起中断响应,需要把 SRCPND INTPND 寄存器中相关标志位清除 12 分)
(1) 请写出相关的汇编语言程序代码。(注:只需写出相关指令代码,不需要写出完整的汇
编程序结构)( 8 分
(2) 请写出相关的 C 语言程序代码。假设寄存器名称与寄存器的地址已经相关联(在头文
件或其他文件中定义),对 S3C2440 中相关接口的控制寄存器的访问,可以直接使用该
寄存器的名称。 (注:只需写出相关代码,不需要写出完整的程序结构)( 4 分
解:
(1)汇编程序代码如下:
LDR	R1,=0X4A000000	;读取源挂起寄存器(SRCPND)的地址
LDR	R2,[R1]
ORR	R2,R2,#0x800	;R2第11位写1清零
STR	R2,[R1]
LDR	R1,=0X4A000010	;读取中断挂起寄存器(INTPND)的地址
LDR	R2,[R1]
ORR	R2,R2,#0x800	;R2第11位写1清零
STR	R2,[R1]

(2)C语言程序代码如下:

#define SRCPND (*(volatile unsigned int *)0x4A000000)    //定义SRCPND寄存器的地址
#define INTPND (*(volatile unsigned int *)0x4A000010)    //定义INTPND寄存器的地址
#define BIT_TIMER1 (1 << 11)    // 定义TIMER1中断标志位

void clearTimer1Interrupt() {
    SRCPND = BIT_TIMER1;    // 清除TIMER1中断请求标志位
    INTPND = INTPND;    // 清除TIMER1中断挂起标志位
}

七、如果程序要屏蔽 INT_TICK 中断,请写出相关汇编语言程序代码(注:其余
的屏蔽标志位要保持其原值不变。只需写出相关指令代码,不需要写出完整的
汇编程序结构) 8 分)
LDR R1,=0x4A000008 ;获取中断屏蔽寄存器的地址
LDR R2,[R1] 
ORR R2, R2, #0x100 ;中断屏蔽寄存器第8为设置为1
STR R2,[R1]

你可能感兴趣的:(ARM,arm开发)