转载理由:文中特大号字体部分有利于理解韦东山老师所给的sdram实验中的十三个寄存器的值的理解。
特点:
软件可编程的大小端模式;
地址空间:每个BANK可寻址128MB(总共8个BANK
1GB空间);
可编程的访问位宽:BANK0为16或32位,其他BANK为8或16或32位;
8个存储器BANK,其中6个用于ROM或者SRAM,2个用于ROM、SRAM或者SDRAM;
BANK0~BANK6的起始地址固定;
BANK7的起始地址和大小可编程;
所有存储器BANK的访问周期可编程;
外部wait信号可延长总线周期;
支持SDRAM的自刷新和掉电模式。
BANK0总线宽度由OM[1:0]引脚决定,当OM[1:0]=01时,booting
ROM datawidth是16位,当[1:0]=10时,booting ROM datawidth是32位,当OM[1:0]=00时,从NAND
FLASH启动。在友善之臂S3C2440开发板上,OM1引脚直接接地。
依据这张表,可以查找到SDRAM的BANK选择引脚连接方式,比如,我们使用的SDRAM是2片HYNIX的HY57V561620(L)T,它的规格是4*4M*16bit(使用两片是为了配置成32位的总线宽度),BANK大小是4M*16=64MB,总线宽度是32位,器件大小是4*BANK大小=256Mb,寄存器配置就是(4M*16*4B)*2,根据上面的表格,SDRAM上的BANK地址引脚(BA[1:0])与S3C2440的A[25:24]相连。
上表是寄存器控制地址总线连接方式,我们使用2片SDRAM配置成32位的总线宽度,所以SDRAM上的A[12:0]接到S3C2440的A[14:2]引脚。
具体的S3C2440与两片SDRAM接线方式如下图所示:
SDRAM的工作时序作为ARM工程师了解即可,具体的读写控制由CPU自带的控制寄存器完成,而作为FPGA工程师则需要详细了解SDRAM工作原理与时序,在此不再赘述。作为ARM工程师,最重要的是准确配置与SDRAM相关的寄存器。
在系统使用SDRAM之前,需要对S3C2440的存储器控制器进行初始化。其中对与SDRAM(Bank6)相关的寄存器进行了特殊的设置,以使SDRAM能够正常工作。由于C语言程序使用的数据空间和堆栈空间都定位在SDRAM上,因此,如果没有对SDRAM(Bank6)的正确初始化,系统就无法正确启动。下面介绍与SDRAM相关的寄存器设置。
1、 总线宽度&等待控制寄存器(BWSCON)0x48000000
在这个寄存器中,可以配置BANK1~BANK7的DW、WS、ST,DW决定了数据总线宽度;WS是等待状态是否使能,如果此位为1,WAIT信号可以用于延长nOE信号的有效时间;ST决定是否使用UB/LB(与SRAM相关)。此寄存器还可以读取(注意对Bank0只能读取不能写)BANK0的数据总线宽度。
对于SDRAM,只需要设置BANK6和BANK7的DW相关位,此处设置为32位。
BWSCON(0x48000000)=0x22xxxxxx,后面的24位设置和FLASH有关,一个例子是设置为0x22111120。
2、 BANK控制寄存器(BANKCONN)
BANK0~BANK5的控制寄存器相同,复位值均为0x0700。
包括对Tacs(nGCSn前的地址建立时间)、Tcos(nOE信号有效前的片选建立时间)、Tacc(访问周期,当WAIT使能时,Tacc必须大于等于4个时钟周期)、Tcoh(nOE后的片选保持时间)、Tcah(nGCSn后的地址保持时间)、Tacp(Page模式下的访问周期)、PMC(Page模式配置)。
BANK6、BANK7的控制寄存器相同。如果存储器类型为ROM或者SRAM,情况与BANK0~BANK5类似,如果存储器类型为SDRAM,则需要设置Trcd(RAS到CAS的延时)和SCAN(列地址位数),
根据我们使用的SDRAM以及S3C2440的HCLK(SDRAM时钟由系统的HCLK提供)时钟情况,Trcd取3个时钟,列地址位数是9,则BANKCON6(0x4800001C)=0x00018005,
BANKCON7(0x48000020)=0x00018005。
3、 SDRAM刷新控制寄存器(REFRESH)
包括REFEN位(刷新使能位),此位一般设置为1;TREFMD位(SDRAM刷新模式),初始值为0;Trp(SDRAM
RAS预充电时间),此位需要根据时钟HCLK与选用的SDRAM芯片决定,一般设置为2或3个时钟;Tsrc位(SDRAM半行周期时间),由Trc-Trp得到,Trc和Trp的值由时钟和SDRAM芯片决定;REFRESH
COUNTER位(SDRAM刷新计数值),刷新计数值=2^11+1-HCLK*SDRAM刷新时间(刷新时间参考S3C2440和SDRAM技术手册)。
4、 BANK SIZE寄存器(BANKSIZE)
BURST_EN位是ARM核突发模式使能位,设为0或1均可,为了提高效率,此处可以设为1;SCKE_EN,SDRAM掉电模式使能控制,设为1;SCLK_EN,设为1,SCLK仅在访问周期才被激活;BK76MAP,BANK6和BANK7的内存映射,我们使用2片4B*4M*16bit的SDRAM组成32位256MB存储器,而且BANK6和BANK7大小要相等,所以此处设为2,即128MB/128MB。BANKSIZE(0x48000028)=0x000000B2。
5、 SDRAM模式寄存器集合寄存器(MRSR)
WBL位,突发写长度,一般设为0,突发写长度固定;TM位,测试模式,一般设为00,模式寄存器集合(固定);CL位,CAS延时,根据SDRAM芯片和HCLK时钟计算;BT位,突发类型,一般设为0,连续的(固定);BL位,突发长度,一般设为000(固定的)。MRSR(0x4800002C)=0x00000030,(0x48000030)=0x00000030。
ARM9(S3C2440)的13个存储控制寄存器
2009-04-29 21:45
内存控制器地址,摘自三星技术手册: BWSCON 0x48000000 R/W Bus Width & Wait Status Control BWSCON,共32位: 31~28:BANK7 BANK7~BANK1设置一致 四位分别代表: BANK0比较特殊, 由此就得来了,这块板子上,0x22011110 BANKCON0~5(对应BANK 0~5,每个寄存器32位):保留值,写入0x00000700即可。 BANKCON6~7(对应BANK 6~7,每个寄存器32位): 31~17位,设为0 16~15,11表示BANKx接了SDRAM,00 SRAM,我的开发板BANK6接的是SRAM当然是11了 如果是SRAM就按照上面的000700就好了,如果是SDRAM,只需要设置3~0 3~2:CAS用几个周期,推荐为3个周期,01 REFRESH(32位,用于设定SDRAM的刷新): 10~0:就是刷新频率了~~ 计算公式,R_CNT=2^11+1-SDRAM时钟频率(Mhz)*SDRAM刷新周期(uS) HY那个手册上写到:8192个刷新周期用64ms,因此刷新周期=64000/8192=7.8125 因此计算出来就是1267.75,四舍五入1268->0x04f4 因此这个REFRESH取值是 0x008c04f4,简单计算方法就是0x008c0000 + 04f4 BANKSIZE(32为寄存器): 支持核突发,使用SCKE,仅在SDRAM期间发出SCLK,地址空间64Mb MRSRB6~7(SDRAM模式设置) 3个时钟周期,0x30 |
The S3C2410X has 117 multi-functionalinput/output port pins. The ports are:
— Port A (GPA): 23-output port
— Port B (GPB): 11-input/output port
— Port C (GPC): 16-input/output port
— Port D (GPD): 16-input/output port
— Port E (GPE): 16-input/output port
— Port F (GPF): 8-input/output port
— Port G (GPG): 16-input/output port
— Port H (GPH): 11-input/output port
---PORT A 23-output
GPACON 0x56000000
GPADAT 0x56000004
---PORT B 11-input/output
GPBCON 0x56000010
GPBDAT 0x56000014
GPBUP 0x56000018
---PORT C 16-input/output
GPCCON 0x56000020
GPCDAT 0x56000024
GPCUP 0x56000028
---PORT D 16-input/output
GPDCON 0x56000030
GPDDAT 0x56000034
GPDUP 0x56000038
---PORT E 16-input/output
GPECON 0x56000040
GPEDAT 0x56000044
GPEUP 0x56000048
---PORT F 8-input/output
GPFCON 0x56000050
GPFDAT 0x56000054
GPFUP 0x56000058
---PORT G 16-input/output
GPGCON 0x56000060
GPGDAT 0x56000064
GPGUP 0x56000068
---PORT H 11-input/output
GPHCON 0x56000070
GPHDAT 0x56000074
GPHUP 0x56000078
NAND 寄存器
2009-05-24 13:02
NFCONF 0x4E000000 R/W NAND Flash configuration [15] Enable/Disable After auto-boot, this bit is cleared to 0 automatically. NFCMD 0x4E000004 R/W NAND flash command set register NFADDR 0x4E000008 R/W NAND flash address set register NFDATA 0x4E00000C R/W NAND flash data register NFSTAT 0x4E000010 R NAND Flash operation status NFECC 0x4E000014 R NAND Flash ECC (Error Correction Code) register |
PWM Timer 寄存器
2009-05-24 16:59
PWM TIMER TCFG0 0x51000000 R/W Configures the two 8-bit prescalers TCFG0 0x51000000 R/W Configures the two 8-bit prescalers TCFG1 0x51000004 R/W 5-MUX & DMA mode selecton register TCON 0x51000008 R/W Timer control register TCNTB0 0x5100000C R/W Timer 0 count buffer register TCNTB1 0x51000018 R/W Timer 1 count buffer register TCNTB2 0x51000024 R/W Timer 2 count buffer register TCNTB3 0x51000030 R/W Timer 3 count buffer register TCNTB4 0x5100003C R/W Timer 4 count buffer register |
WATCHDOG TIMER
2009-05-24 18:35
WATCHDOG TIMER OVERVIEW t_watchdog = 1/[ PCLK / (Prescaler value + 1) / Division_factor ] Once the watchdog timer is enabled, the value of watchdog timer data (WTDAT) register cannot be automatically reloaded into the timer counter (WTCNT). When the S3C2440A is in debug mode using Embedded ICE, the watchdog timer must not operate. The WTCON register allows the user to enable/disable the watchdog timer, select the clock signal from 4 different sources, enable/disable interrupts, and enable/disable the watchdog timer output. The Watchdog timer WTCON 0x53000000 R/W Watchdog timer control register 0x8021 WTDAT 0x53000004 R/W Watchdog timer data register 0x8000 WTCNT 0x53000008 R/W Watchdog timer count register 0x8000 |
S3C2440 IO口寄存器地址
2009-05-10 00:26
S3C2440 IO口寄存器地址 GPACON:0x56000000,默认7FFFFF GPBCON:0x56000010,默认0x0 GPCCON 0x56000020 GPFCON 0x56000050 |