打印

** 有阿南版主手把手教 太羡慕了

[复制链接]
1946|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
新手额|  楼主 | 2008-12-4 23:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
S3C2440芯片

;存储器控制寄存器的定义区
    LTORG

SMRDATA DATA
; Memory configuration should be optimized for best performance
; The following parameter is not optimized.
; Memory access cycle parameter strategy
; 1) The memory settings is  safe parameters even at HCLK=75Mhz.
; 2) SDRAM refresh period is for HCLK<=75Mhz.

    DCD (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
    DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))   ;GCS0
    DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))   ;GCS1
    DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))   ;GCS2
    DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))   ;GCS3
    DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))   ;GCS4
    DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))   ;GCS5
    DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))    ;GCS6
    DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))    ;GCS7


看到它的汇编代码为
 SMRDATA
        0x00000424:    22111120     .."    DCD    571543840
        0x00000428:    00000700    ....    DCD    1792
        0x0000042c:    00000700    ....    DCD    1792
        0x00000430:    00000700    ....    DCD    1792
        0x00000434:    00000700    ....    DCD    1792
        0x00000438:    00000700    ....    DCD    1792

就比如第一条就是 DCD 0X22111120      按我的理解,就是在0x00000424这个地址位置初始化一块内存区域,区域中的值为0X22111120      
请问是不是这么理解。。

还有,不管是不是这样,这好像没有对存储器进行什么操作啊,初学,谢谢!

相关帖子

沙发
阿南| | 2008-12-5 09:08 | 只看该作者

可以这样理解

在启动代码中,会找到的,找一下:SMRDATA 

使用特权

评论回复
板凳
bigstrong| | 2008-12-5 09:19 | 只看该作者

关于DCD

0x00000424:    22111120     .."    DCD    571543840
这句代表在0x00000424这个位置放了一个数0x22111120,这个数后面会用到,具体使用方法要看调用这个数的地方,找一个哪个地方使用了SMRDATA这个标号。
可以理解这里是生成一个结构体,结构体的名字是SMRDATA,结构体的地址是0x00000424.

使用特权

评论回复
地板
playlinus| | 2008-12-5 16:34 | 只看该作者

同问...阿南能不能解释清楚点 ?

 ....

使用特权

评论回复
5
阿南| | 2008-12-5 23:59 | 只看该作者

摘自《ARM Linux入门与实践》:

5.3.6 初始化内存控制器
初始化内存控制器其实就是对S3C2410A的Memory Bank[7:0]进行设置,使其用CS[7:0]扩展的存储器或外部设备能够被处理器通过内存控制器正确的读写。由于S3C2410A的最终应用程序是在SDRAM(Bank6)中运行,以及C语言变量等的用户数据,各种模式的堆栈,中断向量表等都被定位在SDRAM的空间,所以它必须在涉及这些处理之前被完成初始化工作。
1.参数配置
;************************************************ 
; NAME    : MEMCFG.A
; DESC      : Memory bank configuration file
; Revision: 02.28.2002 ver 0.0
;************************************************
……
;BANK0CON 
B0_Tacs        EQU    0x0    ;0clk
B0_Tcos        EQU    0x0    ;0clk
B0_Tacc        EQU    0x7    ;14clk
B0_Tcoh        EQU    0x0    ;0clk
B0_Tah        EQU    0x0    ;0clk
B0_Tacp        EQU    0x0    
B0_PMC        EQU    0x0    ;normal
;Bank 6 parameter
B6_MT        EQU    0x3    ;SDRAM
;B6_Trcd        EQU    0x0    ;2clk
B6_Trcd        EQU    0x1    ;3clk
B6_SCAN        EQU    0x1    ;9bit
    ……
;REFRESH parameter
REFEN        EQU    0x1    ;Refresh enable
TREFMD        EQU    0x0    ;CBR(CAS before RAS)/Auto refresh
Trp             EQU    0x0    ;2clk
Trc             EQU    0x3    ;7clk
Tchr             EQU    0x2    ;3clk
REFCNT        EQU    1113    ;period=15.6us, HCLK=60Mhz, (2048+1-15.6*60)
    END
该部分的详细内容请参考memcfg.s文件,它直观的定义了内存控制器相关特殊寄存器的所有功能位的具体数值,当读者初次扩展一个外设或希望提高某个外设的读写速度时,就可以修改该文件的这些具体时序参数。
2.功能寄存器数值表的定义
SMRDATA DATA
; Memory configuration should be optimized for best performance 
; The following parameter is not optimized.                     
; Memory access cycle parameter strategy
; 1) The memory settings is  safe parameters even at HCLK=75Mhz.
; 2) SDRAM refresh period is for HCLK=75Mhz. 
DCD (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))   ;GCS0
DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))   ;GCS1 
DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))   ;GCS2
DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))   ;GCS3
DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))   ;GCS4
DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))   ;GCS5
DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))    ;GCS6
DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))    ;GCS7
DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)    
DCD 0x32            ;SCLK power saving mode, BANKSIZE 128M/128M
DCD 0x30            ;MRSR6 CL=3clk
DCD 0x30            ;MRSR7
这段程序的开始使用DATA伪操作指明SMRDATA标号处为一段数据,而非代码。接下来就都用DCD分配一个字的内存单元,且初始化成由memcfg.s文件中定义的参数运算得出的各寄存器值,共13个字(52字节)数据。
3.功能寄存器初始化
    ;Set memory control registers
        ldr    r0,=SMRDATA
    ldr    r1,=BWSCON    ;BWSCON Address
    add    r2, r0, #52    ;End address of SMRDATA
0       
    ldr    r3, [r0], #4    
    str    r3, [r1], #4    
    cmp    r2, r0        
    bne    %B0
这段代码就是将上节定义的功能寄存器数值表的数据依次传送给实践的内存控制器的每个特殊功能寄存器,以达到对它们的初始化目的。    

使用特权

评论回复
6
playlinus| | 2008-12-6 09:41 | 只看该作者

第二条中定义了一段data , 它是怎么实现 什么功能的 ?

2.功能寄存器数值表的定义
SMRDATA DATA
; Memory configuration should be optimized for best performance 
; The following parameter is not optimized.                     
; Memory access cycle parameter strategy
; 1) The memory settings is  safe parameters even at HCLK=75Mhz.
; 2) SDRAM refresh period is for HCLK=75Mhz. 
DCD (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))   ;GCS0
DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))   ;GCS1 
DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))   ;GCS2
DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))   ;GCS3
DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))   ;GCS4
DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))   ;GCS5
DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))    ;GCS6
DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))    ;GCS7
DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)    
DCD 0x32            ;SCLK power saving mode, BANKSIZE 128M/128M
DCD 0x30            ;MRSR6 CL=3clk
DCD 0x30            ;MRSR7
这段程序的开始使用DATA伪操作指明SMRDATA标号处为一段数据,而非代码。接下来就都用DCD分配一个字的内存单元,且初始化成由memcfg.s文件中定义的参数运算得出的各寄存器值,共13个字(52字节)数据。

这一段始终不能搞得很明白,定义一段data就实现了功能吗,实现了什么功能呢 ?

使用特权

评论回复
7
biehoff| | 2008-12-6 10:41 | 只看该作者

** 有阿南版主手把手教 太羡慕了

楼主你初始化代码没看完吧?

SMRDATA DATA

; 1) Even FP-DRAM, EDO setting has more late fetch point by half-clock
; 2) The memory settings,here, are made the safe parameters even at 66Mhz.
; 3) FP-DRAM Parameters:tRCD=3 for tRAC, tcas=2 for pad delay, tcp=2 for bus load.
; 4) DRAM refresh rate is for 40Mhz. 

;bank0    16bit BOOT ROM
;bank1    8bit NandFlash
;bank2    16bit IDE
;bank3    8bit UDB
;bank4    rtl8019
;bank5    8bit usb host
;bank6    16bit SDRAM
;bank7    16bit SDRAM
    [ BUSWIDTH=16
       DCD 0x11010101    ;Bank0=16bit BootRom(AT29C010A*2) :0x0 8bit usb host!][20:23]=0
    | ;BUSWIDTH=32
    DCD 0x22222220    ;Bank0=OM[1:0], Bank1~Bank7=32bit
    ]
    DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))    ;GCS0
    DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))    ;GCS1 
    DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))    ;GCS2
    DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))    ;GCS3
    DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))    ;GCS4
    DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))    ;GCS5
    [ BDRAMTYPE="DRAM" 
        DCD ((B6_MT<<15)+(B6_Trcd<<4)+(B6_Tcas<<3)+(B6_Tcp<<2)+(B6_CAN))    ;GCS6 check the MT value in parameter.a
        DCD ((B7_MT<<15)+(B7_Trcd<<4)+(B7_Tcas<<3)+(B7_Tcp<<2)+(B7_CAN))    ;GCS7
    | ;"SDRAM"
        DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))    ;GCS6
        DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))    ;GCS7
    ]
    DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)    ;REFRESH RFEN=1, TREFMD=0, trp=3clk, trc=5clk, tchr=3clk,count=1019
    DCD 0x10            ;SCLK power down mode, BANKSIZE 32M/32M
    DCD 0x20            ;MRSR6 CL=2clk
    DCD 0x20            ;MRSR7

看着有点象吗?这是44b0x的初始化 
自己在前面找找看 有没有一句

    ;****************************************************
    ;*    Set memory control registers                    *     
    ;****************************************************
    ldr        r0,=SMRDATA
    ldmia   r0,{r1-r13}
    ldr        r0,=0x01c80000  ;BWSCON Address
    stmia   r0,{r1-r13}

知道是干什么用的了吧·······

使用特权

评论回复
8
playlinus| | 2008-12-6 13:47 | 只看该作者

TKS biehoff

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

34

帖子

0

粉丝