debuggers: import openocd-0.7.0
Initial check-in of openocd-0.7.0 as it can be downloaded from http://sourceforge.net/projects/openocd/files/openocd/0.7.0/ Any modifications will follow. Change-Id: I6949beaefd589e046395ea0cb80f4e1ab1654d55
This commit is contained in:
75
debuggers/openocd/tcl/chip/st/spear/quirk_no_srst.tcl
Normal file
75
debuggers/openocd/tcl/chip/st/spear/quirk_no_srst.tcl
Normal file
@ -0,0 +1,75 @@
|
||||
# Quirks to bypass missing SRST on JTAG connector
|
||||
# EVALSPEAr310 Rev. 2.0
|
||||
# http://www.st.com/spear
|
||||
#
|
||||
# Date: 2010-08-17
|
||||
# Author: Antonio Borneo <borneo.antonio@gmail.com>
|
||||
|
||||
# For boards that have JTAG SRST not connected.
|
||||
# We use "arm9 vector_catch reset" to catch button reset event.
|
||||
|
||||
|
||||
$_TARGETNAME configure -event reset-assert sp_reset_assert
|
||||
$_TARGETNAME configure -event reset-deassert-post sp_reset_deassert_post
|
||||
|
||||
# keeps the name of the SPEAr target
|
||||
global sp_target_name
|
||||
set sp_target_name $_TARGETNAME
|
||||
|
||||
# Keeps the argument of "reset" command (run, init, halt).
|
||||
global sp_reset_mode
|
||||
set sp_reset_mode ""
|
||||
|
||||
# Helper procedure. Returns 0 is target is halted.
|
||||
proc sp_is_halted {} {
|
||||
global sp_target_name
|
||||
|
||||
return [expr [string compare [$sp_target_name curstate] "halted" ] == 0]
|
||||
}
|
||||
|
||||
# wait for reset button to be pressed, causing CPU to get halted
|
||||
proc sp_reset_deassert_post {} {
|
||||
global sp_reset_mode
|
||||
|
||||
set bar(0) |
|
||||
set bar(1) /
|
||||
set bar(2) -
|
||||
set bar(3) \\
|
||||
|
||||
poll on
|
||||
echo "====> Press reset button on the board <===="
|
||||
for {set i 0} { [sp_is_halted] == 0 } { set i [expr $i + 1]} {
|
||||
echo -n "$bar([expr $i & 3])\r"
|
||||
sleep 200
|
||||
}
|
||||
|
||||
# Remove catch reset event
|
||||
arm9 vector_catch none
|
||||
|
||||
# CPU is halted, but we typed "reset run" ...
|
||||
if { [string compare $sp_reset_mode "run"] == 0 } {
|
||||
resume
|
||||
}
|
||||
}
|
||||
|
||||
# Override reset-assert, since no SRST available
|
||||
# Catch reset event
|
||||
proc sp_reset_assert {} {
|
||||
arm9 vector_catch reset
|
||||
}
|
||||
|
||||
# Override default init_reset{mode} to catch parameter "mode"
|
||||
proc init_reset {mode} {
|
||||
global sp_reset_mode
|
||||
|
||||
set sp_reset_mode $mode
|
||||
|
||||
# We need to detect CPU get halted, so exit from halt
|
||||
if { [sp_is_halted] } {
|
||||
echo "Resuming CPU to detect reset"
|
||||
resume
|
||||
}
|
||||
|
||||
# Execute default init_reset{mode}
|
||||
jtag arp_init-reset
|
||||
}
|
||||
129
debuggers/openocd/tcl/chip/st/spear/spear3xx.tcl
Normal file
129
debuggers/openocd/tcl/chip/st/spear/spear3xx.tcl
Normal file
@ -0,0 +1,129 @@
|
||||
# Generic init scripts for all ST SPEAr3xx family
|
||||
# http://www.st.com/spear
|
||||
#
|
||||
# Date: 2010-09-23
|
||||
# Author: Antonio Borneo <borneo.antonio@gmail.com>
|
||||
|
||||
|
||||
# Initialize internal clock
|
||||
# Default:
|
||||
# - Crystal = 24 MHz
|
||||
# - PLL1 = 332 MHz
|
||||
# - PLL2 = 332 MHz
|
||||
# - CPU_CLK = 332 MHz
|
||||
# - DDR_CLK = 332 MHz async
|
||||
# - HCLK = 166 MHz
|
||||
# - PCLK = 83 MHz
|
||||
proc sp3xx_clock_default {} {
|
||||
mww 0xfca00000 0x00000002 ;# set sysclk slow
|
||||
mww 0xfca00014 0x0ffffff8 ;# set pll timeout to minimum (100us ?!?)
|
||||
|
||||
# DDRCORE disable to change frequency
|
||||
set val [expr ([mrw 0xfca8002c] & ~0x20000000) | 0x40000000]
|
||||
mww 0xfca8002c $val
|
||||
mww 0xfca8002c $val ;# Yes, write twice!
|
||||
|
||||
# programming PLL1
|
||||
mww 0xfca8000c 0xa600010c ;# M=166 P=1 N=12
|
||||
mww 0xfca80008 0x00001c0a ;# power down
|
||||
mww 0xfca80008 0x00001c0e ;# enable
|
||||
mww 0xfca80008 0x00001c06 ;# strobe
|
||||
mww 0xfca80008 0x00001c0e
|
||||
while { [expr [mrw 0xfca80008] & 0x01] == 0x00 } { sleep 1 }
|
||||
|
||||
# programming PLL2
|
||||
mww 0xfca80018 0xa600010c ;# M=166, P=1, N=12
|
||||
mww 0xfca80014 0x00001c0a ;# power down
|
||||
mww 0xfca80014 0x00001c0e ;# enable
|
||||
mww 0xfca80014 0x00001c06 ;# strobe
|
||||
mww 0xfca80014 0x00001c0e
|
||||
while { [expr [mrw 0xfca80014] & 0x01] == 0x00 } { sleep 1 }
|
||||
|
||||
mww 0xfca80028 0x00000082 ;# enable plltimeen
|
||||
mww 0xfca80024 0x00000511 ;# set hclkdiv="/2" & pclkdiv="/2"
|
||||
|
||||
mww 0xfca00000 0x00000004 ;# setting SYSCTL to NORMAL mode
|
||||
while { [expr [mrw 0xfca00000] & 0x20] != 0x20 } { sleep 1 }
|
||||
|
||||
# Select source of DDR clock
|
||||
#mmw 0xfca80020 0x10000000 0x70000000 ;# PLL1
|
||||
mmw 0xfca80020 0x30000000 0x70000000 ;# PLL2
|
||||
|
||||
# DDRCORE enable after change frequency
|
||||
mmw 0xfca8002c 0x20000000 0x00000000
|
||||
}
|
||||
|
||||
proc sp3xx_common_init {} {
|
||||
mww 0xfca8002c 0xfffffff8 ;# enable clock of all peripherals
|
||||
mww 0xfca80038 0x00000000 ;# remove reset of all peripherals
|
||||
|
||||
mww 0xfca80034 0x0000ffff ;# enable all RAS clocks
|
||||
mww 0xfca80040 0x00000000 ;# remove all RAS resets
|
||||
|
||||
mww 0xfca800e4 0x78000008 ;# COMP1V8_REG
|
||||
mww 0xfca800ec 0x78000008 ;# COMP3V3_REG
|
||||
|
||||
mww 0xfc000000 0x10000f5f ;# init SMI and set HW mode
|
||||
mww 0xfc000000 0x00000f5f
|
||||
|
||||
# Initialize Bus Interconnection Matrix
|
||||
# All ports Round-Robin and lowest priority
|
||||
mww 0xfca8007c 0x80000007
|
||||
mww 0xfca80080 0x80000007
|
||||
mww 0xfca80084 0x80000007
|
||||
mww 0xfca80088 0x80000007
|
||||
mww 0xfca8008c 0x80000007
|
||||
mww 0xfca80090 0x80000007
|
||||
mww 0xfca80094 0x80000007
|
||||
mww 0xfca80098 0x80000007
|
||||
mww 0xfca8009c 0x80000007
|
||||
}
|
||||
|
||||
|
||||
# Specific init scripts for ST SPEAr300
|
||||
proc sp300_init {} {
|
||||
mww 0x99000000 0x00003fff ;# RAS function enable
|
||||
}
|
||||
|
||||
|
||||
# Specific init scripts for ST SPEAr310
|
||||
proc sp310_init {} {
|
||||
mww 0xb4000008 0x00002ff4 ;# RAS function enable
|
||||
|
||||
mww 0xfca80050 0x00000001 ;# Enable clk mem port 1
|
||||
|
||||
mww 0xfca8013c 0x2f7bc210 ;# plgpio_pad_drv
|
||||
mww 0xfca80140 0x017bdef6
|
||||
}
|
||||
|
||||
proc sp310_emi_init {} {
|
||||
# set EMI pad strength
|
||||
mmw 0xfca80134 0x0e000000 0x00000000
|
||||
mmw 0xfca80138 0x0e739ce7 0x00000000
|
||||
mmw 0xfca8013c 0x00039ce7 0x00000000
|
||||
|
||||
# set safe EMI timing as in BootROM
|
||||
#mww 0x4f000000 0x0000000f ;# tAP_0_reg
|
||||
#mww 0x4f000004 0x00000000 ;# tSDP_0_reg
|
||||
#mww 0x4f000008 0x000000ff ;# tDPw_0_reg
|
||||
#mww 0x4f00000c 0x00000111 ;# tDPr_0_reg
|
||||
#mww 0x4f000010 0x00000002 ;# tDCS_0_reg
|
||||
|
||||
# set fast EMI timing as in Linux
|
||||
mww 0x4f000000 0x00000010 ;# tAP_0_reg
|
||||
mww 0x4f000004 0x00000005 ;# tSDP_0_reg
|
||||
mww 0x4f000008 0x0000000a ;# tDPw_0_reg
|
||||
mww 0x4f00000c 0x0000000a ;# tDPr_0_reg
|
||||
mww 0x4f000010 0x00000005 ;# tDCS_0_re
|
||||
|
||||
# 32bit wide, 8/16/32bit access
|
||||
mww 0x4f000014 0x0000000e ;# control_0_reg
|
||||
mww 0x4f000094 0x0000003f ;# ack_reg
|
||||
}
|
||||
|
||||
|
||||
# Specific init scripts for ST SPEAr320
|
||||
proc sp320_init {} {
|
||||
mww 0xb300000c 0xffffac04 ;# RAS function enable
|
||||
mww 0xb3000010 0x00000001 ;# RAS mode select
|
||||
}
|
||||
127
debuggers/openocd/tcl/chip/st/spear/spear3xx_ddr.tcl
Normal file
127
debuggers/openocd/tcl/chip/st/spear/spear3xx_ddr.tcl
Normal file
@ -0,0 +1,127 @@
|
||||
# Init scripts to configure DDR controller of SPEAr3xx
|
||||
# http://www.st.com/spear
|
||||
# Original values taken from XLoader source code
|
||||
#
|
||||
# Date: 2010-09-23
|
||||
# Author: Antonio Borneo <borneo.antonio@gmail.com>
|
||||
|
||||
|
||||
proc sp3xx_ddr_init {ddr_type {ddr_chips 1}} {
|
||||
if { $ddr_chips != 1 && $ddr_chips != 2 } {
|
||||
error "Only 1 or 2 DDR chips permitted. Wrong value "$ddr_chips
|
||||
}
|
||||
|
||||
if { $ddr_type == "mt47h64m16_3_333_cl5_async" } {
|
||||
ddr_spr3xx_mt47h64m16_3_333_cl5_async $ddr_chips
|
||||
set ddr_size 0x08000000
|
||||
## add here new DDR chip definition. Prototype:
|
||||
#} elseif { $ddr_type == "?????" } {
|
||||
# ????? $ddr_chips
|
||||
# set ddr_size 0x?????
|
||||
} else {
|
||||
error "sp3xx_ddr_init: unrecognized DDR type "$ddr_type
|
||||
}
|
||||
|
||||
# MPMC START
|
||||
mww 0xfc60001c 0x01000100
|
||||
|
||||
if { $ddr_chips == 2 } {
|
||||
echo [format \
|
||||
"Double chip DDR memory. Total memory size 0x%08x byte" \
|
||||
[expr 2 * $ddr_size]]
|
||||
} else {
|
||||
echo [format \
|
||||
"Single chip DDR memory. Memory size 0x%08x byte" \
|
||||
$ddr_size]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# from Xloader file ddr/spr300_mt47h64m16_3_333_cl5_async.S
|
||||
proc ddr_spr3xx_mt47h64m16_3_333_cl5_async {ddr_chips} {
|
||||
# DDR_PAD_REG
|
||||
mww 0xfca800f0 0x00003aa5
|
||||
|
||||
# Use "1:2 sync" only when DDR clock source is PLL1 and
|
||||
# HCLK is half of PLL1
|
||||
mww 0xfc600000 0x00000001 ;# MEMCTL_AHB_SET_00 # This is async
|
||||
mww 0xfc600004 0x00000000 ;# MEMCTL_AHB_SET_01
|
||||
# mww 0xfc600000 0x02020201 ;# MEMCTL_AHB_SET_00 # This is 1:2 sync
|
||||
# mww 0xfc600004 0x02020202 ;# MEMCTL_AHB_SET_01
|
||||
|
||||
mww 0xfc600008 0x01000000 ;# MEMCTL_RFSH_SET_00
|
||||
mww 0xfc60000c 0x00000101 ;# MEMCTL_DLL_SET_00
|
||||
mww 0xfc600010 0x00000101 ;# MEMCTL_GP_00
|
||||
mww 0xfc600014 0x01000000 ;# MEMCTL_GP_01
|
||||
mww 0xfc600018 0x00010001 ;# MEMCTL_GP_02
|
||||
mww 0xfc60001c 0x00000100 ;# MEMCTL_GP_03
|
||||
mww 0xfc600020 0x00010001 ;# MEMCTL_GP_04
|
||||
if { $ddr_chips == 2 } {
|
||||
mww 0xfc600024 0x01020203 ;# MEMCTL_GP_05
|
||||
mww 0xfc600028 0x01000102 ;# MEMCTL_GP_06
|
||||
mww 0xfc60002c 0x02000202 ;# MEMCTL_AHB_SET_02
|
||||
} else {
|
||||
mww 0xfc600024 0x00000201 ;# MEMCTL_GP_05
|
||||
mww 0xfc600028 0x02000001 ;# MEMCTL_GP_06
|
||||
mww 0xfc60002c 0x02000201 ;# MEMCTL_AHB_SET_02
|
||||
}
|
||||
mww 0xfc600030 0x04040105 ;# MEMCTL_AHB_SET_03
|
||||
mww 0xfc600034 0x03030302 ;# MEMCTL_AHB_SET_04
|
||||
mww 0xfc600038 0x02040101 ;# MEMCTL_AHB_SET_05
|
||||
mww 0xfc60003c 0x00000002 ;# MEMCTL_AHB_SET_06
|
||||
mww 0xfc600044 0x03000405 ;# MEMCTL_DQS_SET_0
|
||||
mww 0xfc600048 0x03040002 ;# MEMCTL_TIME_SET_01
|
||||
mww 0xfc60004c 0x04000305 ;# MEMCTL_TIME_SET_02
|
||||
mww 0xfc600050 0x0505053f ;# MEMCTL_AHB_RELPR_00
|
||||
mww 0xfc600054 0x05050505 ;# MEMCTL_AHB_RELPR_01
|
||||
mww 0xfc600058 0x04040405 ;# MEMCTL_AHB_RELPR_02
|
||||
mww 0xfc60005c 0x04040404 ;# MEMCTL_AHB_RELPR_03
|
||||
mww 0xfc600060 0x03030304 ;# MEMCTL_AHB_RELPR_04
|
||||
mww 0xfc600064 0x03030303 ;# MEMCTL_AHB_RELPR_05
|
||||
mww 0xfc600068 0x02020203 ;# MEMCTL_AHB_RELPR_06
|
||||
mww 0xfc60006c 0x02020202 ;# MEMCTL_AHB_RELPR_07
|
||||
mww 0xfc600070 0x01010102 ;# MEMCTL_AHB_RELPR_08
|
||||
mww 0xfc600074 0x01010101 ;# MEMCTL_AHB_RELPR_09
|
||||
mww 0xfc600078 0x00000001 ;# MEMCTL_AHB_RELPR_10
|
||||
mww 0xfc600088 0x0a0c0a00 ;# MEMCTL_DQS_SET_1
|
||||
mww 0xfc60008c 0x0000023f ;# MEMCTL_GP_07
|
||||
mww 0xfc600090 0x00050a00 ;# MEMCTL_GP_08
|
||||
mww 0xfc600094 0x11000000 ;# MEMCTL_GP_09
|
||||
mww 0xfc600098 0x00001302 ;# MEMCTL_GP_10
|
||||
mww 0xfc60009c 0x00001c1c ;# MEMCTL_DLL_SET_01
|
||||
mww 0xfc6000a0 0x7c000000 ;# MEMCTL_DQS_OUT_SHIFT
|
||||
mww 0xfc6000a4 0x005c0000 ;# MEMCTL_WR_DQS_SHIFT
|
||||
mww 0xfc6000a8 0x2b050e00 ;# MEMCTL_TIME_SET_03
|
||||
mww 0xfc6000ac 0x00640064 ;# MEMCTL_AHB_PRRLX_00
|
||||
mww 0xfc6000b0 0x00640064 ;# MEMCTL_AHB_PRRLX_01
|
||||
mww 0xfc6000b4 0x00000064 ;# MEMCTL_AHB_PRRLX_02
|
||||
mww 0xfc6000b8 0x00000000 ;# MEMCTL_OUTRANGE_LGTH
|
||||
mww 0xfc6000bc 0x00200020 ;# MEMCTL_AHB_RW_SET_00
|
||||
mww 0xfc6000c0 0x00200020 ;# MEMCTL_AHB_RW_SET_01
|
||||
mww 0xfc6000c4 0x00200020 ;# MEMCTL_AHB_RW_SET_02
|
||||
mww 0xfc6000c8 0x00200020 ;# MEMCTL_AHB_RW_SET_03
|
||||
mww 0xfc6000cc 0x00200020 ;# MEMCTL_AHB_RW_SET_04
|
||||
mww 0xfc6000d8 0x00000a24 ;# MEMCTL_TREF
|
||||
mww 0xfc6000dc 0x00000000 ;# MEMCTL_EMRS3_DATA
|
||||
mww 0xfc6000e0 0x5b1c00c8 ;# MEMCTL_TIME_SET_04
|
||||
mww 0xfc6000e4 0x00c8002e ;# MEMCTL_TIME_SET_05
|
||||
mww 0xfc6000e8 0x00000000 ;# MEMCTL_VERSION
|
||||
mww 0xfc6000ec 0x0001046b ;# MEMCTL_TINIT
|
||||
mww 0xfc6000f0 0x00000000 ;# MEMCTL_OUTRANGE_ADDR_01
|
||||
mww 0xfc6000f4 0x00000000 ;# MEMCTL_OUTRANGE_ADDR_02
|
||||
mww 0xfc600104 0x001c0000 ;# MEMCTL_DLL_DQS_DELAY_BYPASS_0
|
||||
mww 0xfc600108 0x0019001c ;# MEMCTL_DLL_SET_02
|
||||
mww 0xfc60010c 0x00100000 ;# MEMCTL_DLL_SET_03
|
||||
mww 0xfc600110 0x001e007a ;# MEMCTL_DQS_SET_2
|
||||
mww 0xfc600188 0x00000000 ;# MEMCTL_USER_DEF_REG_0
|
||||
mww 0xfc60018c 0x00000000 ;# MEMCTL_USER_DEF_REG_1
|
||||
mww 0xfc600190 0x01010001 ;# MEMCTL_GP_11
|
||||
mww 0xfc600194 0x01000000 ;# MEMCTL_GP_12
|
||||
mww 0xfc600198 0x00000001 ;# MEMCTL_GP_13
|
||||
mww 0xfc60019c 0x00400000 ;# MEMCTL_GP_14
|
||||
mww 0xfc6001a0 0x00000000 ;# MEMCTL_EMRS2_DATA_X
|
||||
mww 0xfc6001a4 0x00000000 ;# MEMCTL_LWPWR_CNT
|
||||
mww 0xfc6001a8 0x00000000 ;# MEMCTL_LWPWR_REG
|
||||
mww 0xfc6001ac 0x00860000 ;# MEMCTL_GP_15
|
||||
mww 0xfc6001b0 0x00000002 ;# MEMCTL_TPDEX
|
||||
}
|
||||
7
debuggers/openocd/tcl/chip/st/stm32/stm32.tcl
Normal file
7
debuggers/openocd/tcl/chip/st/stm32/stm32.tcl
Normal file
@ -0,0 +1,7 @@
|
||||
source [find bitsbytes.tcl]
|
||||
source [find cpu/arm/cortex_m3.tcl]
|
||||
source [find memory.tcl]
|
||||
source [find mmr_helpers.tcl]
|
||||
|
||||
source [find chip/st/stm32/stm32_regs.tcl]
|
||||
source [find chip/st/stm32/stm32_rcc.tcl]
|
||||
290
debuggers/openocd/tcl/chip/st/stm32/stm32_rcc.tcl
Normal file
290
debuggers/openocd/tcl/chip/st/stm32/stm32_rcc.tcl
Normal file
@ -0,0 +1,290 @@
|
||||
|
||||
set RCC_CR [expr $RCC_BASE + 0x00]
|
||||
set RCC_CFGR [expr $RCC_BASE + 0x04]
|
||||
set RCC_CIR [expr $RCC_BASE + 0x08]
|
||||
set RCC_APB2RSTR [expr $RCC_BASE + 0x0c]
|
||||
set RCC_APB1RSTR [expr $RCC_BASE + 0x10]
|
||||
set RCC_AHBENR [expr $RCC_BASE + 0x14]
|
||||
set RCC_APB2ENR [expr $RCC_BASE + 0x18]
|
||||
set RCC_APB1ENR [expr $RCC_BASE + 0x1c]
|
||||
set RCC_BDCR [expr $RCC_BASE + 0x20]
|
||||
set RCC_CSR [expr $RCC_BASE + 0x24]
|
||||
|
||||
|
||||
proc show_RCC_CR { } {
|
||||
if [ catch { set val [show_mmr32_reg RCC_CR] } msg ] {
|
||||
error $msg
|
||||
}
|
||||
|
||||
show_mmr_bitfield 0 0 $val HSI { OFF ON }
|
||||
show_mmr_bitfield 1 1 $val HSIRDY { NOTRDY RDY }
|
||||
show_mmr_bitfield 7 3 $val HSITRIM { _NUMBER_ }
|
||||
show_mmr_bitfield 15 8 $val HSICAL { _NUMBER_ }
|
||||
show_mmr_bitfield 16 16 $val HSEON { OFF ON }
|
||||
show_mmr_bitfield 17 17 $val HSERDY { NOTRDY RDY }
|
||||
show_mmr_bitfield 18 18 $val HSEBYP { NOTBYPASSED BYPASSED }
|
||||
show_mmr_bitfield 19 19 $val CSSON { OFF ON }
|
||||
show_mmr_bitfield 24 24 $val PLLON { OFF ON }
|
||||
show_mmr_bitfield 25 25 $val PLLRDY { NOTRDY RDY }
|
||||
}
|
||||
|
||||
proc show_RCC_CFGR { } {
|
||||
if [ catch { set val [show_mmr32_reg RCC_CFGR] } msg ] {
|
||||
error $msg
|
||||
}
|
||||
|
||||
|
||||
show_mmr_bitfield 1 0 $val SW { HSI HSE PLL ILLEGAL }
|
||||
show_mmr_bitfield 3 2 $val SWS { HSI HSE PLL ILLEGAL }
|
||||
show_mmr_bitfield 7 4 $val HPRE { sysclk_div_1 sysclk_div_1 sysclk_div_1 sysclk_div_1 sysclk_div_1 sysclk_div_1 sysclk_div_1 sysclk_div_1 sysclk_div_2 sysclk_div_4 sysclk_div_8 sysclk_div_16 sysclk_div_64 sysclk_div_128 sysclk_div_256 sysclk_div_512 }
|
||||
show_mmr_bitfield 10 8 $val PPRE1 { hclk_div1 hclk_div1 hclk_div1 hclk_div1 hclk_div2 hclk_div4 hclk_div8 hclk_div16 }
|
||||
show_mmr_bitfield 13 11 $val PPRE2 { hclk_div1 hclk_div1 hclk_div1 hclk_div1 hclk_div2 hclk_div4 hclk_div8 hclk_div16 }
|
||||
show_mmr_bitfield 15 14 $val ADCPRE { pclk2_div1 pclk2_div1 pclk2_div1 pclk2_div1 pclk2_div2 pclk2_div4 pclk2_div8 pclk2_div16 }
|
||||
show_mmr_bitfield 16 16 $val PLLSRC { HSI_div_2 HSE }
|
||||
show_mmr_bitfield 17 17 $val PLLXTPRE { hse_div1 hse_div2 }
|
||||
show_mmr_bitfield 21 18 $val PLLMUL { x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x16 }
|
||||
show_mmr_bitfield 22 22 $val USBPRE { div1 div1_5 }
|
||||
show_mmr_bitfield 26 24 $val MCO { none none none none SysClk HSI HSE PLL_div2 }
|
||||
}
|
||||
|
||||
|
||||
proc show_RCC_CIR { } {
|
||||
if [ catch { set val [show_mmr32_reg RCC_CIR] } msg ] {
|
||||
error $msg
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
proc show_RCC_APB2RSTR { } {
|
||||
if [ catch { set val [ show_mmr32_reg RCC_APB2RSTR] } msg ] {
|
||||
error $msg
|
||||
}
|
||||
for { set x 0 } { $x < 32 } { incr x } {
|
||||
set bits($x) xxx
|
||||
}
|
||||
set bits(15) adc3
|
||||
set bits(14) usart1
|
||||
set bits(13) tim8
|
||||
set bits(12) spi1
|
||||
set bits(11) tim1
|
||||
set bits(10) adc2
|
||||
set bits(9) adc1
|
||||
set bits(8) iopg
|
||||
set bits(7) iopf
|
||||
set bits(6) iope
|
||||
set bits(5) iopd
|
||||
set bits(4) iopc
|
||||
set bits(3) iopb
|
||||
set bits(2) iopa
|
||||
set bits(1) xxx
|
||||
set bits(0) afio
|
||||
show_mmr32_bits bits $val
|
||||
}
|
||||
|
||||
proc show_RCC_APB1RSTR { } {
|
||||
if [ catch { set val [ show_mmr32_reg RCC_APB1RSTR] } msg ] {
|
||||
error $msg
|
||||
}
|
||||
set bits(31) xxx
|
||||
set bits(30) xxx
|
||||
set bits(29) dac
|
||||
set bits(28) pwr
|
||||
set bits(27) bkp
|
||||
set bits(26) xxx
|
||||
set bits(25) can
|
||||
set bits(24) xxx
|
||||
set bits(23) usb
|
||||
set bits(22) i2c2
|
||||
set bits(21) i2c1
|
||||
set bits(20) uart5
|
||||
set bits(19) uart4
|
||||
set bits(18) uart3
|
||||
set bits(17) uart2
|
||||
set bits(16) xxx
|
||||
set bits(15) spi3
|
||||
set bits(14) spi2
|
||||
set bits(13) xxx
|
||||
set bits(12) xxx
|
||||
set bits(11) wwdg
|
||||
set bits(10) xxx
|
||||
set bits(9) xxx
|
||||
set bits(8) xxx
|
||||
set bits(7) xxx
|
||||
set bits(6) xxx
|
||||
set bits(5) tim7
|
||||
set bits(4) tim6
|
||||
set bits(3) tim5
|
||||
set bits(2) tim4
|
||||
set bits(1) tim3
|
||||
set bits(0) tim2
|
||||
show_mmr32_bits bits $val
|
||||
|
||||
}
|
||||
|
||||
proc show_RCC_AHBENR { } {
|
||||
if [ catch { set val [ show_mmr32_reg RCC_AHBENR ] } msg ] {
|
||||
error $msg
|
||||
}
|
||||
set bits(31) xxx
|
||||
set bits(30) xxx
|
||||
set bits(29) xxx
|
||||
set bits(28) xxx
|
||||
set bits(27) xxx
|
||||
set bits(26) xxx
|
||||
set bits(25) xxx
|
||||
set bits(24) xxx
|
||||
set bits(23) xxx
|
||||
set bits(22) xxx
|
||||
set bits(21) xxx
|
||||
set bits(20) xxx
|
||||
set bits(19) xxx
|
||||
set bits(18) xxx
|
||||
set bits(17) xxx
|
||||
set bits(16) xxx
|
||||
set bits(15) xxx
|
||||
set bits(14) xxx
|
||||
set bits(13) xxx
|
||||
set bits(12) xxx
|
||||
set bits(11) xxx
|
||||
set bits(10) sdio
|
||||
set bits(9) xxx
|
||||
set bits(8) fsmc
|
||||
set bits(7) xxx
|
||||
set bits(6) crce
|
||||
set bits(5) xxx
|
||||
set bits(4) flitf
|
||||
set bits(3) xxx
|
||||
set bits(2) sram
|
||||
set bits(1) dma2
|
||||
set bits(0) dma1
|
||||
show_mmr32_bits bits $val
|
||||
}
|
||||
|
||||
proc show_RCC_APB2ENR { } {
|
||||
if [ catch { set val [ show_mmr32_reg RCC_APB2ENR ] } msg ] {
|
||||
error $msg
|
||||
}
|
||||
set bits(31) xxx
|
||||
set bits(30) xxx
|
||||
set bits(29) xxx
|
||||
set bits(28) xxx
|
||||
set bits(27) xxx
|
||||
set bits(26) xxx
|
||||
set bits(25) xxx
|
||||
set bits(24) xxx
|
||||
set bits(23) xxx
|
||||
set bits(22) xxx
|
||||
set bits(21) xxx
|
||||
set bits(20) xxx
|
||||
set bits(19) xxx
|
||||
set bits(18) xxx
|
||||
set bits(17) xxx
|
||||
set bits(16) xxx
|
||||
set bits(15) adc3
|
||||
set bits(14) usart1
|
||||
set bits(13) tim8
|
||||
set bits(12) spi1
|
||||
set bits(11) tim1
|
||||
set bits(10) adc2
|
||||
set bits(9) adc1
|
||||
set bits(8) iopg
|
||||
set bits(7) iopf
|
||||
set bits(6) iope
|
||||
set bits(5) iopd
|
||||
set bits(4) iopc
|
||||
set bits(3) iopb
|
||||
set bits(2) iopa
|
||||
set bits(1) xxx
|
||||
set bits(0) afio
|
||||
show_mmr32_bits bits $val
|
||||
|
||||
}
|
||||
|
||||
proc show_RCC_APB1ENR { } {
|
||||
if [ catch { set val [ show_mmr32_reg RCC_APB1ENR ] } msg ] {
|
||||
error $msg
|
||||
}
|
||||
set bits(31) xxx
|
||||
set bits(30) xxx
|
||||
set bits(29) dac
|
||||
set bits(28) pwr
|
||||
set bits(27) bkp
|
||||
set bits(26) xxx
|
||||
set bits(25) can
|
||||
set bits(24) xxx
|
||||
set bits(23) usb
|
||||
set bits(22) i2c2
|
||||
set bits(21) i2c1
|
||||
set bits(20) usart5
|
||||
set bits(19) usart4
|
||||
set bits(18) usart3
|
||||
set bits(17) usart2
|
||||
set bits(16) xxx
|
||||
set bits(15) spi3
|
||||
set bits(14) spi2
|
||||
set bits(13) xxx
|
||||
set bits(12) xxx
|
||||
set bits(11) wwdg
|
||||
set bits(10) xxx
|
||||
set bits(9) xxx
|
||||
set bits(8) xxx
|
||||
set bits(7) xxx
|
||||
set bits(6) xxx
|
||||
set bits(5) tim7
|
||||
set bits(4) tim6
|
||||
set bits(3) tim5
|
||||
set bits(2) tim4
|
||||
set bits(1) tim3
|
||||
set bits(0) tim2
|
||||
show_mmr32_bits bits $val
|
||||
}
|
||||
|
||||
proc show_RCC_BDCR { } {
|
||||
if [ catch { set val [ show_mmr32_reg RCC_BDCR ] } msg ] {
|
||||
error $msg
|
||||
}
|
||||
for { set x 0 } { $x < 32 } { incr x } {
|
||||
set bits($x) xxx
|
||||
}
|
||||
set bits(0) lseon
|
||||
set bits(1) lserdy
|
||||
set bits(2) lsebyp
|
||||
set bits(8) rtcsel0
|
||||
set bits(9) rtcsel1
|
||||
set bits(15) rtcen
|
||||
set bits(16) bdrst
|
||||
show_mmr32_bits bits $val
|
||||
}
|
||||
|
||||
proc show_RCC_CSR { } {
|
||||
if [ catch { set val [ show_mmr32_reg RCC_CSR ] } msg ] {
|
||||
error $msg
|
||||
}
|
||||
for { set x 0 } { $x < 32 } { incr x } {
|
||||
set bits($x) xxx
|
||||
}
|
||||
set bits(0) lsion
|
||||
set bits(1) lsirdy
|
||||
set bits(24) rmvf
|
||||
set bits(26) pin
|
||||
set bits(27) por
|
||||
set bits(28) sft
|
||||
set bits(29) iwdg
|
||||
set bits(30) wwdg
|
||||
set bits(31) lpwr
|
||||
show_mmr32_bits bits $val
|
||||
}
|
||||
|
||||
proc show_RCC { } {
|
||||
|
||||
show_RCC_CR
|
||||
show_RCC_CFGR
|
||||
show_RCC_CIR
|
||||
show_RCC_APB2RSTR
|
||||
show_RCC_APB1RSTR
|
||||
show_RCC_AHBENR
|
||||
show_RCC_APB2ENR
|
||||
show_RCC_APB1ENR
|
||||
show_RCC_BDCR
|
||||
show_RCC_CSR
|
||||
}
|
||||
95
debuggers/openocd/tcl/chip/st/stm32/stm32_regs.tcl
Normal file
95
debuggers/openocd/tcl/chip/st/stm32/stm32_regs.tcl
Normal file
@ -0,0 +1,95 @@
|
||||
# /* Peripheral and SRAM base address in the alias region */
|
||||
set PERIPH_BB_BASE 0x42000000
|
||||
set SRAM_BB_BASE 0x22000000
|
||||
|
||||
# /*Peripheral and SRAM base address in the bit-band region */
|
||||
set SRAM_BASE 0x20000000
|
||||
set PERIPH_BASE 0x40000000
|
||||
|
||||
# /*FSMC registers base address */
|
||||
set FSMC_R_BASE 0xA0000000
|
||||
|
||||
# /*Peripheral memory map */
|
||||
set APB1PERIPH_BASE [set PERIPH_BASE]
|
||||
set APB2PERIPH_BASE [expr $PERIPH_BASE + 0x10000]
|
||||
set AHBPERIPH_BASE [expr $PERIPH_BASE + 0x20000]
|
||||
|
||||
set TIM2_BASE [expr $APB1PERIPH_BASE + 0x0000]
|
||||
set TIM3_BASE [expr $APB1PERIPH_BASE + 0x0400]
|
||||
set TIM4_BASE [expr $APB1PERIPH_BASE + 0x0800]
|
||||
set TIM5_BASE [expr $APB1PERIPH_BASE + 0x0C00]
|
||||
set TIM6_BASE [expr $APB1PERIPH_BASE + 0x1000]
|
||||
set TIM7_BASE [expr $APB1PERIPH_BASE + 0x1400]
|
||||
set RTC_BASE [expr $APB1PERIPH_BASE + 0x2800]
|
||||
set WWDG_BASE [expr $APB1PERIPH_BASE + 0x2C00]
|
||||
set IWDG_BASE [expr $APB1PERIPH_BASE + 0x3000]
|
||||
set SPI2_BASE [expr $APB1PERIPH_BASE + 0x3800]
|
||||
set SPI3_BASE [expr $APB1PERIPH_BASE + 0x3C00]
|
||||
set USART2_BASE [expr $APB1PERIPH_BASE + 0x4400]
|
||||
set USART3_BASE [expr $APB1PERIPH_BASE + 0x4800]
|
||||
set UART4_BASE [expr $APB1PERIPH_BASE + 0x4C00]
|
||||
set UART5_BASE [expr $APB1PERIPH_BASE + 0x5000]
|
||||
set I2C1_BASE [expr $APB1PERIPH_BASE + 0x5400]
|
||||
set I2C2_BASE [expr $APB1PERIPH_BASE + 0x5800]
|
||||
set CAN_BASE [expr $APB1PERIPH_BASE + 0x6400]
|
||||
set BKP_BASE [expr $APB1PERIPH_BASE + 0x6C00]
|
||||
set PWR_BASE [expr $APB1PERIPH_BASE + 0x7000]
|
||||
set DAC_BASE [expr $APB1PERIPH_BASE + 0x7400]
|
||||
|
||||
set AFIO_BASE [expr $APB2PERIPH_BASE + 0x0000]
|
||||
set EXTI_BASE [expr $APB2PERIPH_BASE + 0x0400]
|
||||
set GPIOA_BASE [expr $APB2PERIPH_BASE + 0x0800]
|
||||
set GPIOB_BASE [expr $APB2PERIPH_BASE + 0x0C00]
|
||||
set GPIOC_BASE [expr $APB2PERIPH_BASE + 0x1000]
|
||||
set GPIOD_BASE [expr $APB2PERIPH_BASE + 0x1400]
|
||||
set GPIOE_BASE [expr $APB2PERIPH_BASE + 0x1800]
|
||||
set GPIOF_BASE [expr $APB2PERIPH_BASE + 0x1C00]
|
||||
set GPIOG_BASE [expr $APB2PERIPH_BASE + 0x2000]
|
||||
set ADC1_BASE [expr $APB2PERIPH_BASE + 0x2400]
|
||||
set ADC2_BASE [expr $APB2PERIPH_BASE + 0x2800]
|
||||
set TIM1_BASE [expr $APB2PERIPH_BASE + 0x2C00]
|
||||
set SPI1_BASE [expr $APB2PERIPH_BASE + 0x3000]
|
||||
set TIM8_BASE [expr $APB2PERIPH_BASE + 0x3400]
|
||||
set USART1_BASE [expr $APB2PERIPH_BASE + 0x3800]
|
||||
set ADC3_BASE [expr $APB2PERIPH_BASE + 0x3C00]
|
||||
|
||||
set SDIO_BASE [expr $PERIPH_BASE + 0x18000]
|
||||
|
||||
set DMA1_BASE [expr $AHBPERIPH_BASE + 0x0000]
|
||||
set DMA1_Channel1_BASE [expr $AHBPERIPH_BASE + 0x0008]
|
||||
set DMA1_Channel2_BASE [expr $AHBPERIPH_BASE + 0x001C]
|
||||
set DMA1_Channel3_BASE [expr $AHBPERIPH_BASE + 0x0030]
|
||||
set DMA1_Channel4_BASE [expr $AHBPERIPH_BASE + 0x0044]
|
||||
set DMA1_Channel5_BASE [expr $AHBPERIPH_BASE + 0x0058]
|
||||
set DMA1_Channel6_BASE [expr $AHBPERIPH_BASE + 0x006C]
|
||||
set DMA1_Channel7_BASE [expr $AHBPERIPH_BASE + 0x0080]
|
||||
set DMA2_BASE [expr $AHBPERIPH_BASE + 0x0400]
|
||||
set DMA2_Channel1_BASE [expr $AHBPERIPH_BASE + 0x0408]
|
||||
set DMA2_Channel2_BASE [expr $AHBPERIPH_BASE + 0x041C]
|
||||
set DMA2_Channel3_BASE [expr $AHBPERIPH_BASE + 0x0430]
|
||||
set DMA2_Channel4_BASE [expr $AHBPERIPH_BASE + 0x0444]
|
||||
set DMA2_Channel5_BASE [expr $AHBPERIPH_BASE + 0x0458]
|
||||
set RCC_BASE [expr $AHBPERIPH_BASE + 0x1000]
|
||||
set CRC_BASE [expr $AHBPERIPH_BASE + 0x3000]
|
||||
|
||||
# /*Flash registers base address */
|
||||
set FLASH_R_BASE [expr $AHBPERIPH_BASE + 0x2000]
|
||||
# /*Flash Option Bytes base address */
|
||||
set OB_BASE 0x1FFFF800
|
||||
|
||||
# /*FSMC Bankx registers base address */
|
||||
set FSMC_Bank1_R_BASE [expr $FSMC_R_BASE + 0x0000]
|
||||
set FSMC_Bank1E_R_BASE [expr $FSMC_R_BASE + 0x0104]
|
||||
set FSMC_Bank2_R_BASE [expr $FSMC_R_BASE + 0x0060]
|
||||
set FSMC_Bank3_R_BASE [expr $FSMC_R_BASE + 0x0080]
|
||||
set FSMC_Bank4_R_BASE [expr $FSMC_R_BASE + 0x00A0]
|
||||
|
||||
# /*Debug MCU registers base address */
|
||||
set DBGMCU_BASE 0xE0042000
|
||||
|
||||
# /*System Control Space memory map */
|
||||
set SCS_BASE 0xE000E000
|
||||
|
||||
set SysTick_BASE [expr $SCS_BASE + 0x0010]
|
||||
set NVIC_BASE [expr $SCS_BASE + 0x0100]
|
||||
set SCB_BASE [expr $SCS_BASE + 0x0D00]
|
||||
Reference in New Issue
Block a user