zoukankan      html  css  js  c++  java
  • 3rd.关于存储管理器

    简介 

     
        S3C2440要访问外部设备,需要通过存储控制器。
        具有以下特性(简要摘录几点):
        1.S3C2440对外引出ADDR0~ADDR26,27条地址线,即空间有128MB。
        2.同时,具有八根片选信号nGCS0~nGCS7,对应BANK0~BANK7
        3.BANK0~BANK5可外接ROM,SRAM等,BANK6-BANK7除此之外,还可以解SDRAM。
        4.还有其他一些信号控制线,不赘述。
     
       
        图为JZ2440开发板对应连接的外设。
     
    操作
     
         存储控制器有13个寄存器,BANK0~5只需要设置BWSCONBANKCONx(x=0~5)两个寄存器;BANK6和7,在外接SDRAM时,除了设置以上两个寄存器,还要设置REFRESH,BANKSIZE,MRSRB6,MRSRB7等4个寄存器。具体每个寄存器对应功能看数据手册即可。
        
        实例:操作SDRAM
     
        NANDFlash启动时,CPU会自动将NANDFlash开始的4KB复制到称之为“Steppingstone”的4KB的内部RAM(起始地址为0)。然后程序从地址0处开始执行。
     
        说明:
        例程中,使用汇编语言设置好存储控制器,设置SDRAM,然后把程序从Steppingstone中复制到SDRAM去,最后跳到SDRAM开始执行。
        
        所以这个程序包含两个文件,一个为head.S,leds.c,C文件是流水灯,S文件就是设置存储控制器。重点在于S文件。
     
     1 @*************************************************************************
     2 @ File:head.S
     3 @ 功能:设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行
     4 @*************************************************************************       
     5 
     6 .equ        MEM_CTL_BASE,       0x48000000
     7 .equ        SDRAM_BASE,         0x30000000
     8 
     9 .text
    10 .global _start
    11 _start:
    12     bl  disable_watch_dog               @ 关闭WATCHDOG,否则CPU会不断重启
    13     bl  memsetup                        @ 设置存储控制器
    14     bl  copy_steppingstone_to_sdram     @ 复制代码到SDRAM中
    15     ldr pc, =on_sdram                   @ 跳到SDRAM中继续执行
    16 on_sdram:
    17     ldr sp, =0x34000000                 @ 设置堆栈
    18     bl  main
    19 halt_loop:
    20     b   halt_loop
    21 
    22 disable_watch_dog:
    23     @ 往WATCHDOG寄存器写0即可
    24     mov r1,     #0x53000000
    25     mov r2,     #0x0
    26     str r2,     [r1]
    27     mov pc,     lr      @ 返回
    28 
    29 copy_steppingstone_to_sdram:
    30     @ 将Steppingstone的4K数据全部复制到SDRAM中去
    31     @ Steppingstone起始地址为0x00000000,SDRAM中起始地址为0x30000000
    32     
    33     mov r1, #0
    34     ldr r2, =SDRAM_BASE
    35     mov r3, #4*1024
    36 1:  
    37     ldr r4, [r1],#4     @ 从Steppingstone读取4字节的数据,并让源地址加4
    38     str r4, [r2],#4     @ 将此4字节的数据复制到SDRAM中,并让目地地址加4
    39     cmp r1, r3          @ 判断是否完成:源地址等于Steppingstone的未地址?
    40     bne 1b              @ 若没有复制完,继续
    41     mov pc,     lr      @ 返回
    42 
    43 memsetup:
    44     @ 设置存储控制器以便使用SDRAM等外设
    45 
    46     mov r1,     #MEM_CTL_BASE       @ 存储控制器的13个寄存器的开始地址
    47     adrl    r2, mem_cfg_val         @ 这13个值的起始存储地址
    48     add r3,     r1, #52             @ 13*4 = 54
    49 1:  
    50     ldr r4,     [r2], #4            @ 读取设置值,并让r2加4
    51     str r4,     [r1], #4            @ 将此值写入寄存器,并让r1加4
    52     cmp r1,     r3                  @ 判断是否设置完所有13个寄存器
    53     bne 1b                          @ 若没有写成,继续
    54     mov pc,     lr                  @ 返回
    55 
    56 
    57 .align 4
    58 mem_cfg_val:
    59     @ 存储控制器13个寄存器的设置值
    60     .long   0x22011110      @ BWSCON
    61     .long   0x00000700      @ BANKCON0
    62     .long   0x00000700      @ BANKCON1
    63     .long   0x00000700      @ BANKCON2
    64     .long   0x00000700      @ BANKCON3  
    65     .long   0x00000700      @ BANKCON4
    66     .long   0x00000700      @ BANKCON5
    67     .long   0x00018005      @ BANKCON6
    68     .long   0x00018005      @ BANKCON7
    69     .long   0x008C07A3      @ REFRESH
    70     .long   0x000000B1      @ BANKSIZE
    71     .long   0x00000030      @ MRSRB6
    72     .long   0x00000030      @ MRSRB7
    程序主要是4个步骤
    1. 关闭看门狗
    2. 设置存储器的相关寄存器
    3. 复制STEPPINGSTONE里的4K程序
    4. 跳转至SDRAM执行程序
     
     
    疑问:15行中 pc =on_sdram 即程序可以跳转到SDRAM中执行。无法理解,待解决。
        



  • 相关阅读:
    Best Time to Buy and Sell Stock III
    Valid Palindrome
    Longest Substring Without Repeating Characters
    Copy List with Random Pointer
    Add Two Numbers
    Recover Binary Search Tree
    Anagrams
    ZigZag Conversion
    Merge k Sorted Lists
    Distinct Subsequences
  • 原文地址:https://www.cnblogs.com/asam/p/6351837.html
Copyright © 2011-2022 走看看