at91sam9260.gdb 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. #------------------------------------------------
  2. # SDRAM initialization script for the AT91SAM9260
  3. #------------------------------------------------
  4. #----------------------------------------------------------------------------
  5. # _InitRSTC()
  6. # Function description
  7. # Initializes the RSTC (Reset controller).
  8. # This makes sense since the default is to not allow user resets, which makes it impossible to
  9. # apply a second RESET via J-Link
  10. #----------------------------------------------------------------------------
  11. define _InitRSTC
  12. # Allow user reset
  13. set *0xFFFFFD08=0xA5000001
  14. end
  15. #----------------------------------------------------------------------------
  16. # _MapRAMAt0()
  17. # Function description: Maps RAM at 0.
  18. #----------------------------------------------------------------------------
  19. define _MapRAMAt0
  20. echo "---------- SRAM remapped to 0 --------" \n
  21. # Test and set Remap
  22. set $__mac_i = *0xFFFFEF00
  23. if ( (($__mac_i & 0x01) == 0) || (($__mac_i & 0x02) == 0))
  24. #toggle remap bits
  25. set *0xFFFFEF00 = 0x03
  26. else
  27. echo "---------- The Remap is done ---------" \n
  28. end
  29. end
  30. #----------------------------------------------------------------------------
  31. #
  32. # _PllSetting()
  33. # Function description
  34. # Initializes the PMC.
  35. # 1. Enable the Main Oscillator
  36. # 2. Configure PLL
  37. # 3. Switch Master
  38. #----------------------------------------------------------------------------
  39. define __PllSetting
  40. if ((*(0xFFFFFC30)&0x3) != 0 )
  41. # Disable all PMC interrupt ( $$ JPP)
  42. # AT91C_PMC_IDR ((AT91_REG *) 0xFFFFFC64) #(PMC) Interrupt Disable Register
  43. # pPmc->PMC_IDR = 0xFFFFFFFF;
  44. set *0xFFFFFC64 = 0xFFFFFFFF
  45. # AT91C_PMC_PCDR ((AT91_REG *) 0xFFFFFC14) #(PMC) Peripheral Clock Disable Register
  46. set *0xFFFFFC14 = 0xFFFFFFFF
  47. # Disable all clock only Processor clock is enabled.
  48. set *0xFFFFFC04 = 0xFFFFFFFE
  49. # AT91C_PMC_MCKR ((AT91_REG *) 0xFFFFFC30) # (PMC) Master Clock Register
  50. set *0xFFFFFC30 = 0x00000001
  51. while ((*0xFFFFFC68 & 0x8) == 0)
  52. end
  53. # write reset value to PLLA and PLLB
  54. # AT91C_PMC_PLLAR ((AT91_REG *) 0xFFFFFC28) # (PMC) PLL A Register
  55. set *0xFFFFFC28 = 0x00003F00
  56. # AT91C_PMC_PLLBR ((AT91_REG *) 0xFFFFFC2C) # (PMC) PLL B Register
  57. set *0xFFFFFC2C 0x00003F00
  58. while ((*0xFFFFFC68 & 0x2) == 0)
  59. end
  60. while ((*0xFFFFFC68 & 0x4) == 0)
  61. end
  62. echo "---------- PLL Enable ---------------" \n
  63. else
  64. echo "---------- Core in SLOW CLOCK mode ---" \n
  65. end
  66. end
  67. #----------------------------------------------------------------------------
  68. #
  69. # __PllSetting100MHz()
  70. # Function description
  71. # Set core at 200 MHz and MCK at 100 MHz
  72. #----------------------------------------------------------------------------
  73. define __PllSetting100MHz
  74. echo "---------- PLL Set at 100 MHz --------" \n
  75. #* pPmc->PMC_MOR = (( AT91C_CKGR_OSCOUNT & (0x40 <<8) | AT91C_CKGR_MOSCEN ));
  76. set *0xFFFFFC20=0x00004001
  77. while ((*0xFFFFFC68 & 0x1) == 0)
  78. end
  79. # AT91C_PMC_MCKR ((AT91_REG *) 0xFFFFFC30) # (PMC) Master Clock Register
  80. set *0xFFFFFC30=0x00000001
  81. while ((*0xFFFFFC68 & 0x8) == 0)
  82. end
  83. #* AT91C_BASE_CKGR->CKGR_PLLAR = (AT91C_CKGR_SRCA | ((96 << 16) & AT91C_CKGR_MULA) |
  84. # (AT91C_CKGR_PLLACOUNT | (AT91C_CKGR_OUTA_0 | (9);
  85. set *0xFFFFFC28=0x2060BF09
  86. while ((*0xFFFFFC68 & 0x2) == 0)
  87. end
  88. # Configure PLLB
  89. set *0xFFFFFC2C=0x207C3F0C
  90. while ((*0xFFFFFC68 & 0x4) == 0)
  91. end
  92. #* AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_CSS_PLLA_CLK | AT91C_PMC_PRES_CLK | AT91C_PMC_MDIV_2;;
  93. set *0xFFFFFC30=0x00000102
  94. while ((*0xFFFFFC68 & 0x8) == 0)
  95. end
  96. end
  97. #----------------------------------------------------------------------------
  98. # __initSDRAM()
  99. # Function description
  100. # Set SDRAM for works at 100 MHz
  101. #----------------------------------------------------------------------------
  102. define __initSDRAM
  103. # Configure EBI Chip select
  104. # pCCFG->CCFG_EBICSA |= AT91C_EBI_CS1A_SDRAMC;
  105. # AT91C_CCFG_EBICSA ((AT91_REG *) 0xFFFFEF1C) # (CCFG) EBI Chip Select Assignement Register
  106. set *0xFFFFEF1C=0x0001003A
  107. # Configure PIOs
  108. # AT91F_PIO_CfgPeriph( AT91C_BASE_PIOC, AT91C_PC16_D16 to AT91C_PC16_D31
  109. # pPio->PIO_ASR = periphAEnable; AT91C_PIOC_ASR ((AT91_REG *) 0xFFFFF870) # (PIOC) Select A Register
  110. # pPio->PIO_BSR = periphBEnable;AT91C_PIOC_BSR ((AT91_REG *) 0xFFFFF874) # (PIOC) Select B Register
  111. # pPio->PIO_PDR = (periphAEnable | periphBEnable # Set in Periph mode
  112. set *0xFFFFF870=0xFFFF0000
  113. set *0xFFFFF874=0x00000000
  114. set *0xFFFFF804=0xFFFF0000
  115. # psdrc->SDRAMC_CR = AT91C_SDRAMC_NC_9 | AT91C_SDRAMC_NR_13 | AT91C_SDRAMC_CAS_2 |
  116. # AT91C_SDRAMC_NB_4_BANKS | AT91C_SDRAMC_DBW_32_BITS | AT91C_SDRAMC_TWR_2 | AT91C_SDRAMC_TRC_7 |
  117. # AT91C_SDRAMC_TRP_2 | AT91C_SDRAMC_TRCD_2 | AT91C_SDRAMC_TRAS_5 | AT91C_SDRAMC_TXSR_8 ;
  118. set *0xFFFFEA08=0x85227259
  119. set $i = 0
  120. while $i != 100
  121. set $i += 1
  122. end
  123. # psdrc->SDRAMC_MR = 0x00000002; # Set PRCHG AL
  124. set *0xFFFFEA00=0x00000002
  125. # *AT91C_SDRAM = 0x00000000; # Perform PRCHG
  126. set *0x20000000=0x00000000
  127. set $i = 0
  128. while $i != 100
  129. set $i += 1
  130. end
  131. # psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; # Set 1st CBR
  132. set *0xFFFFEA00=0x00000004
  133. # *(AT91C_SDRAM+4) = 0x00000001; # Perform CBR
  134. set *0x20000010=0x00000001
  135. # psdrc->SDRAMC_MR = 0x00000004; # Set 2 CBR
  136. set *0xFFFFEA00=0x00000004
  137. # *(AT91C_SDRAM+8) = 0x00000002; # Perform CBR
  138. set *0x20000020=0x00000002
  139. # psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; # Set 3 CBR
  140. set *0xFFFFEA00=0x00000004
  141. # *(AT91C_SDRAM+0xc) = 0x00000003; # Perform CBR
  142. set *0x20000030=0x00000003
  143. # psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; # Set 4 CBR
  144. set *0xFFFFEA00=0x00000004
  145. # *(AT91C_SDRAM+0x10) = 0x00000004; # Perform CBR
  146. set *0x20000040=0x00000004
  147. # psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; # Set 5 CBR
  148. set *0xFFFFEA00=0x00000004
  149. # *(AT91C_SDRAM+0x14) = 0x00000005; # Perform CBR
  150. set *0x20000050=0x00000005
  151. # psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; # Set 6 CBR
  152. set *0xFFFFEA00=0x00000004
  153. # *(AT91C_SDRAM+0x18) = 0x00000006; # Perform CBR
  154. set *0x20000060=0x00000006
  155. # psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; # Set 7 CBR
  156. set *0xFFFFEA00=0x00000004
  157. # *(AT91C_SDRAM+0x1c) = 0x00000007; # Perform CBR
  158. set *0x20000070=0x00000007
  159. # psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; # Set 8 CBR
  160. set *0xFFFFEA00=0x00000004
  161. # *(AT91C_SDRAM+0x20) = 0x00000008; # Perform CBR
  162. set *0x20000080=0x00000008
  163. # psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_LMR_CMD; # Set LMR operation
  164. set *0xFFFFEA00=0x00000003
  165. # *(AT91C_SDRAM+0x24) = 0xcafedede; # Perform LMR burst=1, lat=2
  166. set *0x20000090=0xCAFEDEDE
  167. # psdrc->SDRAMC_TR = (AT91C_MASTER_CLOCK * 7)/1000000; # Set Refresh Timer 390 for 25MHz (TR= 15.6 * F )
  168. set *0xFFFFEA04=0x000002B9
  169. #* psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_NORMAL_CMD; # Set Normal mode
  170. set *0xFFFFEA00=0x00000000
  171. #* *AT91C_SDRAM = 0x00000000; # Perform Normal mode
  172. set *0x20000000=0x00000000
  173. echo "---------- SDRAM Done at 100 MHz -----" \n
  174. end
  175. # Step1: Connect to the J-Link gdb server
  176. define reset
  177. #target remote localhost:2331
  178. monitor reset
  179. # Step2: Reset peripheral (RSTC_CR)
  180. #Init PLL
  181. __PllSetting
  182. __PllSetting100MHz
  183. __initSDRAM
  184. #* Set the RAM memory at 0x0020 0000 & 0x0000 0000
  185. _MapRAMAt0
  186. _InitRSTC
  187. # Step3: Load file(eg. getting-started project)
  188. load
  189. mon reg pc=0x20000000
  190. #info reg
  191. end