Illustration of the new config script handling scheme. Signed-off-by: Øyvind Harboe <oyvind.har...@zylin.com> --- tcl/board/at91cap7a-stk-sdram.cfg | 297 ++++++++++++++++++------------------- 1 files changed, 143 insertions(+), 154 deletions(-)
diff --git a/tcl/board/at91cap7a-stk-sdram.cfg b/tcl/board/at91cap7a-stk-sdram.cfg index 72d9e01..a3a1e71 100644 --- a/tcl/board/at91cap7a-stk-sdram.cfg +++ b/tcl/board/at91cap7a-stk-sdram.cfg @@ -1,165 +1,154 @@ # http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4394 # # use combined on interfaces or targets that can't set TRST/SRST separately -reset_config trst_and_srst srst_pulls_trst -if { [info exists CHIPNAME] } { - set _CHIPNAME $CHIPNAME -} else { - set _CHIPNAME cap7 -} - -if { [info exists ENDIAN] } { - set _ENDIAN $ENDIAN -} else { - set _ENDIAN little -} - -if { [info exists CPUTAPID ] } { - set _CPUTAPID $CPUTAPID -} else { - set _CPUTAPID 0x40700f0f -} - -jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID - -set _TARGETNAME $_CHIPNAME.cpu -target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAME -variant arm7tdmi - -$_TARGETNAME configure -event reset-start { - # start off real slow when we're running off internal RC oscillator - jtag_khz 32 -} - -proc peek32 {address} { - mem2array t 32 $address 1 - return $t(0) -} - -# Wait for an expression to be true with a timeout -proc wait_state {expression} { - for {set i 0} {$i < 1000} {set i [expr $i + 1]} { - if {[uplevel 1 $expression] == 0} { - return +proc setup_sam7 {chipname endian cpuid} { + reset_config trst_and_srst srst_pulls_trst + + jtag newtap $chipname cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $cpuid + + set _TARGETNAME $chipname.cpu + target create $_TARGETNAME arm7tdmi -endian $endian -chain-position $_TARGETNAME -variant arm7tdmi + + $_TARGETNAME configure -event reset-start { + # start off real slow when we're running off internal RC oscillator + jtag_khz 32 + } + + proc peek32 {address} { + mem2array t 32 $address 1 + return $t(0) + } + + # Wait for an expression to be true with a timeout + proc wait_state {expression} { + for {set i 0} {$i < 1000} {set i [expr $i + 1]} { + if {[uplevel 1 $expression] == 0} { + return + } } + return -code 1 "Timed out" } - return -code 1 "Timed out" -} - -# Use a global variable here to be able to tinker interactively with -# post reset jtag frequency. -global post_reset_khz -# Danger!!!! Even 16MHz kinda works with this target, but -# it needs to be as low as 2000kHz to be stable. -set post_reset_khz 2000 - -$_TARGETNAME configure -event reset-init { - echo "Configuring master clock" - # disable watchdog - mww 0xfffffd44 0xff008000 - # enable user reset - mww 0xfffffd08 0xa5000001 - # Enable main oscillator - mww 0xFFFFFc20 0x00000f01 - wait_state {expr {([peek32 0xFFFFFC68] & 0x1) == 0}} - - # Set PLLA to 96MHz - mww 0xFFFFFc28 0x20072801 - wait_state {expr {([peek32 0xFFFFFC68] & 0x2) == 0}} - - # Select prescaler - mww 0xFFFFFC30 0x00000004 - wait_state {expr {([peek32 0xFFFFFC68] & 0x8) == 0}} - - # Select master clock to 48MHz - mww 0xFFFFFC30 0x00000006 - wait_state {expr {([peek32 0xFFFFFC68] & 0x8) == 0}} - - echo "Master clock ok." - # Now that we're up and running, crank up speed! - global post_reset_khz ; jtag_khz $post_reset_khz + # Use a global variable here to be able to tinker interactively with + # post reset jtag frequency. + global post_reset_khz + # Danger!!!! Even 16MHz kinda works with this target, but + # it needs to be as low as 2000kHz to be stable. + set post_reset_khz 2000 - echo "Configuring the SDRAM controller..." - - # Configure EBI Chip select for SDRAM - mww 0xFFFFEF30 0x00000102 - - # Enable clock on EBI PIOs - mww 0xFFFFFC10 0x00000004 - - # Configure PIO for SDRAM - mww 0xFFFFF470 0xFFFF0000 - mww 0xFFFFF474 0x00000000 - mww 0xFFFFF404 0xFFFF0000 - - # Configure SDRAMC CR - mww 0xFFFFEA08 0xA63392F9 - - # NOP command - mww 0xFFFFEA00 0x1 - mww 0x20000000 0 - - # Precharge All Banks command - mww 0xFFFFEA00 0x2 - mww 0x20000000 0 - - # Set 1st CBR - mww 0xFFFFEA00 0x00000004 - mww 0x20000010 0x00000001 - - # Set 2nd CBR - mww 0xFFFFEA00 0x00000004 - mww 0x20000020 0x00000002 - - # Set 3rd CBR - mww 0xFFFFEA00 0x00000004 - mww 0x20000030 0x00000003 - - # Set 4th CBR - mww 0xFFFFEA00 0x00000004 - mww 0x20000040 0x00000004 - - # Set 5th CBR - mww 0xFFFFEA00 0x00000004 - mww 0x20000050 0x00000005 - - # Set 6th CBR - mww 0xFFFFEA00 0x00000004 - mww 0x20000060 0x00000006 - - # Set 7th CBR - mww 0xFFFFEA00 0x00000004 - mww 0x20000070 0x00000007 - - # Set 8th CBR - mww 0xFFFFEA00 0x00000004 - mww 0x20000080 0x00000008 - - # Set LMR operation - mww 0xFFFFEA00 0x00000003 - - # Perform LMR burst=1, lat=2 - mww 0x20000020 0xCAFEDEDE - - # Set Refresh Timer - mww 0xFFFFEA04 0x00000203 - - # Set Normal mode - mww 0xFFFFEA00 0x00000000 - mww 0x20000000 0x00000000 - - #remap internal memory at address 0x0 - mww 0xffffef00 0x3 + $_TARGETNAME configure -event reset-init { + echo "Configuring master clock" + # disable watchdog + mww 0xfffffd44 0xff008000 + # enable user reset + mww 0xfffffd08 0xa5000001 + # Enable main oscillator + mww 0xFFFFFc20 0x00000f01 + wait_state {expr {([peek32 0xFFFFFC68] & 0x1) == 0}} + + # Set PLLA to 96MHz + mww 0xFFFFFc28 0x20072801 + wait_state {expr {([peek32 0xFFFFFC68] & 0x2) == 0}} + + # Select prescaler + mww 0xFFFFFC30 0x00000004 + wait_state {expr {([peek32 0xFFFFFC68] & 0x8) == 0}} + + # Select master clock to 48MHz + mww 0xFFFFFC30 0x00000006 + wait_state {expr {([peek32 0xFFFFFC68] & 0x8) == 0}} + + echo "Master clock ok." + + # Now that we're up and running, crank up speed! + global post_reset_khz ; jtag_khz $post_reset_khz + + echo "Configuring the SDRAM controller..." + + # Configure EBI Chip select for SDRAM + mww 0xFFFFEF30 0x00000102 + + # Enable clock on EBI PIOs + mww 0xFFFFFC10 0x00000004 + + # Configure PIO for SDRAM + mww 0xFFFFF470 0xFFFF0000 + mww 0xFFFFF474 0x00000000 + mww 0xFFFFF404 0xFFFF0000 + + # Configure SDRAMC CR + mww 0xFFFFEA08 0xA63392F9 + + # NOP command + mww 0xFFFFEA00 0x1 + mww 0x20000000 0 + + # Precharge All Banks command + mww 0xFFFFEA00 0x2 + mww 0x20000000 0 + + # Set 1st CBR + mww 0xFFFFEA00 0x00000004 + mww 0x20000010 0x00000001 + + # Set 2nd CBR + mww 0xFFFFEA00 0x00000004 + mww 0x20000020 0x00000002 - echo "SDRAM configuration ok." + # Set 3rd CBR + mww 0xFFFFEA00 0x00000004 + mww 0x20000030 0x00000003 + + # Set 4th CBR + mww 0xFFFFEA00 0x00000004 + mww 0x20000040 0x00000004 + + # Set 5th CBR + mww 0xFFFFEA00 0x00000004 + mww 0x20000050 0x00000005 + + # Set 6th CBR + mww 0xFFFFEA00 0x00000004 + mww 0x20000060 0x00000006 + + # Set 7th CBR + mww 0xFFFFEA00 0x00000004 + mww 0x20000070 0x00000007 + + # Set 8th CBR + mww 0xFFFFEA00 0x00000004 + mww 0x20000080 0x00000008 + + # Set LMR operation + mww 0xFFFFEA00 0x00000003 + + # Perform LMR burst=1, lat=2 + mww 0x20000020 0xCAFEDEDE + + # Set Refresh Timer + mww 0xFFFFEA04 0x00000203 + + # Set Normal mode + mww 0xFFFFEA00 0x00000000 + mww 0x20000000 0x00000000 + + #remap internal memory at address 0x0 + mww 0xffffef00 0x3 + + echo "SDRAM configuration ok." + } + + $_TARGETNAME configure -work-area-phys 0x00200000 -work-area-size 0x4000 -work-area-backup 0 + + arm7_9 dcc_downloads enable + arm7_9 fast_memory_access enable + + #set _FLASHNAME $chipname.flash + #flash bank $_FLASHNAME at91sam7 0 0 0 0 $_TARGETNAME 0 0 0 0 0 0 0 18432 } -$_TARGETNAME configure -work-area-phys 0x00200000 -work-area-size 0x4000 -work-area-backup 0 - -arm7_9 dcc_downloads enable -arm7_9 fast_memory_access enable - -#set _FLASHNAME $_CHIPNAME.flash -#flash bank $_FLASHNAME at91sam7 0 0 0 0 $_TARGETNAME 0 0 0 0 0 0 0 18432 - +# Default settings +proc init_targets {} { + setup_sam7 cap7 little 0x40700f0f +} -- 1.7.0.4 _______________________________________________ Openocd-development mailing list Openocd-development@lists.berlios.de https://lists.berlios.de/mailman/listinfo/openocd-development