微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > S3C2440-SDRAM

S3C2440-SDRAM

时间:03-25 来源:互联网 点击:
我板子的SDRAM是64M,从0x30000000"0x3fffffff,被BANK6选中。

//64MB     
// 0x30000000 " 0x30ffffff : Download Area (16MB) Cacheable      
// 0x31000000 " 0x33feffff : Non-Cacheable Area      
// 0x33ff0000 " 0x33ff47ff : Heap & RW Area      
// 0x33ff4800 " 0x33ff7fff : FIQ " User Stack Area      
// 0x33ff8000 " 0x33fffeff : Not Useed Area      
// 0x33ffff00 " 0x33ffffff : Exception & ISR Vector Table

我的开发板要求在0x32000000这个地址运行,也就是在Non-Cacheable Area这段内存区域。SDRAM内部是一个存储阵列,阵列就如同表格一样,将数据“填进去”。和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),就可以准确的找到所需要的存单元格,这就是SDRAM寻址的基本原理。这个单元格被成为存储单元,这个表格就是逻辑BANK(Logic Bank,下文称L-Bank),SDRAM一般含有4个L-Bank。SDRAM有13个控制寄存器。

BWSCON总线宽度与等待状态控制寄存器
BANKCON0"BANKCON7,BANK控制寄存器
REFRESH,刷新控制寄存器
BANKSIZE寄存器
MRSRB6,MRSRB7,模式寄存器集寄存器

下面完成一个程序让跑马灯程序在0x0地址运行,如果是Nandflash启动,也就是在steppingstone中运行,把它搬到SDRAM中运行。程序还是有问题有待于改进。

SADD  EQU 0x30000000
BWSCONS  EQU 0x48000000
        AREA |DATA|,CODE,READONLY
        ENTRY
        IMPORT LedMain
        bl disableWTD
        bl initmem
        bl Copy_Sdram
        ldr pc,=on_sdram
        
on_sdram
        ldr sp,=0x34000000
        bl LedMain
disableWTD
        mov r1,#0x53000000
        mov r2,#0
        str r2,[r1]
        mov pc,lr
        
initmem
        ldr r1,=SDRAM_add
        ldr r2,=BWSCONS
        add r3,r2,#52
cp1
        ldr r4,[r1],#4
        str r4,[r2],#4
        cmp r2,r3
        bne cp1
        mov pc,lr
        
Copy_Sdram
        mov r1,#0
        add r2,r1,#4096
        ldr r4,=SADD
cp2        
        ldr r3,[r1],#4
        str r3,[r4],#4        
        cmp r1,r2
        bne cp2
        mov pc,lr
        
        ALIGN 4
        
SDRAM_add
        DCD 0x22011110    ;BWSCON
          DCD 0x00000700    ;BANKCON0
          DCD 0x00000700    ;BANKCON1
          DCD 0x00000700    ;BANKCON2
          DCD 0x00000700    ;BANKCON3
          DCD 0x00000700    ;BANKCON4
    DCD 0x00000700    ;BANKCON5
          DCD 0x00018005    ;BANKCON6
          DCD 0x00018005    ;BANKCON7
          DCD 0x008c07a3    ;REFRESH
          DCD 0x000000b1    ;BANKSIZE
    DCD 0x00000030    ;MRSRB6
        DCD 0x00000030    ;MRSRB7
        
        END
        

#define GPFCON (*(volatile unsigned *)0x56000050)
#define GPFDAT (*(volatile unsigned *)0x56000054)
#define GPFUP (*(volatile unsigned *)0x56000058)
int LedMain()
{
        
        void Delay(unsigned int);
        unsigned char ledtab[]={0xf7,0xef,0xdf,0xbf};
        int i;
        GPFUP&=0XFFFFFF87;       //使能上拉F3-6
        GPFCON&=0XC03f;
        GPFCON|=0X1540;          //将F3-6设为输出口
        while(1)
        {
                for(i=0;i<4;i++)
                {
                        GPFDAT=ledtab[ i];
                        Delay(670);
                }
        }
        return(0);
        
}

void Delay(unsigned int x )
{
        unsigned int i,j,k;
        for(i=0;i<=x;i++)
                for(j=0;j<=0xff;j++)
                        for(k=0;k<=0xff;k++);
}

李万鹏

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top