at91cap9-dk-ddram.gdb
上传用户:jnhtjd
上传日期:2022-07-16
资源大小:403k
文件大小:3k
源码类别:

微处理器开发

开发平台:

C/C++

  1. # SDRAM initialization script for the AT91CAP9-DK
  2. #------------------------------------------------
  3. # Configure master clock
  4. echo Configuring the master clock...n
  5. # Enable main oscillator
  6. set *0xFFFFFC20 = 0x00004001
  7. while ((*0xFFFFFC68 & 0x1) == 0)
  8. end
  9. # set PLLA to 200MHz
  10. set *0xFFFFFC28 = 0x2031BF03
  11. while ((*0xFFFFFC68 & 0x2) == 0)
  12. end
  13. # Select prescaler
  14. set *0xFFFFFC30 = 0x00000100
  15. while ((*0xFFFFFC68 & 0x8) == 0)
  16. end
  17. # Select master clock
  18. set *0xFFFFFC30 = 0x00000102
  19. while ((*0xFFFFFC68 & 0x8) == 0)
  20. end
  21. echo Master clock ok.n
  22. echo Configuring the DDRAM controller...n
  23. # AT91C_BASE_PMC->PMC_SCER = (0x1 << 2);
  24. set *0xFFFFFC00 = 0x00000002
  25. # Ensure that Matrix is connected to enable fetch Data & PDC
  26. set *0xFFFFEB00 = 0x00000007
  27.   
  28. # First, enable the clock of the PIO / Enable PIO A B C D
  29. set *0xFFFFFC00 = 0x00000085
  30. #------------------------------------------------------------------------------------
  31. # Memory Device Register 
  32. # Mobile DDRAM type | 16bit MODE
  33. # ddrc->SDDRC_MDR  = 0x00000013;
  34. set *0xFFFFE61C = 0x00000013   
  35.    
  36. # Configuration Register
  37. # Weak driver strength(1) | Disable DLL reset(0) | SDRAM CAS = 3 | row = 13 | column = 9
  38. # ddrc->SDDRC_CR   = 0x00000138;  
  39. set *0xFFFFE608 = 0x00000138
  40.       
  41. # Timing 0 Parameter Register
  42. # tmrd = 2 | twtr = 1 | trrd = 2 | trrd = 2 | trp = 3 | trc = 8 | twr = 2 | trcd = 3 | tras = 5   
  43. # ddrc->SDDRC_T0PR = 0x21238235;
  44. set *0xFFFFE60C = 0x21238235
  45.       
  46. # Timing 1 Parameter Register
  47. # txp = 4 | txsrd = 0xC | txsnr = 0xC | trfc = 9
  48. # ddrc->SDDRC_T1PR = 0x040C0C09;
  49. set *0xFFFFE610 = 0x040D0D09
  50.    
  51. # Low-power Register   
  52. # Low power register => Low-power is inhibited
  53. # all bank refresh during self refresh (PASR = b000)   
  54. # ddrc->SDDRC_LPR  = 0x00000000; 
  55. set *0xFFFFE618 = 0x00000000
  56. #------------------------------------------------------------------------------------
  57. # NOP command
  58. # ddrc->SDDRC_MR = 0x00000001; 
  59. set *0xFFFFE600 = 0x00000001
  60. set *0x70000000 = 0x00000000
  61. # Precharge All Banks command
  62. # ddrc->SDDRC_MR = 0x00000002;  
  63. set *0xFFFFE600 = 0x00000002
  64. set *0x70000000 = 0x00000000 
  65.    
  66. # AutoRefresh command
  67. # ddrc->SDDRC_MR = 0x00000004;  
  68. set *0xFFFFE600 = 0x00000004
  69. set *0x70000000 = 0x00000000
  70.    
  71. # AutoRefresh command
  72. # ddrc->SDDRC_MR = 0x00000004;   
  73. set *0xFFFFE600 = 0x00000004
  74. set *0x70000000 = 0x00000000
  75. #----------------------------------------------------------------------------------
  76. # Mode Register Set command
  77. # ddrc->SDDRC_MR = 0x00000003;
  78. set *0xFFFFE600 = 0x00000003
  79. set *0x70000000 = 0x00000000
  80.    
  81. # Extended Mode Register Set command
  82. # ddrc->SDDRC_MR = 0x00000005;   
  83. set *0xFFFFE600 = 0x00000005
  84. set *0x100000 = *0x71000000
  85.    
  86. # Set Normal mode
  87. # ddrc->SDDRC_MR = 0x00000000;
  88. set *0xFFFFE600 = 0x00000000
  89. set *0x100000 = *0x70000000
  90. set *0x70000000 = 0x00000000
  91.    
  92. # Set Refresh Timer : ((64 x 10^-3)/8192) x 48 x 10^6   --->  375 for 48 MHz
  93. # Set Refresh Timer : ((64 x 10^-3)/8192) x 100 x 10^6   --->  781 for 100 MHz   
  94. set *0xFFFFE604 = 0x0000044C
  95.    
  96. # High speed register : Optimization is enabled
  97. set *0xFFFFE614 = 0x00000000
  98. echo DDRAM configuration ok.n