存储管理实验linux,07-存储管理器实验

S3C2440的存储控制器提供了访问外设所需要的信号,它有如下特性:

支持大/小端字节(通过软件选择);

每个BANK的地址空间为128MB,总共1GB(8个BANK);

可编程控制的总线宽度(8/16/32bit),BANK0只有两种位宽(16/32bit);

总共8个BANK:BANK0-BANK5可以支持外接ROM、SRAM等;BANK6-BANK7除了支持ROM、SRAM外,还支持SDRAM等;

BANK0-BANK6七个BANK的起始地址固定;

BANK7的起始地址可编程选择;

每个BANK的访问周期均可编程控制;

通过外部的wait信号延长总线的访问周期;

在外接SDRAM时,支持自刷新和省电模式模式。

S3C2440对外引出的27根地址线ADDR0-ADDR26的访问范围只有128MB,而八个片选信号nGCS0-nGCS7对应于BANK0-BANK7,当访问BANKx的地址空间时,nGCSx引脚输出低电平用来选中外接的设备。每个nGCSx对应128MB地址空间,8个nGCSx信号总共对应了1GB。

e75d13d2259d5004f911f563466c6316.png

在TQ2440开发板中BANK6连接SDRAM,CPU对其提供了一组用于SDRAM的信号:

SDRAM时钟有效信号LSCKE;

SDRAM时钟信号LSCLK0/LSCLK1;

数据掩码信号LnWBE0/LnWBE1/LnWBE2/LnWBE3;

SDRAM行地址选通脉冲信号LnSRAS;

SDRAM列地址选通脉冲信号LnSCAS;

写允许信号LnWE

90c9b45008ca57d3da20e488f1943eaa.png    

6b17ee4c4c3b6a4d6f239ba7ef3d9094.png

1、SDRAM介绍

SDRAM的内部是一个存储阵列,如同一个二维表格,将数据填进去。其检索原理和表格相同,先指定一个行地址,再指定一个列地址就可以准确找到所需要的单元格。这个单元格被称为存储单元,而表格则称为逻辑BANK(L-BANK),SDRAM一般有4个L-BANK其逻辑图为上图所示。

访问SDRAM可以分为如下四个步骤:

1、CPU发出的片选信号LnSCS0有效;

2、SDRAM中有4个L-BANK,需要两根地址线来选中其中一个,从图中可知使用ADDR24、ADDR25作为L-BANK选择信号;

3、对选中的芯片进行统一行/列(存储单元)寻址;

4、找到存储单元后,被选中的芯片进行同一的数据传输。

在TQ2440开发板中使用了两片16位的ADRAM芯片并联组成32位的位宽,与CPU的32根数据线(DATA0-DATA31)相连。BANK6的起始地址为0x30000000,所以SDRAM的访问地址为0x30000000-ox33ffffff,共64MB。

afbce4f16041f30afb7f39d0f4ac00b8.png

2、存储控制器的寄存器使用

在S3C2440中,存储控制器一共有13个寄存器,BANK0-BANK5只需要设置BWSCON和BANKCONx(x为0-5)两个寄存器,BANK6/BANK7外接SDRAM时,除了WSCON和BANKCONx(x为6-7)外,还需要设置REFRESH、BANKSIZE、MRSRB6、MRSRB7等四个寄存器。下面分别说明每个寄存器。

位宽和等待控制寄存器BWSCON

BWSCON

说明

STx

启动/禁止SDRAM的数据掩码引脚,对于SDRAM,此位为0;对于SRAM,此位为1

WSx

是否使用存储器的WAIT信号,通常设为0

DWx

使用两位来设置相应BANK的位宽,0b00对应8位,0b01对应16位,0b10对应32位,0b11保留

对于BANK0,它没有ST0和WS0、DW0([2:1]),bank0只支持两种位宽16/32。

BANK控制寄存器BANKCONx(x为0-5),控制BANK0-BANK5外接设备的访问时序,使用默认的0x0700即可满足TQ2440开发板。

BANK控制寄存器BANKCONx(x为6-7),在8个BANK中,只有BANK6和BANK7可以外接SRAM或SDRAM,因此其设置方法有所不同。

BANKCONn

说明

MT [16:15]

用于设置BANK外接的是SRAM或SDRAM,00 = ROM or SRAM,11 = Sync. DRAM

Trcd [3:2]

RAS to CAS delay,推荐设置0b01

SCAN [1:0]

SDRAM的列地址位数,00 = 8-bit 01 = 9-bit 10= 10-bit

刷新控制寄存器REFRESH

REFRESH

说明

REFEN [23]

0,禁止SDRAM的刷新功能,1,开启SDRAM的刷新功能

TREFMD [22]

SDRAM的刷新模式。0 = CBR/Auto Refresh 1 = Self Refresh(一般系统休眠时使用)

Trp [21:20]

一般设置为0

Tsrc [19:18]

设为默认值11

Refresh Counter [10:0]

SDRAM的刷新值,Refresh period = (211-SDRAM时钟频率(MHX)+1)/sdram刷新周期(us)

BANKSIZE寄存器

BANKSIZE

说明

BURST_EN [7]

0,禁止ARM核突发传输;1,ARM核支持突发传输

SCKE_EN [5]

0,不使用SCKE信号令SDRAM进入省电模式;1,使用SCKE信号令SDRAM进入省电模式

SCLK_EN [4]

0,时刻发出SCLK信号;1,仅在访问SDRAM期间发出SCLE信号

BK76MAP [2:0]

配置BANK大小

SDRAM模式设置寄存器MRSRBx(6-7)

MRSRBx

说明

CL [6:4]

SDRAM时序的时间参数设置

3、存储控制器实验;点亮LED灯

从NAND Flash启动CPU时,CPU会通过内部的硬件将NAND Flash开始的4KB数据复制到称为Steppingstone的4KB的内部RAM中(起始地址为0),然后跳转到地址0开始执行。

本实验先使用汇编语言设置好存储控制器,使外接的SDRAM可用,然后把程序本身从Steppingstone复制到SDRAM,最后跳转到SDRAM中执行。

首先在head.S文件中,完成的工作是设置SDRAM,将程序复制到SDRAM中,然后跳转到SDRAM继续执行。

.equ MEM_CTL_BASE, 0x48000000

.equ SDRAM_BASE, 0x30000000

.text

.global _start

_start:

bl disable_watch_dog @ 关闭WATCHDOG,否则CPU会不断重启

bl memsetup @ 设置存储控制器

bl copy_steppingstone_to_sdram @ 复制代码到SDRAM中

ldr pc, =on_sdram @ 跳到SDRAM中继续执行

on_sdram:

ldr sp, =0x34000000 @ 设置堆栈

bl main

halt_loop:

b halt_loop

disable_watch_dog:

@ 往WATCHDOG寄存器写0即可

mov r1, #0x53000000

mov r2, #0x0

str r2, [r1]

mov pc, lr @ 返回

copy_steppingstone_to_sdram:

@ 将Steppingstone的4K数据全部复制到SDRAM中去

@ Steppingstone起始地址为0x00000000,SDRAM中起始地址为0x30000000

mov r1, #0

ldr r2, =SDRAM_BASE

mov r3, #4*1024

1:

ldr r4, [r1],#4 @ 从Steppingstone读取4字节的数据,并让源地址加4

str r4, [r2],#4 @ 将此4字节的数据复制到SDRAM中,并让目地地址加4

cmp r1, r3 @ 判断是否完成:源地址等于Steppingstone的未地址?

bne 1b @ 若没有复制完,继续

mov pc, lr @ 返回

memsetup:

@ 设置存储控制器以便使用SDRAM等外设

mov r1, #MEM_CTL_BASE @ 存储控制器的13个寄存器的开始地址

adrl r2, mem_cfg_val @ 这13个值的起始存储地址

add r3, r1, #52 @ 13*4 = 54

1:

ldr r4, [r2], #4 @ 读取设置值,并让r2加4

str r4, [r1], #4 @ 将此值写入寄存器,并让r1加4

cmp r1, r3 @ 判断是否设置完所有13个寄存器

bne 1b @ 若没有写成,继续

mov pc, lr @ 返回

.align 4

mem_cfg_val:

@ 存储控制器13个寄存器的设置值

.long 0x22011110 @ BWSCON

.long 0x00000700 @ BANKCON0

.long 0x00000700 @ BANKCON1

.long 0x00000700 @ BANKCON2

.long 0x00000700 @ BANKCON3

.long 0x00000700 @ BANKCON4

.long 0x00000700 @ BANKCON5

.long 0x00018005 @ BANKCON6

.long 0x00018005 @ BANKCON7

.long 0x008C07A3 @ REFRESH

.long 0x000000B1 @ BANKSIZE

.long 0x00000030 @ MRSRB6

.long 0x00000030 @ MRSRB7

在leds.c文件中,完成led循环闪烁的实验:

#define GPBCON (*(volatile unsigned long *)0x56000010)

#define GPBDAT (*(volatile unsigned long *)0x56000014)

/*

* LED1,LED2,LED4对应GPB5、GPB6、GPB7、GPB8

*/

#define GPB5_out (1<

#define GPB6_out (1<

#define GPB7_out (1<

#define GPB8_out (1<

void wait(volatile unsigned long dly)

{

for(; dly > 0; dly--);

}

int main(void)

{

unsigned long i = 0;

// LED1,LED2,LED3,LED4对应的4根引脚设为输出

GPBCON = GPB5_out | GPB6_out | GPB7_out | GPB8_out;

while(1){

wait(30000);

GPBDAT = (~(i<<5)); // 根据i的值,点亮LED1,2,3,4

if(++i == 16)

i = 0;

}

return 0;

}

Makefile的编写为:

sdram.bin : head.S leds.c

arm-linux-gcc -c -o head.o head.S

arm-linux-gcc -c -o leds.o leds.c

arm-linux-ld -Ttext 0x30000000 head.o leds.o -o sdram_elf #链接代码段的起始地址为0x30000000

arm-linux-objcopy -O binary -S sdram_elf sdram.bin

arm-linux-objdump -D -m arm sdram_elf > sdram.dis

clean:

rm -f sdram.dis sdram.bin sdram_elf *.o

代码的具体流程图为:

e789038da626c0891f1c6ab2bfb6c8f4.png

f6ab745f919dcdcb65cc1e35f8215b84.png   

42b0e70cdcd8c6aa67a2785d4a8ed11a.png

e81f7bb8e5b2aebccf43b524c049ae29.png

实验结果:

d0a660f357c299577e5d24d77a8a67a3.png

f4b5305b3849cb6f9a28351fa41436f4.png

相比于直接在内部SRAM运行结果,可以发现在外部SDRAM运行的LED点灯程序,LED闪烁变慢 。本程序只能将内部SRAM的4KB程序复制到外部SDRAM,当程序大于4KB时,要复制4KB后的代码,就需要使用NAND Flash控制器。

实验代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux bash and,linux bash shell中for的用法and示例

关于linux bash shell中的for语句在linux中shell是必不可少的一部分&#xff0c;但是在bash shell中有while&#xff0c;for&#xff0c;until等循环命令&#xff0c;今天就介绍一下关于for的一些用法。文中任何错误希望大佬们一一指出&#xff0c;不胜感激。bash shell中提供了…

mac利用vscode运行c语言程序,Mac下使用VScode编译配置C/C++程序详细图文教程

在mac上有时候需要编写一些c 或者 c的代码&#xff0c;如果使用 xcode&#xff0c;有时候就显得很笨重&#xff0c;而且运行起来很不方便。而微软提供了一个跨平台的编辑器visual studio code ,这个编辑器很轻量级&#xff0c;而且插件超多&#xff0c;你几乎可以在这个编辑器里…

五邑大学c语言期末考试题,五邑大学 c语言试卷.doc

五邑大学 c语言试卷.doc下载提示(请认真阅读)1.请仔细阅读文档&#xff0c;确保文档完整性&#xff0c;对于不预览、不比对内容而直接下载带来的问题本站不予受理。2.下载的文档&#xff0c;不会出现我们的网址水印。3、该文档所得收入(下载内容预览)归上传者、原创作者&#x…

网页版bpc电波对时_科普向:无需联网却能自动对时的钟表

有一种神秘的钟表&#xff0c;它能够自动对时&#xff0c;却不需要联网&#xff0c;它十分准时&#xff0c;和传说中的的原子钟的误差也仅有几毫秒&#xff0c;它十分小众&#xff0c;却也随处可见&#xff0c;它就是电波表。今天猫头我就跟大家说说这个电波表。首先什么是电波…

动感灯箱制作流程培训_2000多年的灯箱发展史,你知道多少?

灯箱作为日常广告标识业务的重要板块&#xff0c;相信每个标识人都已经非常熟悉了&#xff0c;国内标识人也经常去学习相关新工艺新案例&#xff0c;但其实很多人不知道世界上最早的灯箱可能是中国人制作的哦~接下来就带大家一起揭开灯箱的前世今生&#xff0c;并详细盘点一下如…

c语言程序设计基础1千克,c语言学习知识编程经典编辑题汇总整编.doc

c语言学习知识编程经典编辑题汇总整编.doc - C语言编程基础习题汇总1.设计一个由键盘输入三个整数&#xff0c;求这三个数的平均数的程序。2.编写一个程序&#xff0c;用于水果店售货员结账。已知苹果每斤2.50元&#xff0c;鸭梨每斤1.80元&#xff0c;香蕉每斤2元&#xff0c;…

cp 过程中目录突然挂了_怎么解决管材激光切割机切管过程中出现的过烧及挂渣...

近年来&#xff0c;随着激光切割机的发展&#xff0c;不仅被用于切割平面板材&#xff0c;而且被应用于切割管材&#xff0c;我们称之为“管材激光切割机”。那么管材激光切割机用于切割管材时是否会出现问题呢&#xff0c;是的&#xff0c;确实出现了问题。由于管材的封闭性&a…

识别产品外观的合格软件_你还在犹豫?外观检测设备使用已成主流!

今天跟大伙聊一聊关于各种瓶子的外观检测/视觉检测。我们都知道&#xff0c;不管是瓶子、杯子还是其他的&#xff0c;在生产过程种对产品的质量检测这种有着超高重复性动作与随机应变能力的工作&#xff0c;在以前的工业时代&#xff0c;完全依靠人“人眼识别”人工检测来完成&…

jsessionid每次请求都在变_为什么每次沟通都变争吵,学会这4条沟通原则,解决90%的沟通问题...

沟通重要吗&#xff1f;太重要了&#xff0c;可以这么说&#xff0c;我们在生活中遇到的绝大部分问题其实都是沟通问题。你的身边有这样的对话吗&#xff1f;老婆对丈夫说&#xff1a;“老娘当初瞎眼了才看上你&#xff0c;成天就知道打牌“妈妈对儿子说&#xff1a;”你看看人…

常见食物营养成分表图_营养成分表,你会看么?

中国居民对于营养标签的认知较低。一项针对中国五城市居民的调查显示&#xff0c;仅有40.54%的消费者会阅读营养标签。恭喜你成为其中之一。这是什么数据&#xff1f;营养成分表通常有三项主要内容&#xff0c;从左到右依次为营养素的名称、营养素的含量以及营养素参考值&#…

android 自定义view滚动条,Android自定义View实现等级滑动条的实例

Android自定义View实现等级滑动条的实例实现效果图&#xff1a;思路&#xff1a;首先绘制直线&#xff0c;然后等分直线绘制点&#xff1b;绘制点的时候把X值存到集合中。然后绘制背景图片&#xff0c;以及图片上的数字。点击事件down的时候&#xff0c;换小图片为大图片。move…

android短信验证码代码,Android短信验证码自动填写实现代码

今天给大家分享一个Android短信验证码自动填写的功能。先看下效果图&#xff0c;我发送了一条短信到手机&#xff0c;自动填写验证码。如图&#xff1a;这个小功能运用到了观察者模式&#xff0c;什么是观察者模式&#xff1f;观察者模式 &#xff1a;定义对象间的一种一个(Sub…

android 评论的展开功能,Android开发实现ListView点击展开收起效果示例

本文实例讲述了Android开发实现ListView点击展开收起效果。分享给大家供大家参考&#xff0c;具体如下&#xff1a;废话不说先上效果&#xff1a;实际上这是采用一个ExpandableListView实现的布局文件很简单&#xff1a;xmlns:android"http://schemas.android.com/apk/res…

画流程图activiti流程图_干货!小白也能一天画100张高逼格流程图

今天是在一起两周年零128天纪念日~你喜滋滋地订好了花&#xff0c;买好了酒&#xff0c;暗暗盘算着下班以后赶紧走~不料老板的命令从天而降“出100张流程图&#xff0c;今天给我&#xff01;”What&#xff1f;&#xff1f;&#xff1f;100张&#xff01;&#xff01;&#xff…

linux修图,修图只知道Photoshop?11款高逼格修图工具快来get!

精致的产品是在线商店成功的一个重要元素。虽然Adobe Photoshop长期以来一直是编辑图像的行业标准&#xff0c;但也有许多免费或廉价的应用程序和类似的工具。本文将为大家介绍一些Photoshop的替代品&#xff0c;包括在线应用程序和图形软件套件&#xff0c;它们都具有创建动态…

Android10打断动画,Android开发(10) 动画(Animation)

概述Android SDK介绍了两种Animation&#xff1a;Tween Animation&#xff1a;通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果&#xff0c;即是一种 渐变动画 &#xff0c;或者说 补间动画。Frame Animation&#xff1a;顺序播放事先做好的图像&#xff0c;是…

safari浏览器横屏怎么设置_如何避免苹果safari自带浏览器“跟踪”你的信息!

苹果自带的“safari浏览器”正在悄悄“追踪”你的信息&#xff0c;这样做可以有效避免你的隐私信息不被泄露。说起苹果设备自带的APP&#xff0c;毫无疑问safari浏览器是其中的代表之一&#xff0c;很多朋友由于习惯的原因&#xff0c;大多在使用苹果设备的时候选择下载一些第三…

自动提示_EXCEL2013版突然打不开,自动修复提示1907错误

由于系统升级或电脑进行修复操作&#xff0c;导致EXCEL突然打不开。office自动修复的时候提示错误1907。无法注册字体。请确认有足够的权限安装字体&#xff0c;并且系统支持此字体。解决方法一&#xff1a;直接点击忽略即可。一般点击一下忽略&#xff0c;它没有反应&#xff…

matlab去除图片水印_(水印去除技巧)3个在线图片水印去除网站,值得收藏

嗨&#xff01;大家好&#xff01;我是网罗小帅。很高兴和大家见面。今天是五一放假的第一天。有人说&#xff0c;新媒体人你不佩有五一假期。我太“南”了&#xff01;今天带来一波图片&#xff0c;视频去水印技巧干货神器。有时候我们看到一些漂亮的壁纸&#xff0c;但是别人…

android 软键盘遮住按钮,Android应用中出现软键盘遮挡住按钮如何解决

Android应用中出现软键盘遮挡住按钮如何解决发布时间&#xff1a;2020-11-20 16:25:47来源&#xff1a;亿速云阅读&#xff1a;110作者&#xff1a;LeahAndroid应用中出现软键盘遮挡住按钮如何解决&#xff1f;相信很多没有经验的人对此束手无策&#xff0c;为此本文总结了问题…