# {For Open On-Chip Debugger 0.6.0-dev-00477-gf1c0133 } # { Display the stm32f4xx registers associated with RCC } # { http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/DM00031020.pdf } source [find bitsbytes.tcl] source [find memory.tcl] puts "\n===== RCC =====" set rcc_base 0x40023800 foreach nameaddr { {rcc_cr 0} {rcc_pllcfgr 4} {rcc_cfgr 8} {rcc_cir 12} {rcc_ahb1rstr 0x10} {rcc_ahb2rstr 0x14} {rcc_ahb3rstr 0x18} {rcc_apb1rstr 0x20} {rcc_apb2rstr 0x24} {rcc_ahb1enr 0x30} {rcc_ahb2enr 0x34} {rcc_ahb3enr 0x38} {rcc_apb1enr 0x40} {rcc_apb2enr 0x44} {rcc_ahb1lpenr 0x50} {rcc_ahb2lpenr 0x54} {rcc_ahb3lpenr 0x58} {rcc_apb1lpenr 0x60} {rcc_apb2lpenr 0x64} {rcc_bdcr 0x70} {rcc_csr 0x74} {rcc_sscgr 0x80} {rcc_plli2scfgr 0x84} } { set [lindex $nameaddr 0] [memread32 [expr $rcc_base + [lindex $nameaddr 1]]] } proc labelled_bits {var masklabels} { foreach ml $masklabels { if {$var & [lindex $ml 0]} { puts -nonewline " [lindex $ml 1]" } } } puts -nonewline [format "CR\t0x%08x" $rcc_cr] puts -nonewline [format " HSICAL=%d" [expr $rcc_cr >> 8 & 0xFF]] puts -nonewline [format " HSITRIM=%d" [expr $rcc_cr >> 3 & 0x1F]] labelled_bits $rcc_cr {{0x8000000 PLLI2SRDY} {0x4000000 PLLI2SON} {0x2000000 PLLRDY} {0x1000000 PLLON} {0x80000 CSSON} {0x40000 HSEBYP} {0x20000 HSERDY} {0x10000 HSEON} {2 HSIRDY} {1 HSION}} puts "" puts [format "PLLCFGR\t0x%08x" $rcc_pllcfgr] puts -nonewline " PLLQ=[expr $rcc_pllcfgr >> 24 & 0xF]" puts -nonewline " PLLSRC=[lindex {HSI HSE} [expr $rcc_pllcfgr >> 22 & 1]]" puts -nonewline " PLLP=[lindex {2 4 6 8} [expr $rcc_pllcfgr >> 16 & 3]]" puts -nonewline " PLLN=[expr $rcc_pllcfgr >> 6 & 0x1FF]" puts -nonewline " PLLM=[expr $rcc_pllcfgr & 0x3F]" puts "" puts [format "CFGR\t0x%08x" $rcc_cfgr] puts -nonewline " SW=[lindex {HSI HSE PLL} [expr $rcc_cfgr & 3]]" puts -nonewline " SWS=[lindex {HSI HSE PLL xx} [expr $rcc_cfgr >> 2 & 3]]" puts -nonewline " HPRE=[lindex {/1 /1 /1 /1 /1 /1 /1 /1 /2 /4 /8 /16 /64 /128 /256 /512} [expr $rcc_cfgr >> 4 & 0xF]]" puts -nonewline " PPRE1=[lindex {/1 /1 /1 /1 /2 /4 /8 /16} [expr $rcc_cfgr >> 10 & 7]]" puts -nonewline " PPRE2=[lindex {/1 /1 /1 /1 /2 /4 /8 /16} [expr $rcc_cfgr >> 13 & 7]]" puts -nonewline " MCO2=[lindex {SYSCLK PLLI2S HSE PLL} [expr $rcc_cfgr>>30 & 3]]" puts -nonewline " MCO2PRE=[lindex {/1 /1 /1 /1 /2 /3 /4 /5} [expr $rcc_cfgr>>27 & 7]]" puts -nonewline " MCO1=[lindex {HSI LSE HSE PLL} [expr $rcc_cfgr>>21 & 3]]" puts -nonewline " MCO1PRE=[lindex {/1 /1 /1 /1 /2 /3 /4 /5} [expr $rcc_cfgr>>24 & 7]]" labelled_bits $rcc_cfgr {{0x800000 I2SSCR}} puts "" puts -nonewline [format "CIR\t0x%08x" $rcc_cir] labelled_bits $rcc_cir {{0x800000 CSSC} {0x80000 HSERDYC} {0x40000 HSIRDYC} {0x20000 LSERDYC} {0x10000 LSIRDYC} {0x2000 PLLI2SRDYIE} {0x1000 PLLRDYIE} {0x800 HSERDYIE} {0x400 HSIRDYIE} {0x200 LSERDYIE} {0x100 LSIRDYIE} {0x80 CSSF} {0x20 PLLI2SRDYF} {0x10 PLLRDYF} {8 HSERDYF} {4 HSIRDYF} {2 LSERDYF} {1 LSIRDYF} } puts "" if $rcc_ahb1rstr {puts [format "AHB1RSTR\t0x%08x" $rcc_ahb1rstr] } if $rcc_ahb2rstr {puts [format "AHB2RSTR\t0x%08x" $rcc_ahb2rstr] } if $rcc_ahb3rstr {puts [format "AHB3RSTR\t0x%08x" $rcc_ahb3rstr] } if $rcc_apb1rstr {puts [format "APB1RSTR\t0x%08x" $rcc_apb1rstr] } if $rcc_apb2rstr {puts [format "APB2RSTR\t0x%08x" $rcc_apb2rstr] } if $rcc_ahb1enr { puts -nonewline [format "AHB1ENR\t0x%08x" $rcc_ahb1enr] labelled_bits $rcc_ahb1enr {{0x100000 CCMDATARAMEN} {0x1000 CRCEN} {0x80 GPIOHEN} {8 GPIODEN} {4 GPIOCEN} {2 GPIOBEN} {1 GPIOAEN}} puts "" } if $rcc_ahb2enr { puts -nonewline [format "AHB2ENR\t0x%08x" $rcc_ahb2enr] labelled_bits $rcc_ahb2enr {{0x80 OTGFSEN} {0x40 RNGEN} {0x20 HASHEN} {0x10 CRYPEN} {1 DMCIEN}} puts "" } if $rcc_ahb3enr {puts [format "AHB3ENR\t0x%08x" $rcc_ahb3enr] } if $rcc_apb1enr { puts -nonewline [format "APB1ENR\t0x%08x" $rcc_apb1enr] labelled_bits $rcc_apb1enr {{0x10000000 PWREN} {0x100000 USART5EN} {0x80000 USART4EN} {0x40000 USART3EN} {0x20000 USART2EN} {1 TIM2EN} } puts "" } if $rcc_apb2enr {puts [format "APB2ENR\t0x%08x" $rcc_apb2enr] } if $rcc_ahb1lpenr {puts [format "AHB1LPENR\t0x%08x" $rcc_ahb1lpenr] } if $rcc_ahb2lpenr {puts [format "AHB2LPENR\t0x%08x" $rcc_ahb2lpenr] } if $rcc_ahb3lpenr {puts [format "AHB3LPENR\t0x%08x" $rcc_ahb3lpenr] } if $rcc_apb1lpenr {puts [format "APB1LPENR\t0x%08x" $rcc_apb1lpenr] } if $rcc_apb2lpenr {puts [format "APB2LPENR\t0x%08x" $rcc_apb2lpenr] } puts -nonewline [format "BDCR\t0x%08x" $rcc_bdcr] puts -nonewline " RTCSEL=[lindex {None LSE LSI HSE} [expr $rcc_bdcr >> 8 & 3]]" labelled_bits $rcc_bdcr {{0x10000 BDRST} {0x8000 RTCEN} {4 LSEBYP} {2 LSERDY} {1 LSEON}} puts "" puts -nonewline [format "CSR\t0x%08x" $rcc_csr] labelled_bits $rcc_csr { {0x80000000 LPWRRSTF} { 0x40000000 WWDGRSTF} {0x20000000 IWDGSRTF} {0x10000000 SFTRSTF} {0x08000000 PORRSTF} {0x04000000 PINRSTF} {0X02000000 BORRSTF} {0x01000000 RMVF} {2 LSIRDY} {1 LSION}} puts "" if 1 {puts [format "SSCGR\t0x%08x" $rcc_sscgr] } if 1 {puts [format "PLLI2SCFGR\t0x%08x" $rcc_plli2scfgr] } puts ""