123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- #------------------------------------------------
- # SDRAM initialization script for the AT91SAM9260
- #------------------------------------------------
- #----------------------------------------------------------------------------
- # _InitRSTC()
- # Function description
- # Initializes the RSTC (Reset controller).
- # This makes sense since the default is to not allow user resets, which makes it impossible to
- # apply a second RESET via J-Link
- #----------------------------------------------------------------------------
- define _InitRSTC
- # Allow user reset
- set *0xFFFFFD08=0xA5000001
- end
- #----------------------------------------------------------------------------
- # _MapRAMAt0()
- # Function description: Maps RAM at 0.
- #----------------------------------------------------------------------------
- define _MapRAMAt0
- echo "---------- SRAM remapped to 0 --------" \n
- # Test and set Remap
- set $__mac_i = *0xFFFFEF00
- if ( (($__mac_i & 0x01) == 0) || (($__mac_i & 0x02) == 0))
- #toggle remap bits
- set *0xFFFFEF00 = 0x03
- else
- echo "---------- The Remap is done ---------" \n
- end
- end
- #----------------------------------------------------------------------------
- #
- # _PllSetting()
- # Function description
- # Initializes the PMC.
- # 1. Enable the Main Oscillator
- # 2. Configure PLL
- # 3. Switch Master
- #----------------------------------------------------------------------------
- define __PllSetting
- if ((*(0xFFFFFC30)&0x3) != 0 )
- # Disable all PMC interrupt ( $$ JPP)
- # AT91C_PMC_IDR ((AT91_REG *) 0xFFFFFC64) #(PMC) Interrupt Disable Register
- # pPmc->PMC_IDR = 0xFFFFFFFF;
- set *0xFFFFFC64 = 0xFFFFFFFF
- # AT91C_PMC_PCDR ((AT91_REG *) 0xFFFFFC14) #(PMC) Peripheral Clock Disable Register
- set *0xFFFFFC14 = 0xFFFFFFFF
- # Disable all clock only Processor clock is enabled.
- set *0xFFFFFC04 = 0xFFFFFFFE
- # AT91C_PMC_MCKR ((AT91_REG *) 0xFFFFFC30) # (PMC) Master Clock Register
- set *0xFFFFFC30 = 0x00000001
- while ((*0xFFFFFC68 & 0x8) == 0)
- end
-
- # write reset value to PLLA and PLLB
- # AT91C_PMC_PLLAR ((AT91_REG *) 0xFFFFFC28) # (PMC) PLL A Register
- set *0xFFFFFC28 = 0x00003F00
-
- # AT91C_PMC_PLLBR ((AT91_REG *) 0xFFFFFC2C) # (PMC) PLL B Register
- set *0xFFFFFC2C 0x00003F00
- while ((*0xFFFFFC68 & 0x2) == 0)
- end
- while ((*0xFFFFFC68 & 0x4) == 0)
- end
-
- echo "---------- PLL Enable ---------------" \n
-
- else
- echo "---------- Core in SLOW CLOCK mode ---" \n
- end
- end
- #----------------------------------------------------------------------------
- #
- # __PllSetting100MHz()
- # Function description
- # Set core at 200 MHz and MCK at 100 MHz
- #----------------------------------------------------------------------------
- define __PllSetting100MHz
- echo "---------- PLL Set at 100 MHz --------" \n
- #* pPmc->PMC_MOR = (( AT91C_CKGR_OSCOUNT & (0x40 <<8) | AT91C_CKGR_MOSCEN ));
- set *0xFFFFFC20=0x00004001
- while ((*0xFFFFFC68 & 0x1) == 0)
- end
- # AT91C_PMC_MCKR ((AT91_REG *) 0xFFFFFC30) # (PMC) Master Clock Register
- set *0xFFFFFC30=0x00000001
- while ((*0xFFFFFC68 & 0x8) == 0)
- end
- #* AT91C_BASE_CKGR->CKGR_PLLAR = (AT91C_CKGR_SRCA | ((96 << 16) & AT91C_CKGR_MULA) |
- # (AT91C_CKGR_PLLACOUNT | (AT91C_CKGR_OUTA_0 | (9);
- set *0xFFFFFC28=0x2060BF09
- while ((*0xFFFFFC68 & 0x2) == 0)
- end
- # Configure PLLB
- set *0xFFFFFC2C=0x207C3F0C
- while ((*0xFFFFFC68 & 0x4) == 0)
- end
- #* AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_CSS_PLLA_CLK | AT91C_PMC_PRES_CLK | AT91C_PMC_MDIV_2;;
- set *0xFFFFFC30=0x00000102
- while ((*0xFFFFFC68 & 0x8) == 0)
- end
- end
- #----------------------------------------------------------------------------
- # __initSDRAM()
- # Function description
- # Set SDRAM for works at 100 MHz
- #----------------------------------------------------------------------------
- define __initSDRAM
- # Configure EBI Chip select
- # pCCFG->CCFG_EBICSA |= AT91C_EBI_CS1A_SDRAMC;
- # AT91C_CCFG_EBICSA ((AT91_REG *) 0xFFFFEF1C) # (CCFG) EBI Chip Select Assignement Register
- set *0xFFFFEF1C=0x0001003A
-
- # Configure PIOs
- # AT91F_PIO_CfgPeriph( AT91C_BASE_PIOC, AT91C_PC16_D16 to AT91C_PC16_D31
- # pPio->PIO_ASR = periphAEnable; AT91C_PIOC_ASR ((AT91_REG *) 0xFFFFF870) # (PIOC) Select A Register
- # pPio->PIO_BSR = periphBEnable;AT91C_PIOC_BSR ((AT91_REG *) 0xFFFFF874) # (PIOC) Select B Register
- # pPio->PIO_PDR = (periphAEnable | periphBEnable # Set in Periph mode
- set *0xFFFFF870=0xFFFF0000
- set *0xFFFFF874=0x00000000
- set *0xFFFFF804=0xFFFF0000
-
- # psdrc->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 ;
- set *0xFFFFEA08=0x85227259
- set $i = 0
- while $i != 100
- set $i += 1
- end
- # psdrc->SDRAMC_MR = 0x00000002; # Set PRCHG AL
- set *0xFFFFEA00=0x00000002
- # *AT91C_SDRAM = 0x00000000; # Perform PRCHG
- set *0x20000000=0x00000000
- set $i = 0
- while $i != 100
- set $i += 1
- end
- # psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; # Set 1st CBR
- set *0xFFFFEA00=0x00000004
-
- # *(AT91C_SDRAM+4) = 0x00000001; # Perform CBR
- set *0x20000010=0x00000001
-
- # psdrc->SDRAMC_MR = 0x00000004; # Set 2 CBR
- set *0xFFFFEA00=0x00000004
- # *(AT91C_SDRAM+8) = 0x00000002; # Perform CBR
- set *0x20000020=0x00000002
-
- # psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; # Set 3 CBR
- set *0xFFFFEA00=0x00000004
- # *(AT91C_SDRAM+0xc) = 0x00000003; # Perform CBR
- set *0x20000030=0x00000003
-
- # psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; # Set 4 CBR
- set *0xFFFFEA00=0x00000004
- # *(AT91C_SDRAM+0x10) = 0x00000004; # Perform CBR
- set *0x20000040=0x00000004
-
- # psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; # Set 5 CBR
- set *0xFFFFEA00=0x00000004
- # *(AT91C_SDRAM+0x14) = 0x00000005; # Perform CBR
- set *0x20000050=0x00000005
-
- # psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; # Set 6 CBR
- set *0xFFFFEA00=0x00000004
- # *(AT91C_SDRAM+0x18) = 0x00000006; # Perform CBR
- set *0x20000060=0x00000006
-
- # psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; # Set 7 CBR
- set *0xFFFFEA00=0x00000004
- # *(AT91C_SDRAM+0x1c) = 0x00000007; # Perform CBR
- set *0x20000070=0x00000007
-
- # psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_RFSH_CMD; # Set 8 CBR
- set *0xFFFFEA00=0x00000004
- # *(AT91C_SDRAM+0x20) = 0x00000008; # Perform CBR
- set *0x20000080=0x00000008
-
- # psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_LMR_CMD; # Set LMR operation
- set *0xFFFFEA00=0x00000003
- # *(AT91C_SDRAM+0x24) = 0xcafedede; # Perform LMR burst=1, lat=2
- set *0x20000090=0xCAFEDEDE
-
- # psdrc->SDRAMC_TR = (AT91C_MASTER_CLOCK * 7)/1000000; # Set Refresh Timer 390 for 25MHz (TR= 15.6 * F )
- set *0xFFFFEA04=0x000002B9
-
- #* psdrc->SDRAMC_MR = AT91C_SDRAMC_MODE_NORMAL_CMD; # Set Normal mode
- set *0xFFFFEA00=0x00000000
-
- #* *AT91C_SDRAM = 0x00000000; # Perform Normal mode
- set *0x20000000=0x00000000
- echo "---------- SDRAM Done at 100 MHz -----" \n
- end
- # Step1: Connect to the J-Link gdb server
- define reset
- #target remote localhost:2331
- monitor reset
- # Step2: Reset peripheral (RSTC_CR)
- #Init PLL
- __PllSetting
- __PllSetting100MHz
- __initSDRAM
- #* Set the RAM memory at 0x0020 0000 & 0x0000 0000
- _MapRAMAt0
- _InitRSTC
-
- # Step3: Load file(eg. getting-started project)
- load
- mon reg pc=0x20000000
- #info reg
- end
|