dramat91sam9261_ek.mac

来自「最新版IAR FOR ARM(EWARM)5.11中的代码例子」· MAC 代码 · 共 112 行

MAC
112
字号
setup()
{
  __var hold;
  
  // Disable WDT
  __writeMemory32(0x00008000,0xFFFFFD44,"Memory");  // AT91C_WDTC_WDMR = AT91C_WDTC_WDDIS
  // Init Main OSC
  __writeMemory32(0x00000601,0xFFFFFC20,"Memory");  // AT91C_CKGR_MOR = AT91C_CKGR_MOSCEN | (6 << 8)
  __sleep(10000);  // wait 10ms
  // Init PLLA
  __sleep(10000);  // wait 10ms
  // Configuration for a Quartz 18.432000 MHz
  // PLLA 200.9088 MHz MUL_PLLA = 109UL; DIV_PLLA = 10UL
  // 1MHz   <= PLL Input fequency   <= 32 MHz
  // 80MHz  <= PLL Output fequency  <= 200 MHz (CKGR_PLL is 00)
  // 190MHz <= PLL Output fequency  <= 240 MHz (CKGR_PLL is 10)
  __writeMemory32(0x206C860A,0xFFFFFC28,"Memory");  // AT91C_CKGR_PLLAR = (AT91C_CKGR_SRCA                         |\
                                                    //                     AT91C_CKGR_OUTA_2                       |\
                                                    //                    (AT91C_CKGR_DIVA & ( DIV_PLLA <<  0))    |\
                                                    //                    (AT91C_CKGR_MULA & ((MUL_PLLA-1) << 16)) |\
                                                    //                    (AT91C_CKGR_PLLACOUNT & (6 << 8)))  
  // Wait for PLL stabilization
  __sleep(10000);  // wait 10ms
  // Selection of Master Clock MCLK = PCLK/2
  __writeMemory32(0x00000102,0xFFFFFC30,"Memory");  // AT91C_PMC_MCKR = AT91C_PMC_CSS_PLLA_CLK | AT91C_PMC_MDIV_2
  // Wait until the master clock is established
  __sleep(10000);  // wait 10ms  
  // Init SDRAM contrller and memory
  __writeMemory32(0x0001003A,0xFFFFEE30,"Memory");  // AT91C_MATRIX_EBICSA = 0x1003A
  __writeMemory32(0xFFFF0000,0xFFFFF870,"Memory");  // AT91C_PIOC_ASR = AT91C_PC20_D20          |\                                                    
                                                    //                  AT91C_PC21_D21          |\
                                                    //                  AT91C_PC30_D30          |\
                                                    //                  AT91C_PC22_D22          |\
                                                    //                  AT91C_PC31_D31          |\
                                                    //                  AT91C_PC23_D23          |\
                                                    //                  AT91C_PC16_D16          |\
                                                    //                  AT91C_PC24_D24          |\
                                                    //                  AT91C_PC17_D17          |\
                                                    //                  AT91C_PC25_D25          |\
                                                    //                  AT91C_PC18_D18          |\
                                                    //                  AT91C_PC26_D26          |\
                                                    //                  AT91C_PC19_D19          |\
                                                    //                  AT91C_PC27_D27          |\
                                                    //                  AT91C_PC28_D28          |\
                                                    //                  AT91C_PC29_D29)         
  __writeMemory32(0xFFFF0000,0xFFFFF804,"Memory");  // AT91C_PIOC_PDR = AT91C_PC20_D20          |\                                                    
                                                    //                  AT91C_PC21_D21          |\
                                                    //                  AT91C_PC30_D30          |\
                                                    //                  AT91C_PC22_D22          |\
                                                    //                  AT91C_PC31_D31          |\
                                                    //                  AT91C_PC23_D23          |\
                                                    //                  AT91C_PC16_D16          |\
                                                    //                  AT91C_PC24_D24          |\
                                                    //                  AT91C_PC17_D17          |\
                                                    //                  AT91C_PC25_D25          |\
                                                    //                  AT91C_PC18_D18          |\
                                                    //                  AT91C_PC26_D26          |\
                                                    //                  AT91C_PC19_D19          |\
                                                    //                  AT91C_PC27_D27          |\
                                                    //                  AT91C_PC28_D28          |\
                                                    //                  AT91C_PC29_D29 
  __writeMemory32(0x85227259,0xFFFFEA08,"Memory");  // AT91C_SDRAMC_CR= AT91C_SDRAMC_NC_9       |\
                                                    //  						    AT91C_SDRAMC_NR_13      |\
                                                    //  						    AT91C_SDRAMC_CAS_2      |\
                                                    //  						    AT91C_SDRAMC_NB_4_BANKS |\
                                                    //  						    AT91C_SDRAMC_DBW_32_BITS|\
                                                    //  						    AT91C_SDRAMC_TWR_2      |\
                                                    //  						    AT91C_SDRAMC_TRC_7      |\
                                                    //						      AT91C_SDRAMC_TRP_2      |\
                                                    //  						    AT91C_SDRAMC_TRCD_2     |\
                                                    //  						    AT91C_SDRAMC_TRAS_5     |\
                                                    //  						    AT91C_SDRAMC_TXSR_8
  __sleep(100);  // wait 100us  
  __writeMemory32(0x00000002,0xFFFFEA00,"Memory");  // AT91C_SDRAMC_MR= AT91C_SDRAMC_MODE_PRCGALL_CMD
  __sleep(200);  // wait 200us  
  // x8
  __writeMemory32(0x00000004,0xFFFFEA00,"Memory");  // AT91C_SDRAMC_MR= AT91C_SDRAMC_MODE_RFSH_CMD
  __writeMemory32(0x00000004,0xFFFFEA00,"Memory");  // AT91C_SDRAMC_MR= AT91C_SDRAMC_MODE_RFSH_CMD
  __writeMemory32(0x00000004,0xFFFFEA00,"Memory");  // AT91C_SDRAMC_MR= AT91C_SDRAMC_MODE_RFSH_CMD
  __writeMemory32(0x00000004,0xFFFFEA00,"Memory");  // AT91C_SDRAMC_MR= AT91C_SDRAMC_MODE_RFSH_CMD
  __writeMemory32(0x00000004,0xFFFFEA00,"Memory");  // AT91C_SDRAMC_MR= AT91C_SDRAMC_MODE_RFSH_CMD
  __writeMemory32(0x00000004,0xFFFFEA00,"Memory");  // AT91C_SDRAMC_MR= AT91C_SDRAMC_MODE_RFSH_CMD
  __writeMemory32(0x00000004,0xFFFFEA00,"Memory");  // AT91C_SDRAMC_MR= AT91C_SDRAMC_MODE_RFSH_CMD
  __writeMemory32(0x00000004,0xFFFFEA00,"Memory");  // AT91C_SDRAMC_MR= AT91C_SDRAMC_MODE_RFSH_CMD

  __writeMemory32(0x00000003,0xFFFFEA00,"Memory");  // AT91C_SDRAMC_MR= AT91C_SDRAMC_MODE_LMR_CMD
  __writeMemory32(0xcafedede,0x20000000,"Memory");  // set SDRAM mode register
  __writeMemory32(700       ,0xFFFFEA04,"Memory");  // AT91C_SDRAMC_TR= 700
  __writeMemory32(0x00000000,0xFFFFEA00,"Memory");  // AT91C_SDRAMC_MR= AT91C_SDRAMC_MODE_NORMAL_CMD
  
  // ******************************************************
  // Test and set Remap
  // ******************************************************
  hold = __readMemory32(0x00000000,"Memory");
  __writeMemory32(0xAAAAAAAA,0x00000000,"Memory");
  if(__readMemory32(0x00000000,"Memory") != 0xAAAAAAAA)
  {
    __writeMemory32(0x03,0xFFFFEE00,"Memory");    // toggle remap bits
  }
  else
  {
    __writeMemory32(hold,0x00000000,"Memory");
  }  
}


execUserPreload()
{
  setup();
  __message("Target init macro complete");
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?