前面我们实验的LED和串口程序,是cpu发送地址给特定的寄存器,在寄存器中写相应的位,达到控制要求。

第一类是GPIO门电路如LED,第二类是协议类如串口,这些都不是cpu直接给地址信息,而是通过寄存器来控制的。

第三类是内存接口,cpu发出的地址可以直接传递给这种设备如nor flash,sdram,网卡。注意nand flash不属于这种类型。

关于SDRAM,可以参考这篇文章,这对于了解sdram很重要,非常有必要阅读一波。

《高手进阶,终极内存技术指南(完整/进阶版)》

这篇文章能够让你了解sdram这个内存介质。

然后,查看2440的芯片资料:

2440已经有针对sdram的控制器,2440可以直接通过地址线和sdram通信。

关于寄存器方面的东西就不再贴出来了。需要注意的是,操作sdram还是比较繁琐的,时序要求需要根据2440手册和所对应的sdram芯片手册进行配置。

现在,我们开始编写程序。

void sdram_init(void)
{
BWSCON = 0x22000000; BANKCON6 = 0x18001;
BANKCON7 = 0x18001; REFRESH = 0x8404f5; BANKSIZE = 0xb1; MRSRB6 = 0x20;
MRSRB7 = 0x20;
} int sdram_test(void)
{
volatile unsigned char *p = (volatile unsigned char *)0x30000000;
int i; // write sdram
for (i = ; i < ; i++)
p[i] = 0x55; // read sdram
for (i = ; i < ; i++)
if (p[i] != 0x55)
return -; return ;
}

上面是sdram的初始化和测试,直接通过地址访问sdram,我们对sdram进行写入,并且再读出来,看看是否相等。这样可以测试是否成功配置sdram。

#include "s3c2440_soc.h"

#include "init.h"

int main(void)
{ sdram_init(); if (sdram_test() == )
led_test(); return ;
}

如果测试通过,返回0,led被点亮,屏蔽掉sdram初始化之后,led不会再闪烁。

昨天实验到这里的时候以为韦老大代码有bug,其实是由于下载器有时候保持一直连接会让新下载的程序无响应,可以拔下下载器或再重启单板就可以看到现象了。

需要注意的是,如同sdram 这样的内存,访问地址时加上volatile能够让你少点烦恼。。。

s3c2440内存控制器与SDRAM基本测试的更多相关文章

  1. S3C2440内存控制器详解

    S3C2440A Memory Map after Reset S3C2440的内存空间划分为不同的块,当CPU向内存控制器发出地址,内存控制器根据地址范围,发出对应片选信号到片选引脚,实现对不同设备 ...

  2. s3c2440裸机-内存控制器(五、SDRAM编程实现)

    配置内存控制器-SDRAM编程配置 2440内存控制器共有13个寄存器. BANK0--BANK5只需要设置BWSCON和BANKCONx(x为0-5)两个寄存器: BANK6.BANK7外接SDRA ...

  3. s3c2440裸机-内存控制器(一、内存控制器的原理)

    1.内存接口概念 S3C2440是个片上系统,有GPIO控制器(接有GPIO管脚(GPA-GPH)),有串口控制器 (接有TXD RXD引脚),有memory controller内存控制器,有Nan ...

  4. s3c2440裸机-内存控制器(二、不同位宽外设与CPU地址总线的连接)

    不同位宽设备的连接 black 我们先看一下2440芯片手册上外设rom是如何与CPU地址总线连接的. 8bit rom与CPU地址线的连接 8bit*2 rom与CPU地址线的连接 8bit*4 r ...

  5. s3c2440裸机-内存控制器(三、norflash初始化-时序设置)

    1.norflash与2440的硬件连接 2.初始化nor,配置nor时序 1.如图是S3C2440的内存控制器的可编程访问周期读写时序,里面的时间参数要根据外部设备的性能进行配置,这里先列出时间参数 ...

  6. s3c2440存储控制器详解

    从上图可知,外部内存类的设备与存储管理器相连,那么CPU是怎样访问到内存的呢?通过存储管理器.CPU比较单纯,只会按照指令执行,CPU只负责发出地址,怎样找到内存类设备呢?这些都交给存储管理器来管理. ...

  7. 存储控制器和SDRAM 实验

    S3C2440 存储控制器(memory controller)提供了訪问外部设备所需的信号,这是一种通过总线形式来訪问扩展的外设. S3C2440  的存储器控制器有下面的特性: 支持小字节序.大字 ...

  8. 回看《例说FPGA》---DDR2控制器集成与读写测试

    回看<例说FPGA> ---DDR2控制器集成与读写测试 1.DDR2 IP核的配置 需要弄清楚的选项主要有: PLL reference clock frequency Memory c ...

  9. APP的CPU,内存,耗电,流量测试工具

    APP的CPU,内存,耗电,流量测试工具下载地址,后续文章会介绍如何使用Emmagee.itest.gt APP应用的CPU,内存,耗电,流量调查 可和同类产品比较,使用GT等工具:CPU靠syste ...

随机推荐

  1. C语言学习笔记 (007) - 数组指针和通过指针引用数组元素的方法总结

    1.数组指针:即指向数组的指针 那么, 如何声明一个数组指针呢? ]; /*括号是必须写的,不然就是指针数组:10是数组的大小*/ 拓展:有指针类型元素的数组称为指针数组. 2.通过指针引用数组元素的 ...

  2. Sketch 使用中文字体

    对于刚接触 Sketch 的人来说,在找字体方面,可能不是那么顺手.之前用 RightFont,后来收费了.. 今天介绍个只有长得好看的人才能发现的功能.无需插件即可选择中文字体. 不信,你看: Sk ...

  3. 禁用gridview,listview回弹或下拉悬停

    不同的安卓厂商对ListView或ScrollView都做了一些动画效果,比如下拉时为了产生弹性美感而有大幅度回弹效果,再比如魅族的下拉悬停,有时做了一个下拉刷新的功能会与之冲突.其实该美化实为多此一 ...

  4. request.getRequestURI() 、request.getRequestURL() 、request.getContextPath()、request.getServletPath()区别

    request.getRequestURI() /jqueryWeb/resources/request.jsprequest.getRequestURL() http://localhost:808 ...

  5. golang学习笔记 ---dup

    对文件做拷贝.打印.搜索.排序.统计或类似事情的程序都有一个差不多的程序结构:一个处理输入的循环,在每个元素上执行计算处理,在处理的同时或最后产生输出.我们会展示一个名为 dup 的程序的三个版本 p ...

  6. freeswitch订阅会议相关通知

    一. freeswitch订阅会议相关通知 event plain CUSTOM conference::maintenance 这时会收到各种通知,会议创建.成员加入.成员离开.成员开始讲话,成员停 ...

  7. [转] linux(debian)安装USB无线网卡(tp-link TL-WN725N rtl8188eu )

    1: 台式机家里面不想再走线了. 于是去某东买了个USB无线网卡.tp的WN725N  USB,非常小, 和罗技的优联接收器差不多大. 2:  驱动能自己识别是不指望了,既然是usb网卡,插入USB后 ...

  8. 温故而知新 phpstudy 设置 nginx 代理

    nginx.conif 找到 server 关键字配置 server { listen ; server_name localhost; #charset koi8-r; #access_log lo ...

  9. SQL Server中判断字符串出现的位置及字符串截取

    首先建一张测试表: )); insert into teststring values ('张三,李四,王五,马六,萧十一,皇宫'); 1.判断字符串中某字符(字符串)出现的次数,第一次出现的位置最后 ...

  10. java 泛型中class<T> 和T的区别是什么?

    public <T> boolean edit(T entity) 和public <T> T get(Class<T> c, Serializable id)中这 ...