Chinaunix首页 | 论坛 | 博客
  • 博客访问: 213728
  • 博文数量: 48
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 258
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-22 23:45
文章分类

全部博文(48)

文章存档

2015年(4)

2014年(34)

2013年(10)

分类: 嵌入式

2013-09-14 00:33:28

原文地址:ARM硬件基础之三 作者:archer239915

前面的两篇对内存和整体架构进行了说明,所以这篇专门对S3C6410这个SOC芯片的关键部分说明,主要面对是为了编写程序。
ARM硬件基础之二一定要先弄懂,很重要。如果你用FPGA自己搭建过SOC,那肯定懂了。主要就是cpu的总线连接很多控制器,为每个控制器分配一定区域的内存。这就是总线地址,一般物理地址等于总线地址。比如uart控制器有8个32位的的寄存器,那么说明总线给uart控制器分配的内存为32字节,至于开始地址由总线决定。我们就是对这32字节的内存读写,控制uart控制器,进而控制外部链接的uart设备。

下面是smdk6410的设备链接示意图,注意一般控制器都是上面的那个样子,但是两个mem port比较特殊一些。

我们可以看到除了Memory Port0和Memory Port1这两个比较特殊的控制器,全部的控制器都是由总线分配的内存(即寄存器)读写来进行
控制的,比如lcd,uart,usb,上面的都是这样。对于这些,给它时钟和选择对应的gpio功能再读写寄存器就可以了。
但是Memory Port0和Memory Port1是系统的submemory system,其实这两个也是控制器,只不过外接的不是设备,而又是控制器。
比如Memory Port1接的就是SDRAM控制器,Memory Port0可以接的有nand flash控制器,onenand控制器,srom控制器,cf卡控制器,
网卡控制器DM9000等。这些控制器再去外接设备。
那么比如Memory Port0的六个bank如何确定各是接的什么控制器呢?
首先硬件上假设把cs2接nand flash片选,还要在软件上设置cs2的这个bank接的是nand flash控制器,那么就相当于nand flash控制器被总线
映射到bank2的地址范围了。所以memory port0就是为了用户方便,自己选择需要的控制器,而且还减少了引脚线,因为data和address线
六个bank都可以共用。


假设手上有一个硬件已经连接好的smdk6410开发板,首先要做哪些设置呢?
1. 选择时钟源,设定分频,为需要用的控制器设定时钟并打开gate。
2. 设置boot device,例如从nand flash启动。
3. 设置memory port0,即为每个bank选择需要的控制器,比如把bank2分配给nand flash控制器。
4. 设置memory port1,即SDRAM控制器。
5. 这样后,每个控制器都分配地址就绪,再选好相应的gpio功能。
6. 接下来就读写这些控制器的寄存器进行设备的控制。











阅读(1736) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~