forked from RT-Thread/rt-thread
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[bsp][sam9260] Add GDB start scripts. Call user-defined command "rese…
…t" when you start debug.
- Loading branch information
Showing
1 changed file
with
230 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,230 @@ | ||
#------------------------------------------------ | ||
# 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 |