;************************************************
; NAME : MEMCFG.A
; DESC : Memory bank configuration file
; 这里主要配置的就是内存
; S3C2410的存储控制器有以下特性:
; 1. — Little/Big endian (selectable by a software) 大小端设置;
; 2. — Address space: 128Mbytes per bank (total 1GB/8 banks) 地址空间:每个bank为128MB (总共1GB);
; 3. — Programmable access size (8/16/32-bit) for all banks except bank0 (16/32-bit) 除了bank0其余所有banks的数据位宽是可编程的(8/16/32-bit);
; 4. — Total 8 memory banks 总共8个memory banks
; Six memory banks for ROM, SRAM, etc. 其中6个bank是接ROM,SRAM等
; Remaining two memory banks for ROM, SRAM, SDRAM, etc. 其余2个bank是接ROM,SRAM,SDRAM等
; 5. — Seven fixed memory bank start address 7个memory bank的起始地址是固定的;(发现size也是固定的,128MB)
; 6. — One flexible memory bank start address and programmable bank size 1个memory bank的起始地址和大小是可灵活可变的;
; 7. — Programmable access cycles for all memory banks 所有banks的访问周期数是可编程的;
; 8. — External wait to extend the bus cycles 支持片外等待信号以扩充总线周期;
; 9. — Supporting self-refresh and power down mode in SDRAM SDRAM在Power down模式下支持自动刷新.
; bank6和bank7的大小必须一样,并且bank7的起始地址根据bank6的大小不同而不同
;************************************************
BWSCON 是一个32位的register, 对应了BANK0-BANK7, 每个BANK使用4位。这4 位分别表示:
STx: 启动/禁止SDRAM的数据掩码引脚,对于SDRAM, 此位为0;对于SRAM, 此位为1。
WSx: 是否使用存储器的WAIT信号,通常设为0
DWx: 设置存储器的BUSWIDTH, 00=8-bit, 01=16-bit, 10=32-bit, 11=reserved
BANK0 对应的4位,是由硬件跳线决定,read-only
BANKCON0~BANKCON5 寄存器设置
Tacs: Address set-up time before nGCSn
Tcos: Chip selection set-up time before nOE
Tacc: Access cycle
Tcoh: Chip selection hold time after nOE
Tcah: Chip selection hold time after nOE
Tacp: Page mode access cycle @Page mode
PMC: Page mode configuration
注释:Tacs, Tcos, Tacc, Tcoh, Tcah, Tacp, PMC值是由存储器的datasheet决定的,里面有各时钟的极限值;顺便说说nWAIT引脚,WSn 是设定该管教是否起作用的,如果起作用必须将储存器(或者其他设备)相应的信号输入给nWAIT,如果年WAIT引脚没有用到时,必须接上,否则会将处理器琐死。
BANKCON6~BANKCON7 寄存器设置则不同,首先需要确定memory的type
MT: Determine the memory type
如果设置ROM或者 SRAM, 则设置Tacs, Tcos, Tacc, Tcoh, Tcah, Tacp, PMC
如果设置SDRAM, 则设置
Trcd: RAS to CAS delay
SCAN: Column address number
REFRESH寄存器,用于SDRAM refresh control register
另外,还有一段代码的用法学习一下:
ASSERT :DEF:BUSWIDTH
[ BUSWIDTH=16
B1_BWSCON EQU (DW16)
B2_BWSCON EQU (DW16)
B3_BWSCON EQU (DW16)
B4_BWSCON EQU (DW16+WAIT)
B5_BWSCON EQU (DW16)
B6_BWSCON EQU (DW16)
B7_BWSCON EQU (DW16)
;BUSWIDTH=32 ; 2440 EV board.
B1_BWSCON EQU (DW16) ; AMD flash(AM29LV160DB), 16-bit, for nCS1
B2_BWSCON EQU (DW16) ; PCMCIA(PD6710), 16-bit
B3_BWSCON EQU (DW16) ; Ethernet(CS8900), 16-bit
B4_BWSCON EQU (DW32) ; Intel Strata(28F128), 32-bit, for nCS4
B5_BWSCON EQU (DW16) ; A400/A410 Ext, 16-bit
B6_BWSCON EQU (DW32) ; SDRAM(K4S561632C) 32MBx2, 32-bit
B7_BWSCON EQU (DW32) ; N.C.
]
其中[ 条件 语句组 ] 当条件满足的时候执行下面语句组,否则不执行。差不多和#if条件编译差不多
[ FCLK=20000
M_MDIV EQU 0X20
M_PDIV EQU 0X4
M_SDIV EQU 0X2
] FCLK=20000时候执行[]语句
ASSERT 是断言伪指令,语法是:ASSERT +逻辑表达式
def 是逻辑伪操作符,格式为: :DEF:label,作用是:判断label是否定义过
ASSERT logical expression
对汇编程序的第二遍扫描中,如果其中ASSERT中条件不成立,ASSERT伪操作将报告该错误信息。