src/helper/configuration.h
[fw/openocd] / src / tcl / mmr_helpers.tcl
1
2 proc proc_exists { NAME } {
3     set n [info commands $NAME]
4     set l [string length $n]
5     return [expr $l != 0]
6 }
7
8 # Give: REGISTER name - must be a global variable.
9 proc show_mmr32_reg { NAME } {
10     
11     global $NAME
12     # we want $($NAME)
13     set a [set [set NAME]]
14
15     if ![catch { set v [memread32 $a] } msg ] {
16         puts [format "%10s: (0x%08x): 0x%08x" $NAME $a $v]
17
18         # Was a helper defined?
19         set fn show_${NAME}_helper
20         if [ proc_exists $fn ] {
21             # Then call it
22             $fn $NAME $a $v
23         }
24         return $v;
25     } else {
26         error [format "%s (%s)" $msg $NAME ]
27     }
28 }
29
30
31 # Give: NAMES - an array of names accessable
32 #               in the callers symbol-scope.
33 #       VAL - the bits to display.
34
35 proc show_mmr32_bits { NAMES VAL } {
36
37     upvar $NAMES MYNAMES
38
39     set w 0
40     foreach {IDX N} $MYNAMES {
41         set l [string length $N]
42         if { $l > $w } { set w $l }
43     }
44     
45     for { set x 24 } { $x >= 0 } { incr x -8 } {
46         puts -nonewline "  "
47         for { set y 7 } { $y >= 0 } { incr y -1 } {
48             set s $MYNAMES([expr $x + $y])
49             puts -nonewline [format "%2d: %-*s | " [expr $x + $y] $w $s ]
50         }
51         puts ""
52
53         puts -nonewline "  "
54         for { set y 7 } { $y >= 0 } { incr y -1 } {
55             puts -nonewline [format "    %d%*s | " [expr !!($VAL & (1 << ($x + $y)))] [expr $w -1] ""]
56         }
57         puts ""
58     }
59 }