sdram_cfg.h 1.8 KB

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