关闭

s3c2440 存储管理器

标签: c语言存储管理cpu
535人阅读 评论(0) 收藏 举报
分类:

1:存储管理器与CPU以及其他外设的关系


    我们从图中可以看出类内存的设备都与存储管理器相连接。那么CPU是怎么与类内存的外设相互访问呢。这中间是通过存储管理器。

CPU只负责发命令,由存储管理器来管理这些类内存的设备,那么存储管理器是怎么来管理这些类内存的设备的呢。

    首先jz2440地址空间分为8个bank,(bank0~bank7),每个bank对应(NGCS0~NGCS7),相应的位为低电平表示该bank选通,这样虽然地址线总共有27根,

但是总的地址空间可以达到1G。

S3C2440的bank相对应图如下:


  我们看到的地址空间是0x0-- 0x40000000,果然是1G,那么S3C2440的CPU是32位的,理论上可以访问的地址空间可以达到4G,还有一部分是CPU内部寄存器的地址

其余的一部分地址没有用,其中cpu的内部寄存器的地址都在:0x48000000-0x5fffffff之间。

那么如果想访问一个类内存的设备到底该怎么访问呢。那CPU该发什么地址呢。首先先根据NGCSn确定基地址,然后再加上访问的地址线就可以确定类内存设备的地址范围了。

比如:扩展串口为例子:

1:它选用NGCS5,基地址为0x28000000,

2:CPU的addr0~addr2连接到串口A0~A2, 所以访问空间是8字节,所以扩展串口A的访问地址为:0x28000000 ~ 0x28000007 扩展串口B的访问地址为:0x29000000 ~ 0x29000007


2: jZ2440SDRAM 为例:

1: 它选用NGCS6,基地址为0x30000000

2: CPU连接的地址线有15条,ADDR2~ADDR14,以及 ADDR24,ADDR25是bank选择信号,ADDR2~ADDR10为列地址信号,总共9列,所以相加总共22位地址线,所以每个bank总共是4M的空间,SDRAM每个空间单位是16位,每个SDRAM总共有4个bank,所以jz2440的SDRAM总共为4M*16*4*2 = 64M

SDRAM 逻辑构成图

LADDR24-LADDR25对应于4个L-BANK
  LADDR2-LADDR14对应于行地址和列地址,根据控制位来决定是行地址还是列地址,其中行地址13位,对应LADDR2-LADDR14,列地址9位,对应LADDR2-LADDR10,所以地址一共26位,即64M空间。
  那么为什么要空出LADDR0-LADDR1呢?因为SDRAM是32的,即一个地址对应着4个字节,而cpu每发出一个地址对应1个字节,所以cpu发出4个地址才能对应SDRAM的一个地址。
  我们jz2440上其它一些外部存储设备的地址空间我们就不一一分析了。

相关代码如下:


.equ      SDRAM_BASE,         0x30000000
.equ MEM_START_ADDR  0x0x48000000

.text
.global _start
_start:
        bl    watch_dog_close         //关闭看门狗
        bl  memsetup                        //设置初始化SDRAM
        bl  copy_steppingstone_to_sdram
        ldr pc, = on_sdram
on_sdram:
        ldr sp, = 0x34000000
        bl main
halt
        b halt_loop
        
        
        
watch_dog_close:
        mov r0, #0x0
        mov r1, #0x53000000
        str r0, [r1]
        mov pc, lr   返回


memsetup:
        mov r0 #MEM_START_ADDR        //存储控制器的13个寄存器的开始地址
        adr1 r1, mem_cfg_val            //这13个值的起始存储地址
        add r2, r0, #52                 //13*4 = 54
l:
      ldr r3, [r1], #4
      str r3, [r0], #4
      cmp r0, r2     
      bne 1b
      mov pc     lr
        
copy_steppingstone_to_sdram:
        @ 将Steppingstone的4K数据全部复制到SDRAM中去
    @ Steppingstone起始地址为0x00000000,SDRAM中起始地址为0x30000000
    mov r0, #0
    mov r1, #0x30000000
    mov r2, #1024*4
l:  
    ldr r3, r0, #4
    str r3, [r1], #4
        cmp r2, r0
        bne 1b
        mov pc lr
        
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
       








0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2428次
    • 积分:109
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档