xref: /nrf52832-nimble/rt-thread/libcpu/mips/loongson_1c/sdram_cfg.h (revision 104654410c56c573564690304ae786df310c91fc)
1 
2 #ifndef __OPENLOONGSON_SDRAM_CFG_H
3 #define __OPENLOONGSON_SDRAM_CFG_H
4 
5 
6 //#define	SD_FREQ	(6 * PLL_M) / (2 * SDRAM_PARAM_DIV_NUM)
7 #define	SD_FREQ	(((APB_CLK / 4) * (PLL_MULT / CPU_DIV)) / SDRAM_PARAM_DIV_NUM)
8 
9 
10 /* 颗粒行数 */
11 #define	ROW_1K		0x7
12 #define	ROW_2K		0x0
13 #define	ROW_4K		0x1
14 #define	ROW_8K		0x2
15 #define	ROW_16K		0x3
16 /* 颗粒列数 */
17 #define	COL_256		0x7
18 #define	COL_512		0x0
19 #define	COL_1K		0x1
20 #define	COL_2K		0x2
21 #define	COL_4K		0x3
22 /* 颗粒位宽 */
23 #define	WIDTH_8		0x0
24 #define	WIDTH_16	0x1
25 #define	WIDTH_32	0x2
26 
27 #define	TRCD		3
28 #define	TCL			3
29 #define	TRP			3
30 #define	TRFC		8
31 #define	TRAS		6
32 #define	TREF		0x818
33 #define	TWR			2
34 
35 #define	DEF_SEL		0x1
36 #define	DEF_SEL_N	0x0
37 #define	HANG_UP		0x1
38 #define	HANG_UP_N	0x0
39 #define	CFG_VALID	0x1
40 
41 
42 #if 0
43 // 白菜板8MB
44 /*
45     以型号为IS42S16400的SDRAM为例,
46     物理参数为,
47     容量:8MB
48     位宽:16位
49     列宽:8位,即2的8次方,即256
50     行宽:12位,即2的12次方,即4K
51 
52     所以,
53     颗粒的位宽=WIDTH_16
54     颗粒的列数=COL_256
55     颗粒的行数=ROW_4K
56 
57     再结合宏SD_PARA0和芯片手册中寄存器SD_CONFIG,相信一看就能明白
58     替换宏SD_PARA0中的行宽、列宽和位宽
59 */
60 #define SDRAM_WIDTH         (WIDTH_16)
61 #define SDRAM_COL           (COL_256)
62 #define SDRAM_ROW           (ROW_4K)
63 
64 #else
65 
66 // 智龙32MByte
67 #define SDRAM_WIDTH         (WIDTH_16)
68 #define SDRAM_COL           (COL_512)
69 #define SDRAM_ROW           (ROW_8K)
70 
71 #endif
72 
73 #define	SD_PARA0	(0x7f<<25 | \
74 					(TRAS << 21) | \
75 					(TRFC << 17) | (TRP << 14) | (TCL << 11) | \
76 					(TRCD << 8) | (SDRAM_WIDTH << 6) | (SDRAM_COL << 3) | \
77 					SDRAM_ROW)
78 
79 #define	SD_PARA1	((HANG_UP_N << 8) | (DEF_SEL_N << 7) | (TWR << 5) | (TREF >> 7))
80 
81 #define	SD_PARA1_EN	((CFG_VALID << 9) | (HANG_UP_N << 8) | \
82 					(DEF_SEL_N << 7) | (TWR << 5) | (TREF >> 7))
83 
84 
85 #endif
86