嵌入式系统实践上机实践报告--存储器
华东师范大学计算机科学技术系实验报告计算机科学技术系上机实践报告课程名称:嵌入式系统实践年级:上机实践成绩:指导教师:姓名:创新实践成绩:上机实践名称:存储器学号:上机实践日期:上机实践编号:组号:上机实践时间:一、 实验目的1. 通过实验熟悉ARM 的内部存储空间分配。2. 熟悉使用寄存器配置存储空间的方法。3. 掌握对存储区进行访问的方法。二、 实验设备1. 硬件:Embest EduKit-III 实验平台,Embest ARM 标准/增强型仿真器套件,PC 机。2. 软件:Embest IDE Pro ARM 集成开发环境,Windows 98/2000/NT/XP。三、 实验内容1. 掌握 S3C44B0X 处理器对存储空间的配置和读写访问的方法:2. 熟练使用命令脚本文件对ARM 存储控制寄存器进行正确配置;3. 使用汇编编程,对RAM 按字、半字和字节读写;4. C 语言编程,对RAM 按字、半字和字节读写。四、 实验原理 S3C44B0X 处理器的存储控制器可以为片外存储器访问提供必要的控制信号,它主要包括以 下特点:1. 支持大、小端模式(通过外部引脚来选择)地址空间:包含8 个地址空间,每个地址空间的大小为32M 字节,总共有256M 字节的2. 地址空间。3. 所有地址空间都可以通过编程设置为8 位、16 位或32 位对准访问。8 个地址空间中,6 个地址空间可以用于ROM、SRAM 等存储器,2 个用于ROM、SRAM、4. FP/EDO/SDRAM 等存储器。5. 7 个地址空间的起始地址及空间大小是固定的。6. 1 个地址空间的起始地址和空间大小是可变的。7. 所有存储器空间的访问周期都可以通过编程配置。8. 提供外部扩展总线的等待周期。9. 支持DRAM/SDARM 自动刷新。10. 支持地址对称或非地址对称的DRAM。 S3C44B0X 复位后的存储器地址分配图 4-1 为S3C44B0X 复位后的存储器地址分配图。从图中可以看出,特殊功能寄存器位于0X01C00000 到0X02000000 的4M 空间内。Bank0-Bank5 的起始地址和空间大小都是固定的,Bank6 的起始地址是固定的,但是空间大小和Bank7 一样是可变的,可以配置为2/4/8/16/32M。Bank6 和Bank7 的详细的地址和空间大小的关系可以参考表4-1 表4-1 Bank6/Bank7 地址大/小ENDIAN 模式选择处理器复位时(nRESET 为低),通过ENDIAN 引脚选择所使用的ENDIAN 模式。ENDIAN 引脚通过下拉电阻与Vss 连接,定义为Little endian 模式;ENDIAN 引脚通过上拉电阻和Vdd 连接,则定义为Big endian 模式.如下表所示。BANK0 总线宽度BANK0(nGCS0)的数据总线宽度可以配置为8 位、16 位或32 位。因为BANK0 为启动ROM(映射地址为0X00000000)所在的空间,所以必须在第一次访问ROM 前设置BANK0 数据宽度,该数据宽度是由复位后OM1:0的逻辑电平决定的,如下表所示。存储器控制专用寄存器总线宽度/等待控制寄存器(BWSCON) 寄存器各位功能:ENDIAN:只读,指示系统选定的大/小端模式,0 表示小端模式,1 表示大端模式。DWi:i=07,其中DW0 为只读,因为bank0 数据总线宽度在复位后已经由OM1:0的电平决定。 DW1DW7 可写,用于配置bank1bank7 的数据总线宽度,00 表示8 位数据总线宽度,01 表示16 位数据总线宽度,10 表示32 位数据总线宽度。SWi:i=17,写入0 则对应的banki 等待状态不使用,写入1 则对应的banki 等待状态使能。STi: i=17,决定SRAM 是否使用UB/LB。0 表示不使用UB/LB,引脚14:11定义为nWBE3:0;1 表示使用UB/LB,引脚14:11定义为nBE3:0。Bank 控制寄存器(BANKCONn: nGCS0-nGCS5) Bank 控制寄存器(BANKCONn: nGCS6-nGCS7)刷新控制寄存器(REFRESH)BANK 大小寄存器(BANKSIZE)模式设置寄存器(MRSR)下面列举了 13 个存储控制寄存器的配置示例: 观察上面寄存器介绍中的寄存器地址可以发现,13 个寄存器分布在从0x01c80000 开始的连续地址空间,所以上面的程序可以利用指令“stmia r0, r1-r13”实现将配置好的寄存器的值依次写入到相应的寄存器中。存储器(SROM/DRAM/SDRAM)地址线连接如表4-4 所示,数据宽度不同,连接方式也不同。表 4-4 存储器地址线连接使用命令脚本文件配置存储空间 在使用仿真器对目标系统进行硬件仿真调试前,需要把代码下载到目标系统的 RAM 空间中,所以调试前首先应该配置CPU 的存储控制寄存器,初始化可读写空间。Embest IDE Pro ARM 集成环境下可以使用一系列存储写命令来完成存储控制寄存器的配置,称为命令脚本文件(*.cs,有关命令脚本文件请参考Embest IDE 在线用户手册),通过命令脚本文件(*.cs)还可以配置目标系统的其他CPU 控制寄存器,如中断控制寄存器。 Embest EduKit-III 的调试配置使用的命令脚本文件如下: 片选信号设置Embest EduKit-III 实验板的片选信号设置如表4-5 所示:表 4-5 片选信号设置 外围地址空间分配板上外围地址空间分配如表 4-6 所列:表 4-6 外围地址空间分配 电路设计Embest EduKit-III 实验板上的存储系统包括一片1M×16bit 的Flash(SST39VF160)和一片4M×16bit 的SDRAM(HY57V65160B)。如图 4-2 Flash 连接电路所示,处理器是通过片选nGCS0 与片外Flash 芯片连接。由于是16bit的Flash,所以用CPU 的地址线A1-A20 来分别和Flash 的地址线A0-A19 连接。Flash 的地址空间是从0x000000000x00200000。 Flash 连接电路如图SDRAM 连接电路所示,SDRAM 分成4 个BANK,每个BANK 的容量为1M×16bit。BANK 的地址由BA1、BA0 决定,00 对应BANK0,01 对应BANK1,10 对应BANK2,11 对应BANK3。在每个BANK 中,分别用行地址脉冲选通RAS 和列地址脉冲选通CAS 进行寻址。本实验板还设置跳线,可以为用户升级内存容量至4×2M×16bit。具体方法为使SDRAM 的BA0、BA1 分别接至CPU 的A21、A22,A23 脚。SDRAM 由MCU 专用SDRAM 片选信号nSCS0 选通,地址空间从0x0C0000000x0C7FFFFF。 SDRAM 连接电路五、 实验步骤 1. 准备实验环境:使用 Embest 仿真器连接目标板,使用Embest EduKit-III 实验板附带的串口线,连接实验板上的UART0 和PC 机的串口。 2. 串口接收设置在 PC 机上运行windows 自带的超级终端串口通信程序(波特率115200、1 位停止位、无校验位、无硬件流控制);或者使用其它串口通信程序。3. 打开实验例程1)拷贝光盘CD1SoftwareEduKit44b0 文件夹到EmbestIDEExamplesSamsung目录下;2) 使用Embest IDE 通过Embest JTAG 仿真器连接实验板,打开实验例程目录4.2_led_test子目录下的led_test.pjf 例程,编译链接工程;ARM7 基础实验教程- 166 -3) 点击IDE 的Debug 菜单,选择Remote Connect 项或F8 键,远程连接目标板;4) 点击IDE 的Debug 菜单,选择Download 下载调试代码到目标系统RAM 中;5) 在工程管理窗口中双击led.c 就会打开该文件,在“leds_off();”设置断点后,点击Debug菜单Go 或F5 键运行程序;6) 当程序停留到断点后,观察当前led 1206、led 1207 的状态,点击Debug 菜单下的Stepover 或F10 键执行程序,观察led 1206、led 1207 的变化;7) 结合实验内容和实验原理部分,掌握ARM 芯片中复用I/O 口的使用。 4. 观察实验结果:在 PC 机上观察超级终端程序主窗口,可以看到如下界面:boot success.Led Test Example 程序正确运行后,可以看到实验系统上LED 1206 和LED 1207 进行以下循环:LED1206 亮 -> LED1206 关闭 -> LED1207 亮 ->LED1206 和LED1207 全亮 -> LED1207 关闭 -> LED1206 关闭5. 完成实验练习题理解和掌握实验后,完成实验练习题。六、调试过程、结果和分析1.实验时先运行了原来的函数,改变memory变量。2.这次实验首先是要从光盘里打开源文件,观察实例程序是如何实现word,halfword以及byte的调用,然后再通过打开源文件而进行下面的实验。3.在程序调试的过程中始终报r5(我在程序中使用的一个寄存器)未被指定,后来在老师的帮助下,发现是我的一个汇编代码写的有点问题,ldrb r3,=r5应该改为ldrb r3,【r5】七、总结 1.本次上机第一次用到Embest ARM 标准/增强型仿真器套件,并且本次题目题目比较难,尽管老师给了我们充足的时间去完成所有的练习题,但结果差强人意。本次实验题目的主要内容是从内存中按word,halfword以及byte读写,同时也复习了之前的内容,如各种c程序和汇编程序的相互调用,通过这次试验对于存储器有了更加直观的认识。2关于代码部分,基本根据示例程序可以完成基本架构,但是有些细节还是无法完成,导致调试不成功,当然代码不是个人的劳动结晶,最终跟同学共同完成了试验任务。八、附件1. 编写C语言函数Main()定义变量src_addr,dst_addr, num,其值可变,理论上可定义为任意整数调用函数s_init(.)实现从src_addr起始的连续num个字节的内存各字节依次写为0x1num调用函数c_move(.)实现从src_addr读取连续num个字节的内存,并逆序依次写入dst_addr起始的连续内存地址通过超级终端反馈操作信息Main.cvoid _gccm