S3C2440-SDRAM

发布时间:2011-3-25 14:27    发布者:techshare
关键词: S3C2440 , SDRAM
我板子的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++);
}

李万鹏
本文地址:https://www.eechina.com/thread-59917-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

  • Microchip视频专区
  • 利用模拟开发工具生态系统进行安全电路设计
  • Cortex-M4外设 —— TC&TCC结合事件系统&DMA优化任务培训教程
  • 你仿真过吗?使用免费的MPLAB Mindi模拟仿真器降低设计风险
  • 更佳设计的解决方案——Microchip模拟开发生态系统
  • 贸泽电子(Mouser)专区
关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表