at91sam7se-ek-sdram.ini
上传用户:xukun0987
上传日期:2022-07-16
资源大小:216k
文件大小:8k
源码类别:

微处理器开发

开发平台:

C/C++

  1. // ----------------------------------------------------------------------------
  2. //         ATMEL Microcontroller Software Support 
  3. // ----------------------------------------------------------------------------
  4. // Copyright (c) 2008, Atmel Corporation
  5. //
  6. // All rights reserved.
  7. //
  8. // Redistribution and use in source and binary forms, with or without
  9. // modification, are permitted provided that the following conditions are met:
  10. //
  11. // - Redistributions of source code must retain the above copyright notice,
  12. // this list of conditions and the disclaimer below.
  13. //
  14. // Atmel's name may not be used to endorse or promote products derived from
  15. // this software without specific prior written permission.
  16. //
  17. // DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
  18. // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  19. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
  20. // DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
  21. // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  22. // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  23. // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  24. // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  25. // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  26. // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. // ----------------------------------------------------------------------------
  28. //----------------------------------------------------------------------------
  29. //  File Name           : at91sam7se-ek-sdram.ini
  30. //  Object              : Generic Macro File for KEIL
  31. //----------------------------------------------------------------------------
  32. //----------------------------------------------------------------------------
  33. // MapRAMAt0()
  34. // Function description: Maps RAM at 0.
  35. //----------------------------------------------------------------------------
  36. FUNC void MapRAMAt0(){
  37.     printf ("Changing mapping: RAM mapped to 0 n");
  38.     _WDWORD(0xFFFFFF00,0x00000001);
  39. }
  40. //----------------------------------------------------------------------------
  41. // initSDRAM()
  42. // Function description: Set SDRAM for works at 48 MHz
  43. //----------------------------------------------------------------------------
  44. FUNC void initSDRAM(){
  45. //  Enable clock on EBI pios
  46. //  pPMC->PMC_PCER = AT91C_EBI_CS1A_SDRAMC;
  47. //  PMC_PCER        ((AT91_REG *)  0xFFFFFC10) // (PMC_PCER) Peripheral Clock Enable Register
  48.     _WDWORD(0xFFFFFC10,0x0000001C);
  49. //*  Configure PIOs
  50.     _WDWORD(0xFFFFF470,0x00000000);
  51.     _WDWORD(0xFFFFF474,0x3F800000);
  52.     _WDWORD(0xFFFFF404,0x3F800000);
  53.     _WDWORD(0xFFFFF670,0x00000000);
  54.     _WDWORD(0xFFFFF674,0x0003FFFF);
  55.     _WDWORD(0xFFFFF604,0x0003FFFF);
  56.     _WDWORD(0xFFFFF870,0x0000FFFF);
  57.     _WDWORD(0xFFFFF874,0x00000000);
  58.     _WDWORD(0xFFFFF804,0x0000FFFF);
  59. //  Configure EBI Chip select
  60. //  pCCFG->CCFG_EBICSA |= AT91C_EBI_CS1A_SDRAMC;
  61. //  AT91C_CCFG_EBICSA ((AT91_REG *)  0xFFFFEF1C) // (CCFG)  EBI Chip Select Assignement Register
  62.     _WDWORD(0xFFFFFF80,0x02);
  63. //  psdrc->SDRC_CR =  AT91C_SDRAMC_NC_9  | AT91C_SDRAMC_NR_13 | AT91C_SDRAMC_CAS_2 |
  64. //  AT91C_SDRAMC_NB_4_BANKS | AT91C_SDRAMC_TWR_2 | AT91C_SDRAMC_TRC_4 |
  65. //  AT91C_SDRAMC_TRP_2 | AT91C_SDRAMC_TRCD_2 | AT91C_SDRAMC_TRAS_3 | AT91C_SDRAMC_TXSR_4 ;
  66.     _WDWORD(0xFFFFFFB8,0x21922159);
  67.     
  68.     _sleep_(20);
  69. // psdrc->SDRC_MR = 0x00000011;     // NOP CMD
  70.     _WDWORD(0xFFFFFFB0,0x00000011);
  71.     
  72. // *AT91C_SDRAM = 0x00000000;
  73.     _WDWORD(0x20000000,0x00000000);
  74. // psdrc->SDRC_MR = 0x00000012; // Perform PRCHG
  75.     _WDWORD(0xFFFFFFB0,0x00000012);
  76.     
  77. // *AT91C_SDRAM = 0x00000000;
  78.     _WDWORD(0x20000000,0x00000000);
  79.     _sleep_(20);
  80. // psdrc->SDRC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; // Set 1st CBR
  81.     _WDWORD(0xFFFFFFB0,0x0000014);
  82.     _WDWORD(0x20000000,0x00000000);
  83. // psdrc->SDRC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; // Set 1st CBR
  84.     _WDWORD(0xFFFFFFB0,0x0000014);
  85.     _WDWORD(0x20000000,0x00000000);
  86. // psdrc->SDRC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; // Set 1st CBR
  87.     _WDWORD(0xFFFFFFB0,0x0000014);
  88.     _WDWORD(0x20000000,0x00000000);
  89. // psdrc->SDRC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; // Set 1st CBR
  90.     _WDWORD(0xFFFFFFB0,0x0000014);
  91.     _WDWORD(0x20000000,0x00000000);
  92. // psdrc->SDRC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; // Set 1st CBR
  93.     _WDWORD(0xFFFFFFB0,0x0000014);
  94.     _WDWORD(0x20000000,0x00000000);
  95. // psdrc->SDRC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; // Set 1st CBR
  96.     _WDWORD(0xFFFFFFB0,0x0000014);
  97.     _WDWORD(0x20000000,0x00000000);
  98. // psdrc->SDRC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; // Set 1st CBR
  99.     _WDWORD(0xFFFFFFB0,0x0000014);
  100.     _WDWORD(0x20000000,0x00000000);
  101. //* psdrc->SDRC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; // Set 1st CBR
  102.     _WDWORD(0xFFFFFFB0,0x0000014);
  103.     _WDWORD(0x20000000,0x00000000);
  104. // psdrc->SDRC_MR = AT91C_SDRAMC_MODE_LMR_CMD; // Set LMR operation
  105.     _WDWORD(0xFFFFFFB0,0x00000013);
  106. // *(AT91C_SDRAM+0x20) = 0xcafedede; // Perform LMR burst=1, lat=2
  107.     _WDWORD(0x20000020,0xCAFEDEDE);
  108. // psdrc->SDRC_MR = AT91C_SDRAMC_MODE_NORMAL_CMD; // Set Normal mode
  109.     _WDWORD(0xFFFFFFB0,0x00000010);
  110. // psdrc->SDRC_TR = (AT91C_MASTER_CLOCK * 8)/1000000; // Set Refresh Timer 390 for 25MHz (TR= 15.6 * F )
  111. //                // (F : system clock freq. MHz
  112.     _WDWORD(0xFFFFFFB4,0x00000150);
  113. // *AT91C_SDRAM = 0x00000000; // Perform Normal mode
  114.     _WDWORD(0x20000000,0x00000000);
  115.     printf ("------------------------------- SDRAM Done at 48 MHz -------------------------------n");
  116. }
  117. //----------------------------------------------------------------------------
  118. // InitRSTC()
  119. // Function description
  120. //   Initializes the RSTC (Reset controller).
  121. //   This makes sense since the default is to not allow user resets, which makes it impossible to
  122. //   apply a second RESET via J-Link
  123. //----------------------------------------------------------------------------
  124. FUNC void InitRSTC() {
  125.     _WDWORD(0xFFFFFD08,0xA5000001);    // Allow user reset
  126. }
  127. //----------------------------------------------------------------------------
  128. // InitPLL()
  129. // Function description
  130. //   Initializes the PMC.
  131. //   1. Enable the Main Oscillator
  132. //   2. Configure PLL to 96MHz
  133. //   3. Switch Master Clock (MCK) on PLL/2 = 48MHz
  134. //----------------------------------------------------------------------------
  135. FUNC void InitPLL() {
  136.     printf( "Set Main Oscillator n");
  137.     _WDWORD(0xFFFFFC20,0x00004001);    // MOSC
  138.     while( !(_RDWORD(0xFFFFFC68) & 0x1)  );
  139. _sleep_(100);                       // Wait for stable Main Oscillator
  140.     printf( "Set PLL to 96MHz n");
  141.     _WDWORD(0xFFFFFC2C,0x1048100e);    // LOCK
  142.     while( !(_RDWORD(0xFFFFFC68) & 0x4)  );
  143. _sleep_(100);                       // Wait for stable Main Oscillator
  144.     printf( "Set Master Clock to 48MHz n ");
  145.     _WDWORD(0xFFFFFC30,0x00000004);    // MCKRDY
  146.     while( !(_RDWORD(0xFFFFFC68) & 0x8)  );
  147. _sleep_(100);                       // Wait for stable Main Oscillator    
  148.     _WDWORD(0xFFFFFC30,0x00000007);    // MCKRDY
  149.     while( !(_RDWORD(0xFFFFFC68) & 0x8)  );
  150. _sleep_(100);                       // Wait for stable Main Oscillator    
  151. }
  152. InitPLL();                         // Allow to load Code at JTAG Full Speed
  153. initSDRAM();                       // Init SDRAM before load
  154. MapRAMAt0();                       // Remap SRAM to address 0
  155. InitRSTC();                        // Enable User Reset to allow execUserReset() execution
  156. LOAD at91sam7se256-sdram\at91sam7se256-sdram.axf INCREMENTAL
  157. //LOAD at91sam7se512-sdram\at91sam7se512-sdram.axf INCREMENTAL
  158. //LOAD at91sam7se32-sdram\at91sam7se32-sdram.axf INCREMENTAL
  159. PC = 0x20000000;
  160. g,main