微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S3C6410,Tiny6410,Mini6410,MoblieDDR内存驱动

S3C6410,Tiny6410,Mini6410,MoblieDDR内存驱动

时间:11-20 来源:互联网 点击:

  1. SREQU0x44
  2. INDEX_DMC_T_ESREQU0x48
  3. INDEX_DMC_MEMORY_CFG2EQU0x4C
  4. INDEX_DMC_CHIP_0_CFGEQU0x200
  5. INDEX_DMC_CHIP_1_CFGEQU0x204
  6. INDEX_DMC_CHIP_2_CFGEQU0x208
  7. INDEX_DMC_CHIP_3_CFGEQU0x20C
  8. INDEX_DMC_USER_STATUSEQU0x300
  9. INDEX_DMC_USER_CONFIGEQU0x304
  10. AREALOW_INIT,CODE,READONLY
  11. ENTRY
  12. EXPORTmem_init
  13. mem_init
  14. ldrr0,=MEM_SYS_CFG;Memorysussystemaddress0x7e00f120
  15. movr1,#0xd;Xm0CSn2=NFCONCS0设置NANDFlash为存储器
  16. strr1,[r0]
  17. ldrr0,=DMC1_BASE;DMC1baseaddress0x7e001000
  18. ;memc_cmd:010wakeup
  19. ;唤醒内存
  20. ldrr1,=0x04
  21. strr1,[r0,#INDEX_DMC_MEMC_CMD]
  22. ;Refreshperiod=((Startup_HCLK/1000*DDR_tREFRESH)-1)/1000000->DDR_tREFRESH7800ns
  23. ;HCLK=133MHz
  24. ;DDR内存规格规定,电容的电荷存储上限时间为64ms,而刷新操作每次是针对
  25. ;一行进行的,即每一行的刷新时间为64ms,而内存芯片中一定数量的行
  26. ;以L-Bank表示(见内存工作原理与物理特性),每个L-Bank有8192行(见内存硬件手册)
  27. ;因此对L-Bank的刷新操作应该在64ms/8192=7813us时间内进行一次
  28. ;而MDDR工作在133MHz时,其一个时钟周期为1/133M,那么一次L-Bank刷新
  29. ;时间需要7.8us/1/133M个时钟周期,即有下面的公式:
  30. ;Refresh_Count=tREFRESH*HCLK(MHz)/1000
  31. ;tREFRESH=7813HCLK=133Refresh_Count=1039
  32. ldrr1,=1039;DMC_DDR_REFRESH_PRD
  33. strr1,[r0,#INDEX_DMC_REFRESH_PRD]
  34. ;CAS_Latency=DDR_CASL<1->DDR_CASL3
  35. ldrr1,=6;DMC_DDR_CAS_LATENCY
  36. strr1,[r0,#INDEX_DMC_CAS_LATENCY]
  37. ;t_DQSS(clockcycles)
  38. ldrr1,=1;DMC_DDR_t_DQSS
  39. strr1,[r0,#INDEX_DMC_T_DQSS]
  40. ;T_MRD(clockcycles)
  41. ldrr1,=2;DMC_DDR_t_MRD
  42. strr1,[r0,#INDEX_DMC_T_MRD]
  43. ;T_RAS(clockcycles)
  44. ldrr1,=7;DMC_DDR_t_RAS
  45. strr1,[r0,#INDEX_DMC_T_RAS]
  46. ;T_RCActiveBankxtoActiveBankxdelay(clockcycles)
  47. ldrr1,=10;DMC_DDR_t_RC
  48. strr1,[r0,#INDEX_DMC_T_RC]
  49. ;T_RCDRAStoCADdelay(clockcycles)
  50. ldrr1,=4;DMC_DDR_t_RCD
  51. ldrr2,=8;DMC_DDR_schedule_RCD
  52. orrr1,r1,r2
  53. strr1,[r0,#INDEX_DMC_T_RCD]
  54. ;T_RFCAutoRefresh(clockcycles)
  55. ldrr1,=11;DMC_DDR_t_RFC
  56. ldrr2,=256;DMC_DDR_schedule_RFC
  57. orrr1,r1,r2
  58. strr1,[r0,#INDEX_DMC_T_RFC]
  59. ;T_RPPrechargetoRASdelay(clockcycles)
  60. ldrr1,=4;DMC_DDR_t_RP
  61. ldrr2,=8;DMC_DDR_schedule_RP
  62. orrr1,r1,r2
  63. strr1,[r0,#INDEX_DMC_T_RP]
  64. ;T_RRDActiveBankxtoActiveBankydelay(clockcycles)
  65. ldrr1,=3;DMC_DDR_t_RRD
  66. strr1,[r0,#INDEX_DMC_T_RRD]
  67. ;T_WRWritetoprechargedelay(clockcycles)
  68. ldrr1,=3;DMC_DDR_t_WR
  69. strr1,[r0,#INDEX_DMC_T_WR]
  70. ;T_WTRWritetoReaddelay(clockcycles)
  71. ldrr1,=2;DMC_DDR_t_WTR
  72. strr1,[r0,#INDEX_DMC_T_WTR]
  73. ;T_XPExitPowerdown(clockcycles)
  74. ldrr1,=2;DMC_DDR_t_XP
  75. strr1,[r0,#INDEX_DMC_T_XP]
  76. ;T_XSRExitselfrefresh(clockcycles)
  77. ldrr1,=17;DMC_DDR_t_XSR
  78. strr1,[r0,#INDEX_DMC_T_XSR]
  79. ;T_ESRSelfRefresh(clockcycles)
  80. ldrr1,=17;DMC_DDR_t_ESR
  81. strr1,[r0,#INDEX_DMC_T_ESR]
  82. ;MemoryConfigurationRegister
  83. ldrr1,=0x40010012;DMC1_MEM_CFG
  84. strr1,[r0,#INDEX_DMC_MEMORY_CFG]
  85. ldrr1,=0xb41;DMC1_MEM_CFG2
  86. strr1,[r0,#INDEX_DMC_MEMORY_CFG2]
  87. ldrr1,=0x150f8;DMC1_CHIP0_CFG
  88. strr1,[r0,#INDEX_DMC_CHIP_0_CFG]
  89. ldrr1,=0;DMC_DDR_32_CFG
  90. strr1,[r0,#INDEX_DMC_USER_CONFIG]
  91. ;ThefollowsisaccordingtotheDatasheetinitializationsequence
  92. ;DMC0DDRChip0configurationdirectcommandreg
  93. ldrr1,=0x0c0000;DMC_NOP0
  94. strr1,[r0,#INDEX_DMC_DIRECT_CMD]
  95. ;PrechargeAll
  96. ldrr1,=0;DMC_PA0
  97. strr1,[r0,#INDEX_DMC_DIRECT_CMD]
  98. ;AutoRefresh2time
  99. ldrr1,=0x40000;DMC_AR0
  100. strr1,[r0,#INDEX_DMC_DIRECT_CMD]
  101. strr1,[r0,#INDEX_DMC_DIRECT_CMD]
  102. ;MRS
  103. ldrr1,=0xa0000;DMC_mDDR_EMR0
  104. strr1,[r0,#INDEX_DMC_DIRECT_CMD]
  105. ;ModeReg
  106. ldrr1,=0x80032;DMC_mDDR_MR0
  107. strr1,[r0,#INDEX_DMC_DIRECT_CMD]
  108. ;EnableDMC1
  109. movr1,#0x0
  110. strr1,[r0,#INDEX_DMC_MEMC_CMD]
  111. check_dmc1_ready
  112. ldrr1,[r0,#INDEX_DMC_MEMC_STATUS]
  113. movr2,#0x3
  114. andr1,r1,r2
  115. cmpr1,#0x1
  116. bnecheck_dmc1_ready
  117. nop
  118. movpc,lr
  119. END


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top