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