OpenCores
URL https://opencores.org/ocsvn/openmsp430/openmsp430/trunk

Subversion Repositories openmsp430

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openmsp430/trunk/tools/bin
    from Rev 97 to Rev 110
    Reverse comparison

Rev 97 → Rev 110

/openmsp430-minidebug.exe Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
openmsp430-minidebug.exe Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: openmsp430-gdbproxy.exe =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: openmsp430-gdbproxy.exe =================================================================== --- openmsp430-gdbproxy.exe (revision 97) +++ openmsp430-gdbproxy.exe (nonexistent)
openmsp430-gdbproxy.exe Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: openmsp430-loader.exe =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: openmsp430-loader.exe =================================================================== --- openmsp430-loader.exe (revision 97) +++ openmsp430-loader.exe (nonexistent)
openmsp430-loader.exe Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: openmsp430-gdbproxy.tcl =================================================================== --- openmsp430-gdbproxy.tcl (revision 97) +++ openmsp430-gdbproxy.tcl (revision 110) @@ -42,6 +42,7 @@ global server global verbose global shell +global omsp_info # Initializations set serial_status 0 @@ -158,10 +159,28 @@ } # Display info - puts "INFO: Sucessfully connected with the openMSP430 target." + if {$omsp_info(alias)==""} { + puts "INFO: Sucessfully connected with the openMSP430 target." + } else { + puts "INFO: Sucessfully connected with the openMSP430 target ($omsp_info(alias))." + } set sizes [GetCPU_ID_SIZE] - puts "INFO: Program Memory Size - [lindex $sizes 0] B" - puts "INFO: Data Memory Size - [lindex $sizes 1] B" + if {$omsp_info(asic)} { + puts "INFO: CPU Version - $omsp_info(cpu_ver) / ASIC" + } else { + puts "INFO: CPU Version - $omsp_info(cpu_ver) / FPGA" + } + puts "INFO: User Version - $omsp_info(user_ver)" + if {$omsp_info(cpu_ver)==1} { + puts "INFO: Hardware Multiplier - --" + } elseif {$omsp_info(mpy)} { + puts "INFO: Hardware Multiplier - Yes" + } else { + puts "INFO: Hardware Multiplier - No" + } + puts "INFO: Program Memory Size - $omsp_info(pmem_size) B" + puts "INFO: Data Memory Size - $omsp_info(dmem_size) B" + puts "INFO: Peripheral Address Space - $omsp_info(per_size) B" puts "INFO: $hw_break(num) Hardware Brea/Watch-point unit(s) detected" puts "" @@ -188,20 +207,24 @@ wm title . "openMSP430 GDB Proxy" wm iconname . "openMSP430 GDB Proxy" -# Create the Main Menu budget +# Create the Main Menu frame frame .menu pack .menu -side top -padx 10 -pady 10 -fill x -# Create the Serial port Menu budget -frame .serial -pack .serial -side top -padx 10 -pady 10 -fill x +# Create the Connection frame +frame .connect -bd 2 -relief ridge ;# solid +pack .connect -side top -padx 10 -pady {5 0} -fill x -# Create the Server Menu budget -frame .server -pack .server -side top -padx 10 -pady 10 -fill x +# Create the Info frame +frame .info -bd 2 -relief ridge ;# solid +pack .info -side top -padx 10 -pady {10 0} -fill x +# Create the Server frame +frame .server -bd 2 -relief ridge ;# solid +pack .server -side top -padx 10 -pady {10 0} -fill x + # Create the TCL script field -frame .tclscript +frame .tclscript -bd 2 -relief ridge ;# solid pack .tclscript -side top -padx 10 -pady 10 -fill x @@ -213,43 +236,76 @@ button .menu.exit -text "Exit" -command {stopServer; exit 0} pack .menu.exit -side left +# openMSP430 label +label .menu.omsp -text "openMSP430 GDB proxy" -anchor center -fg "\#6a5acd" -font {-weight bold -size 14} +pack .menu.omsp -side right -padx 20 +# Create the Configuration, Start & Info frames +frame .connect.config +pack .connect.config -side left -padx 10 -pady 0 -fill x -expand true +frame .connect.start +pack .connect.start -side right -padx 10 -pady 0 -fill x -expand true + # Serial Port fields -label .serial.l1 -text "Serial Port:" -anchor w -pack .serial.l1 -side left set serial_device [lindex [dbg_list_uart] end] -combobox .serial.p1 -textvariable serial_device -editable true -eval .serial.p1 list insert end [dbg_list_uart] -pack .serial.p1 -side left -padx 5 -label .serial.l2 -text " Baudrate:" -anchor w -pack .serial.l2 -side left +frame .connect.config.serial_port +pack .connect.config.serial_port -side top -padx 5 -pady {10 0} -fill x +label .connect.config.serial_port.l1 -text "Serial Port:" -anchor w +pack .connect.config.serial_port.l1 -side left -padx 5 +combobox .connect.config.serial_port.p1 -textvariable serial_device -editable true -width 20 +eval .connect.config.serial_port.p1 list insert end [dbg_list_uart] +pack .connect.config.serial_port.p1 -side right -padx 20 + +# Serial Baudrate fields set serial_baudrate 115200 -combobox .serial.p2 -textvariable serial_baudrate -editable true -eval .serial.p2 list insert end [list 9600 19200 38400 57600 115200 \ - 230400 460800 500000 576000 921600 \ - 1000000 1152000] -pack .serial.p2 -side left -padx 5 -label .serial.l3 -text "Disconnected" -anchor w -fg Red -pack .serial.l3 -side left -padx 10 +frame .connect.config.serial_baudrate +pack .connect.config.serial_baudrate -side top -padx 5 -pady {5 0} -fill x +label .connect.config.serial_baudrate.l2 -text " Baudrate:" -anchor w +pack .connect.config.serial_baudrate.l2 -side left +combobox .connect.config.serial_baudrate.p2 -textvariable serial_baudrate -editable true -width 20 +eval .connect.config.serial_baudrate.p2 list insert end [list 9600 19200 38400 57600 115200 \ + 230400 460800 500000 576000 921600 \ + 1000000 1152000] +pack .connect.config.serial_baudrate.p2 -side right -padx 20 - # Server Port field -frame .server.port -pack .server.port -side top -fill x -label .server.port.l1 -text "Proxy Server Port:" -anchor w -pack .server.port.l1 -side left -entry .server.port.p -textvariable server(port) -relief sunken -pack .server.port.p -side left -padx 5 -label .server.port.l2 -text "Not running" -anchor w -fg Red -pack .server.port.l2 -side left -padx 10 -button .server.port.start -text "Start Proxy Server" -command {startServerGUI} -pack .server.port.start -side right +frame .connect.config.server_port +pack .connect.config.server_port -side top -padx 10 -pady {15 10} -fill x +label .connect.config.server_port.l1 -text "Proxy Server Port:" -anchor w +pack .connect.config.server_port.l1 -side left +entry .connect.config.server_port.p -textvariable server(port) -relief sunken -width 20 +pack .connect.config.server_port.p -side right -padx 5 -padx 20 +# Connect to CPU & start proxy server +button .connect.start.but -text "Connect to CPU\n and \nStart Proxy Server" -command {startServerGUI} +pack .connect.start.but -side right -padx 30 + + +# CPU Info +frame .info.cpu +pack .info.cpu -side top -padx 10 -pady {5 0} -fill x +label .info.cpu.l -text "CPU Info:" -anchor w +pack .info.cpu.l -side left -padx {10 10} +label .info.cpu.con -text "Disconnected" -anchor w -fg Red +pack .info.cpu.con -side left +button .info.cpu.more -text "More..." -width 9 -command {displayMore} -state disabled +pack .info.cpu.more -side right -padx {0 30} + + +# Server Info +frame .info.server +pack .info.server -side top -padx 10 -pady {0 10} -fill x +label .info.server.l -text "Server Info:" -anchor w +pack .info.server.l -side left -padx {10 10} +label .info.server.con -text "Not running" -anchor w -fg Red +pack .info.server.con -side left + + # Create the text widget to log received messages frame .server.t pack .server.t -side top -padx 10 -pady 10 -fill x -set server(log) [text .server.t.log -width 80 -height 10 -borderwidth 2 \ +set server(log) [text .server.t.log -width 80 -height 15 -borderwidth 2 \ -setgrid true -yscrollcommand {.server.t.scroll set}] pack .server.t.log -side left -fill both -expand true scrollbar .server.t.scroll -command {.server.t.log yview} @@ -258,7 +314,7 @@ # Log commands frame .server.cmd -pack .server.cmd -side top -fill x +pack .server.cmd -side top -pady {0 10} -fill x button .server.cmd.clear -text "Clear log" -command {$server(log) delete 1.0 end} pack .server.cmd.clear -side left -padx 10 checkbutton .server.cmd.verbose -text "Verbose" -variable verbose @@ -267,7 +323,7 @@ # Load TCL script fields frame .tclscript.ft -pack .tclscript.ft -side top -fill x +pack .tclscript.ft -side top -padx 10 -pady 10 -fill x label .tclscript.ft.l -text "TCL script:" -state disabled pack .tclscript.ft.l -side left -padx "0 10" entry .tclscript.ft.file -width 58 -relief sunken -textvariable tcl_file_name -state disabled @@ -277,5 +333,6 @@ frame .tclscript.fb pack .tclscript.fb -side top -fill x button .tclscript.fb.read -text "Source TCL script !" -state disabled -command {if {[file exists $tcl_file_name]} {source $tcl_file_name}} -pack .tclscript.fb.read -side left -padx 5 -fill x +pack .tclscript.fb.read -side left -padx 20 -pady {0 10} -fill x +wm resizable . 0 0
/openmsp430-minidebug.tcl
43,17 → 43,35
global serial_baudrate
global serial_device
global serial_status
global omsp_info
global cpu_status
global reg
global mem
global mem_sizes
global sr
global codeSelect
global binFileType
global brkpt
global color
 
# Color definitions
set color(PC) "\#c1ffc1"
set color(Brk0_active) "\#ba55d3"
set color(Brk0_disabled) "\#dda0dd"
set color(Brk1_active) "\#ff7256"
set color(Brk1_disabled) "\#ffc1c1"
set color(Brk2_active) "\#ffff30"
set color(Brk2_disabled) "\#ffffe0"
 
# Initializations
set codeSelect 2
set serial_status 0
set cpu_status 1
for {set i 0} {$i<3} {incr i} {
set brkpt(addr_$i) 0x0000
set brkpt(data_$i) 0x0000
set brkpt(en_$i) 0
}
for {set i 0} {$i<16} {incr i} {
set reg($i) 0x0000
set mem(address_$i) [format "0x%04x" [expr 0x0200+$i*2]]
90,24 → 108,31
global serial_status
global reg
global mem
global brkpt
global mem_sizes
global color
global omsp_info
 
set serial_status [GetDevice]
 
if {$serial_status} {
set sizes [GetCPU_ID_SIZE]
set mem_sizes [GetCPU_ID_SIZE]
 
if {[lindex $sizes 0]==-1 | [lindex $sizes 1]==-1} {
.ctrl.mem_sz.l3 configure -text "Connection problem" -fg red
if {[lindex $mem_sizes 0]==-1 | [lindex $mem_sizes 1]==-1} {
.ctrl.connect.info.l1.con configure -text "Connection problem" -fg red
 
} else {
 
# Disable connection section
.ctrl.serial.p1 configure -state disabled
.ctrl.serial.p2 configure -state disabled
.ctrl.serial.connect configure -state disabled
.ctrl.mem_sz.l3 configure -text "Connected" -fg green
.ctrl.mem_sz.l8 configure -text [lindex $sizes 1]
.ctrl.mem_sz.l5 configure -text [lindex $sizes 0]
.ctrl.connect.serial.p1 configure -state disabled
.ctrl.connect.serial.p2 configure -state disabled
.ctrl.connect.serial.connect configure -state disabled
if {$omsp_info(alias)==""} {
.ctrl.connect.info.l1.con configure -text "Connected" -fg "\#00ae00"
} else {
.ctrl.connect.info.l1.con configure -text "Connected to $omsp_info(alias)" -fg "\#00ae00"
}
.ctrl.connect.info.l1.more configure -state normal
 
# Activate ELF file section
.ctrl.load.ft.l configure -state normal
117,46 → 142,57
.ctrl.load.fb.l configure -state normal
 
# Activate CPU control section
.ctrl.cpu.l1 configure -state normal
.ctrl.cpu.reset configure -state normal
.ctrl.cpu.run configure -state normal
.ctrl.cpu.l2 configure -state normal
.ctrl.cpu.l3 configure -state normal
.ctrl.cpu.cpu.l1 configure -state normal
.ctrl.cpu.cpu.reset configure -state normal
.ctrl.cpu.cpu.run configure -state normal
.ctrl.cpu.cpu.l2 configure -state normal
.ctrl.cpu.cpu.l3 configure -state normal
if {[IsHalted]} {
.ctrl.cpu.step configure -state normal
.ctrl.cpu.run configure -text "Run"
.ctrl.cpu.l3 configure -text "Stopped" -fg yellow
.ctrl.cpu.cpu.step configure -state normal
.ctrl.cpu.cpu.run configure -text "Run"
.ctrl.cpu.cpu.l3 configure -text "Stopped" -fg "\#cdad00"
set cpu_status 0
} else {
.ctrl.cpu.step configure -state disabled
.ctrl.cpu.run configure -text "Stop"
.ctrl.cpu.l3 configure -text "Running" -fg green
.ctrl.cpu.cpu.step configure -state disabled
.ctrl.cpu.cpu.run configure -text "Stop"
.ctrl.cpu.cpu.l3 configure -text "Running" -fg "\#00ae00"
set cpu_status 1
}
 
# Activate CPU Breakpoints section
.ctrl.cpu.brkpt.l1 configure -state normal
for {set i 0} {$i<3} {incr i} {
set brkpt(addr_$i) [format "0x%04x" [expr 0x10000-[lindex $mem_sizes 0]]]
.ctrl.cpu.brkpt.addr$i configure -state normal
.ctrl.cpu.brkpt.addr$i configure -bg $color(Brk$i\_disabled)
.ctrl.cpu.brkpt.addr$i configure -readonlybackground $color(Brk$i\_active)
.ctrl.cpu.brkpt.chk$i configure -state normal
}
 
# Activate CPU status register section
.ctrl.reg_stat.l1 configure -state normal
.ctrl.reg_stat.v configure -state normal
.ctrl.reg_stat.scg1 configure -state normal
.ctrl.reg_stat.oscoff configure -state normal
.ctrl.reg_stat.cpuoff configure -state normal
.ctrl.reg_stat.gie configure -state normal
.ctrl.reg_stat.n configure -state normal
.ctrl.reg_stat.z configure -state normal
.ctrl.reg_stat.c configure -state normal
.ctrl.cpu.reg_stat.l1 configure -state normal
.ctrl.cpu.reg_stat.v configure -state normal
.ctrl.cpu.reg_stat.scg1 configure -state normal
.ctrl.cpu.reg_stat.oscoff configure -state normal
.ctrl.cpu.reg_stat.cpuoff configure -state normal
.ctrl.cpu.reg_stat.gie configure -state normal
.ctrl.cpu.reg_stat.n configure -state normal
.ctrl.cpu.reg_stat.z configure -state normal
.ctrl.cpu.reg_stat.c configure -state normal
 
# Activate CPU registers and memory section
.ctrl.reg_mem.reg.title.e configure -state normal
.ctrl.reg_mem.mem.title.l configure -state normal
.ctrl.reg_mem.mem.title.e configure -state normal
.ctrl.reg_mem.reg.refresh configure -state normal
.ctrl.reg_mem.mem.refresh configure -state normal
.ctrl.cpu.reg_mem.reg.title.e configure -state normal
.ctrl.cpu.reg_mem.mem.title.l configure -state normal
.ctrl.cpu.reg_mem.mem.title.e configure -state normal
.ctrl.cpu.reg_mem.reg.refresh configure -state normal
.ctrl.cpu.reg_mem.mem.refresh configure -state normal
for {set i 0} {$i<16} {incr i} {
.ctrl.reg_mem.reg.f$i.l$i configure -state normal
.ctrl.reg_mem.reg.f$i.e$i configure -state normal
.ctrl.reg_mem.mem.f$i.addr_e$i configure -state normal
.ctrl.reg_mem.mem.f$i.data_e$i configure -state normal
.ctrl.cpu.reg_mem.reg.f$i.l$i configure -state normal
.ctrl.cpu.reg_mem.reg.f$i.e$i configure -state normal
.ctrl.cpu.reg_mem.mem.f$i.addr_e$i configure -state normal
.ctrl.cpu.reg_mem.mem.f$i.data_e$i configure -state normal
}
.ctrl.cpu.reg_mem.reg.f0.e0 configure -bg $color(PC)
refreshReg
refreshMem
 
174,27 → 210,158
}
 
} else {
.ctrl.mem_sz.l3 configure -text "Connection problem" -fg red
.ctrl.connect.info.l1.con configure -text "Connection problem" -fg red
}
}
 
proc highlightLine { line } {
.code.text tag remove highlight 1.0 end
.code.text tag add highlight $line.0 [expr $line+1].0
.code.text see $line.0
proc displayMore { } {
 
global omsp_info
 
# Destroy windows if already existing
if {[lsearch -exact [winfo children .] .omsp_extra_info]!=-1} {
destroy .omsp_extra_info
}
 
# Create master window
toplevel .omsp_extra_info
wm title .omsp_extra_info "openMSP430 extra info"
wm geometry .omsp_extra_info +380+200
wm resizable .omsp_extra_info 0 0
 
# Title
set title "openMSP430"
if {$omsp_info(alias)!=""} {
set title $omsp_info(alias)
}
label .omsp_extra_info.title -text "$title" -anchor center -fg "\#00ae00" -font {-weight bold -size 16}
pack .omsp_extra_info.title -side top -padx {20 20} -pady {20 10}
 
# Add extra info
frame .omsp_extra_info.extra
pack .omsp_extra_info.extra -side top -padx 10 -pady {10 10}
scrollbar .omsp_extra_info.extra.yscroll -orient vertical -command {.omsp_extra_info.extra.text yview}
pack .omsp_extra_info.extra.yscroll -side right -fill both
text .omsp_extra_info.extra.text -wrap word -height 20 -font TkFixedFont -yscrollcommand {.omsp_extra_info.extra.yscroll set}
pack .omsp_extra_info.extra.text -side right
 
# Create OK button
button .omsp_extra_info.okay -text "OK" -font {-weight bold} -command {destroy .omsp_extra_info}
pack .omsp_extra_info.okay -side bottom -expand true -fill x -padx 5 -pady {0 10}
 
# Fill the text widget will configuration info
.omsp_extra_info.extra.text tag configure bold -font {-family TkFixedFont -weight bold}
.omsp_extra_info.extra.text insert end "Configuration\n\n" bold
.omsp_extra_info.extra.text insert end [format "CPU Version : %5s\n" $omsp_info(cpu_ver)]
.omsp_extra_info.extra.text insert end [format "User Version : %5s\n" $omsp_info(user_ver)]
if {$omsp_info(cpu_ver)==1} {
.omsp_extra_info.extra.text insert end [format "Implementation : %5s\n" --]
} elseif {$omsp_info(asic)==0} {
.omsp_extra_info.extra.text insert end [format "Implementation : %5s\n" FPGA]
} elseif {$omsp_info(asic)==1} {
.omsp_extra_info.extra.text insert end [format "Implementation : %5s\n" ASIC]
}
if {$omsp_info(mpy)==1} {
.omsp_extra_info.extra.text insert end [format "Hardware Multiplier support: %5s\n" Yes]
} elseif {$omsp_info(mpy)==0} {
.omsp_extra_info.extra.text insert end [format "Hardware Multiplier support: %5s\n" No]
} else {
.omsp_extra_info.extra.text insert end [format "Hardware Multiplier support: %5s\n" --]
}
.omsp_extra_info.extra.text insert end [format "Program memory size : %5s B\n" $omsp_info(pmem_size)]
.omsp_extra_info.extra.text insert end [format "Data memory size : %5s B\n" $omsp_info(dmem_size)]
.omsp_extra_info.extra.text insert end [format "Peripheral address space : %5s B\n" $omsp_info(per_size)]
if {$omsp_info(alias)==""} {
.omsp_extra_info.extra.text insert end [format "Alias : %5s\n\n\n" None]
} else {
.omsp_extra_info.extra.text insert end [format "Alias : %5s\n\n\n" $omsp_info(alias)]
}
 
.omsp_extra_info.extra.text insert end "Extra Info\n\n" bold
 
if {$omsp_info(alias)!=""} {
 
set aliasEXTRA [lsort -increasing [array names omsp_info -glob "extra,*"]]
if {[llength $aliasEXTRA]} {
 
foreach currentEXTRA $aliasEXTRA {
regexp {^.+,.+,(.+)$} $currentEXTRA whole_match extraATTR
.omsp_extra_info.extra.text insert end [format "%-15s: %s\n" $extraATTR $omsp_info($currentEXTRA)]
}
.omsp_extra_info.extra.text insert end "\n\n"
}
} else {
.omsp_extra_info.extra.text insert end "No alias found in 'omsp_alias.xml' file"
}
}
 
proc highlightPC { pc_val } {
proc highlightLine { line tagNameNew tagNameOld type } {
.code.text tag remove $tagNameOld 1.0 end
.code.text tag remove $tagNameNew 1.0 end
 
switch -exact -- $type {
"0" {.code.text tag add $tagNameNew $line.0 $line.4}
"1" {.code.text tag add $tagNameNew $line.2 $line.4}
"2" {.code.text tag add $tagNameNew $line.3 $line.4}
default {.code.text tag add $tagNameNew $line.4 [expr $line+1].0}
}
}
 
proc highlightCode { } {
global codeSelect
global reg
global brkpt
global color
 
if {$codeSelect!=1} {
 
regsub {0x} $pc_val {} pc_val
# Update PC
regsub {0x} $reg(0) {} pc_val
set code_match [.code.text search "$pc_val:" 1.0 end]
set code_line 1
regexp {(\d+).(\d+)} $code_match whole_match code_line code_column
highlightLine $code_line
highlightLine $code_line highlightPC highlightPC 3
.code.text see $code_line.0
 
# Some pre-processing
set brkType(0) 0
if {$brkpt(addr_0)==$brkpt(addr_1)} {
set brkType(1) 1
} else {
set brkType(1) 0
}
if {$brkType(1)==1} {
if {$brkpt(addr_1)==$brkpt(addr_2)} {
set brkType(2) 2
} else {
set brkType(2) 0
}
} else {
if {$brkpt(addr_0)==$brkpt(addr_2)} {
set brkType(2) 1
} else {
if {$brkpt(addr_1)==$brkpt(addr_2)} {
set brkType(2) 1
} else {
set brkType(2) 0
}
}
}
 
# Update Breakpoints if required
for {set i 0} {$i<3} {incr i} {
regsub {0x} $brkpt(addr_$i) {} brkpt_val
set code_match [.code.text search "$brkpt_val:" 1.0 end]
set code_line 1
regexp {(\d+).(\d+)} $code_match whole_match code_line code_column
if {$brkpt(en_$i)==1} {
highlightLine $code_line "highlightBRK${i}_ACT" "highlightBRK${i}_DIS" $brkType($i)
} else {
highlightLine $code_line "highlightBRK${i}_DIS" "highlightBRK${i}_ACT" $brkType($i)
}
}
 
}
}
 
202,6 → 369,7
global codeSelect
global reg
global binFileType
global brkpt
 
set temp_elf_file "[clock clicks].elf"
if {[catch {exec msp430-objcopy -I $binFileType -O elf32-msp430 $bin_file_name $temp_elf_file} debug_info]} {
216,6 → 384,11
 
if {$codeSelect==1} {
set debug_info ""
clearBreakpoints
for {set i 0} {$i<3} {incr i} {
set brkpt(en_$i) 0
updateBreakpoint $i
}
 
} elseif {$codeSelect==2} {
if {[catch {exec msp430-objdump $dumpOpt $temp_elf_file} debug_info]} {
233,7 → 406,7
.code.text configure -state normal
.code.text delete 1.0 end
.code.text insert end $debug_info
highlightPC $reg(0)
highlightCode
.code.text configure -state disabled
return 1
}
242,7 → 415,9
global cpu_status
global reg
global mem
global mem_sizes
global binFileType
global brkpt
 
# Detect the file format depending on the fil extention
#--------------------------------------------------------
312,9 → 487,8
set word_size [expr $byte_size/2]
 
# Make sure ELF program size is the same as the available program memory
set sizes [GetCPU_ID_SIZE]
if {[lindex $sizes 0] != [expr $hex_size/2]} {
.ctrl.load.fb.l configure -text "ERROR: ELF program size ([expr $hex_size/2] B) is different than the available program memory ([lindex $sizes 0] B)" -fg red
if {[lindex $mem_sizes 0] != [expr $hex_size/2]} {
.ctrl.load.fb.l configure -text "ERROR: ELF program size ([expr $hex_size/2] B) is different than the available program memory ([lindex $mem_sizes 0] B)" -fg red
return 0
}
 
333,25 → 507,31
 
# Load Program Memory
set StartAddr [format "0x%04x" [expr 0x10000-$byte_size]]
.ctrl.load.fb.l configure -text "Load..." -fg yellow
.ctrl.load.fb.l configure -text "Load..." -fg "\#cdad00"
update
WriteMemQuick $StartAddr $DataArray
 
# Check Data
.ctrl.load.fb.l configure -text "Verify..." -fg yellow
.ctrl.load.fb.l configure -text "Verify..." -fg "\#cdad00"
update
if {[VerifyMem $StartAddr $DataArray 1]} {
.ctrl.load.fb.l configure -text "Done" -fg green
.ctrl.load.fb.l configure -text "Done" -fg "\#00ae00"
} else {
.ctrl.load.fb.l configure -text "ERROR" -fg red
}
update
 
# Re-initialize breakpoints
for {set i 0} {$i<3} {incr i} {
.ctrl.cpu.brkpt.addr$i configure -state normal
set brkpt(en_$i) 0
}
 
# Reset & Stop CPU
ExecutePOR_Halt
.ctrl.cpu.step configure -state normal
.ctrl.cpu.run configure -text "Run"
.ctrl.cpu.l3 configure -text "Stopped" -fg yellow
.ctrl.cpu.cpu.step configure -state normal
.ctrl.cpu.cpu.run configure -text "Run"
.ctrl.cpu.cpu.l3 configure -text "Stopped" -fg "\#cdad00"
set cpu_status 0
refreshReg
refreshMem
364,15 → 544,18
 
if {$cpu_status} {
HaltCPU
.ctrl.cpu.step configure -state normal
.ctrl.cpu.run configure -text "Run"
.ctrl.cpu.l3 configure -text "Stopped" -fg yellow
.ctrl.cpu.cpu.step configure -state normal
.ctrl.cpu.cpu.run configure -text "Run"
.ctrl.cpu.cpu.l3 configure -text "Stopped" -fg "\#cdad00"
set cpu_status 0
} else {
clearBreakpoints
StepCPU
setBreakpoints
ReleaseCPU
.ctrl.cpu.step configure -state disabled
.ctrl.cpu.run configure -text "Stop"
.ctrl.cpu.l3 configure -text "Running" -fg green
.ctrl.cpu.cpu.step configure -state disabled
.ctrl.cpu.cpu.run configure -text "Stop"
.ctrl.cpu.cpu.l3 configure -text "Running" -fg "\#00ae00"
set cpu_status 1
}
refreshReg
399,7 → 582,9
global mem
 
if {$cpu_status==0} {
clearBreakpoints
StepCPU
setBreakpoints
}
refreshReg
refreshMem
446,7 → 631,7
set sr(v) [expr $reg(2) & 0x0100]
 
# Update highlighted line in the code view
highlightPC $reg(0)
highlightCode
}
 
proc write2Reg {reg_num} {
491,6 → 676,67
refreshMem
}
 
proc updateBreakpoint {brkpt_num} {
global brkpt
global mem_sizes
 
# Set the breakpoint
if {$brkpt(en_$brkpt_num)==1} {
# Make sure the specified address is an opcode
regsub {0x} $brkpt(addr_$brkpt_num) {} brkpt_val
set code_match [.code.text search "$brkpt_val:" 1.0 end]
if {![string length $code_match]} {
.ctrl.cpu.brkpt.addr$brkpt_num configure -state normal
set brkpt(en_$brkpt_num) 0
 
} else {
set brkpt(data_$brkpt_num) [ReadMem 0 $brkpt(addr_$brkpt_num)]
# Only set a breakpoint if there is not already one there :-P
if {$brkpt(data_$brkpt_num)=="0x4343"} {
.ctrl.cpu.brkpt.addr$brkpt_num configure -state normal
set brkpt(en_$brkpt_num) 0
} else {
.ctrl.cpu.brkpt.addr$brkpt_num configure -state readonly
WriteMem 0 $brkpt(addr_$brkpt_num) 0x4343
}
}
 
# Clear the breakpoint
} else {
.ctrl.cpu.brkpt.addr$brkpt_num configure -state normal
WriteMem 0 $brkpt(addr_$brkpt_num) $brkpt(data_$brkpt_num)
}
 
highlightCode
}
 
proc clearBreakpoints {} {
global brkpt
global mem_sizes
 
for {set i 0} {$i<3} {incr i} {
if {$brkpt(en_$i)==1} {
WriteMem 0 $brkpt(addr_$i) $brkpt(data_$i)
}
}
}
 
proc setBreakpoints {} {
global brkpt
global mem_sizes
 
for {set i 0} {$i<3} {incr i} {
if {$brkpt(en_$i)==1} {
set brkpt(data_$i) [ReadMem 0 $brkpt(addr_$i)]
WriteMem 0 $brkpt(addr_$i) 0x4343
}
}
}
 
 
 
###############################################################################
# #
# CREATE GRAPHICAL INTERFACE #
508,47 → 754,59
frame .menu
pack .menu -side top -padx 10 -pady 10 -fill x
 
# Create the CPU Contorl field
# Create the CPU Control field
frame .ctrl
pack .ctrl -side left -padx 10 -pady 10 -fill x
pack .ctrl -side left -padx {5 0} -pady 10 -fill both
 
# Create the Code text field
frame .code
pack .code -side right -padx 10 -pady 10 -fill both -expand true
pack .code -side right -padx 5 -pady 10 -fill both -expand true
frame .code.rb
pack .code.rb -side bottom -padx 10 -pady 10 -fill both
 
# Create the connection frame
frame .ctrl.connect -bd 2 -relief ridge ;# solid
pack .ctrl.connect -side top -padx 10 -pady 0 -fill x
 
# Create the Serial Menu
frame .ctrl.serial
pack .ctrl.serial -side top -padx 10 -pady {10 0} -fill x
frame .ctrl.connect.serial
pack .ctrl.connect.serial -side top -padx 10 -pady {10 0} -fill x
 
# Create the memory size
frame .ctrl.mem_sz
pack .ctrl.mem_sz -side top -padx 10 -pady {10 20} -fill x
frame .ctrl.connect.info
pack .ctrl.connect.info -side top -padx 10 -pady {10 10} -fill x
 
# Create the Load executable field
frame .ctrl.load
pack .ctrl.load -side top -padx 10 -pady {10 20} -fill x
frame .ctrl.load -bd 2 -relief ridge ;# solid
pack .ctrl.load -side top -padx 10 -pady {10 10} -fill x
 
# Create the cpu field
frame .ctrl.cpu -bd 2 -relief ridge ;# solid
pack .ctrl.cpu -side top -padx 10 -pady {0 10} -fill x
 
# Create the cpu control field
frame .ctrl.cpu
pack .ctrl.cpu -side top -padx 10 -pady {10 20} -fill x
frame .ctrl.cpu.cpu
pack .ctrl.cpu.cpu -side top -padx 10 -pady {20 10} -fill x
 
# Create the breakpoint control field
frame .ctrl.cpu.brkpt
pack .ctrl.cpu.brkpt -side top -padx 10 -pady {10 20} -fill x
 
# Create the cpu status field
frame .ctrl.reg_stat
pack .ctrl.reg_stat -side top -padx 10 -pady {10 10} -fill x
frame .ctrl.cpu.reg_stat
pack .ctrl.cpu.reg_stat -side top -padx 10 -pady {10 10} -fill x
 
# Create the cpu registers/memory fields
frame .ctrl.reg_mem
pack .ctrl.reg_mem -side top -padx 10 -pady {5 20} -fill x
frame .ctrl.reg_mem.reg
pack .ctrl.reg_mem.reg -side left -padx {10 30} -fill x
frame .ctrl.reg_mem.mem
pack .ctrl.reg_mem.mem -side left -padx {30 10} -fill x
frame .ctrl.cpu.reg_mem
pack .ctrl.cpu.reg_mem -side top -padx 10 -pady {5 10} -fill x
frame .ctrl.cpu.reg_mem.reg
pack .ctrl.cpu.reg_mem.reg -side left -padx {10 30} -fill x
frame .ctrl.cpu.reg_mem.mem
pack .ctrl.cpu.reg_mem.mem -side left -padx {30 10} -fill x
 
# Create the TCL script field
frame .ctrl.tclscript
pack .ctrl.tclscript -side top -padx 10 -pady {10 20} -fill x
frame .ctrl.tclscript -bd 2 -relief ridge ;# solid
pack .ctrl.tclscript -side top -padx 10 -pady {0 20} -fill x
 
 
####################################
559,56 → 817,53
button .menu.exit -text "Exit" -command {exit 0}
pack .menu.exit -side left
 
# openMSP430 label
label .menu.omsp -text "openMSP430 mini debugger" -anchor center -fg "\#6a5acd" -font {-weight bold -size 16}
pack .menu.omsp -side right -padx 20
 
# Serial Port fields
label .ctrl.serial.l1 -text "Serial Port:" -anchor w
pack .ctrl.serial.l1 -side left
label .ctrl.connect.serial.l1 -text "Serial Port:" -anchor w
pack .ctrl.connect.serial.l1 -side left
set serial_device [lindex [dbg_list_uart] end]
combobox .ctrl.serial.p1 -textvariable serial_device -editable true
eval .ctrl.serial.p1 list insert end [dbg_list_uart]
pack .ctrl.serial.p1 -side left -padx 5
combobox .ctrl.connect.serial.p1 -textvariable serial_device -editable true
eval .ctrl.connect.serial.p1 list insert end [dbg_list_uart]
pack .ctrl.connect.serial.p1 -side left -padx 5
 
label .ctrl.serial.l2 -text " Baudrate:" -anchor w
pack .ctrl.serial.l2 -side left
label .ctrl.connect.serial.l2 -text " Baudrate:" -anchor w
pack .ctrl.connect.serial.l2 -side left
set serial_baudrate 115200
combobox .ctrl.serial.p2 -textvariable serial_baudrate -editable true
eval .ctrl.serial.p2 list insert end [list 9600 19200 38400 57600 115200 \
230400 460800 500000 576000 921600 \
1000000 1152000]
pack .ctrl.serial.p2 -side left -padx 5
combobox .ctrl.connect.serial.p2 -textvariable serial_baudrate -editable true
eval .ctrl.connect.serial.p2 list insert end [list 9600 19200 38400 57600 115200 \
230400 460800 500000 576000 921600 \
1000000 1152000 2000000]
pack .ctrl.connect.serial.p2 -side left -padx 5
 
button .ctrl.serial.connect -text "Connect" -command {connect_openMSP430}
pack .ctrl.serial.connect -side left -padx 10
button .ctrl.connect.serial.connect -text "Connect" -width 9 -command {connect_openMSP430}
pack .ctrl.connect.serial.connect -side right -padx 5
 
# Memory size status
label .ctrl.mem_sz.l2 -text "CPU Info:" -anchor w
pack .ctrl.mem_sz.l2 -side left -padx "0 10"
label .ctrl.mem_sz.l3 -text "Disconnected" -anchor w -fg Red
pack .ctrl.mem_sz.l3 -side left -padx "0 30"
label .ctrl.mem_sz.l4 -text "Program Memory size:" -anchor w
pack .ctrl.mem_sz.l4 -side left
label .ctrl.mem_sz.l5 -text "--" -anchor w
pack .ctrl.mem_sz.l5 -side left
label .ctrl.mem_sz.l6 -text "B" -anchor w
pack .ctrl.mem_sz.l6 -side left -padx "0 30"
label .ctrl.mem_sz.l7 -text "Data Memory size:" -anchor w
pack .ctrl.mem_sz.l7 -side left
label .ctrl.mem_sz.l8 -text "--" -anchor w
pack .ctrl.mem_sz.l8 -side left
label .ctrl.mem_sz.l9 -text "B" -anchor w
pack .ctrl.mem_sz.l9 -side left
# CPU status & info
frame .ctrl.connect.info.l1
pack .ctrl.connect.info.l1 -side top -padx 0 -pady {0 0} -fill x
 
label .ctrl.connect.info.l1.cpu -text "CPU Info:" -anchor w
pack .ctrl.connect.info.l1.cpu -side left -padx "0 10"
label .ctrl.connect.info.l1.con -text "Disconnected" -anchor w -fg Red
pack .ctrl.connect.info.l1.con -side left
button .ctrl.connect.info.l1.more -text "More..." -width 9 -command {displayMore} -state disabled
pack .ctrl.connect.info.l1.more -side right -padx 5
 
 
# Load ELF file fields
frame .ctrl.load.ft
pack .ctrl.load.ft -side top -fill x
pack .ctrl.load.ft -side top -fill x -padx "10 0" -pady "10 0"
label .ctrl.load.ft.l -text "ELF file:" -state disabled
pack .ctrl.load.ft.l -side left -padx "0 10"
entry .ctrl.load.ft.file -width 58 -relief sunken -textvariable bin_file_name -state disabled
pack .ctrl.load.ft.file -side left -padx 10
button .ctrl.load.ft.browse -text "Browse" -state disabled -command {set bin_file_name [tk_getOpenFile -filetypes {{{ELF/Intel-Hex Files} {.elf .ihex .hex}} {{All Files} *}}]}
pack .ctrl.load.ft.browse -side left -padx 5
button .ctrl.load.ft.browse -text "Browse" -width 9 -state disabled -command {set bin_file_name [tk_getOpenFile -filetypes {{{ELF/Intel-Hex Files} {.elf .ihex .hex}} {{All Files} *}}]}
pack .ctrl.load.ft.browse -side right -padx {5 15}
frame .ctrl.load.fb
pack .ctrl.load.fb -side top -fill x
pack .ctrl.load.fb -side top -fill x -padx "10 0" -pady "5 10"
button .ctrl.load.fb.read -text "Load ELF File !" -state disabled -command {loadProgram $bin_file_name}
pack .ctrl.load.fb.read -side left -padx 5 -fill x
label .ctrl.load.fb.l -text "Not loaded" -anchor w -fg Red -state disabled
615,46 → 870,66
pack .ctrl.load.fb.l -side left
 
# CPU Control
label .ctrl.cpu.l1 -text "CPU Control:" -anchor w -state disabled
pack .ctrl.cpu.l1 -side left
button .ctrl.cpu.reset -text "Reset" -state disabled -command {resetCPU}
pack .ctrl.cpu.reset -side left -padx 5 -fill x
button .ctrl.cpu.run -text "Stop" -state disabled -command {runCPU}
pack .ctrl.cpu.run -side left -padx 5 -fill x
button .ctrl.cpu.step -text "Step" -state disabled -command {singleStepCPU}
pack .ctrl.cpu.step -side left -padx 5 -fill x
label .ctrl.cpu.l2 -text "CPU Status:" -anchor w -state disabled
pack .ctrl.cpu.l2 -side left -padx "40 0"
label .ctrl.cpu.l3 -text "--" -anchor w -state disabled
pack .ctrl.cpu.l3 -side left
label .ctrl.cpu.cpu.l1 -text "CPU Control:" -anchor w -state disabled
pack .ctrl.cpu.cpu.l1 -side left
button .ctrl.cpu.cpu.reset -text "Reset" -state disabled -command {resetCPU}
pack .ctrl.cpu.cpu.reset -side left -padx 5 -fill x
button .ctrl.cpu.cpu.run -text "Stop" -state disabled -command {runCPU}
pack .ctrl.cpu.cpu.run -side left -padx 5 -fill x
button .ctrl.cpu.cpu.step -text "Step" -state disabled -command {singleStepCPU}
pack .ctrl.cpu.cpu.step -side left -padx 5 -fill x
label .ctrl.cpu.cpu.l2 -text "CPU Status:" -anchor w -state disabled
pack .ctrl.cpu.cpu.l2 -side left -padx "40 0"
label .ctrl.cpu.cpu.l3 -text "--" -anchor w -state disabled
pack .ctrl.cpu.cpu.l3 -side left
 
# Breakpoints
label .ctrl.cpu.brkpt.l1 -text "CPU Breakpoints:" -anchor w -state disabled
pack .ctrl.cpu.brkpt.l1 -side left
entry .ctrl.cpu.brkpt.addr0 -textvariable brkpt(addr_0) -relief sunken -state disabled -width 10
pack .ctrl.cpu.brkpt.addr0 -side left -padx "20 0"
bind .ctrl.cpu.brkpt.addr0 <Return> "highlightCode"
checkbutton .ctrl.cpu.brkpt.chk0 -variable brkpt(en_0) -state disabled -command "updateBreakpoint 0" -text "Enable"
pack .ctrl.cpu.brkpt.chk0 -side left -padx "0"
entry .ctrl.cpu.brkpt.addr1 -textvariable brkpt(addr_1) -relief sunken -state disabled -width 10
pack .ctrl.cpu.brkpt.addr1 -side left -padx "20 0"
bind .ctrl.cpu.brkpt.addr1 <Return> "highlightCode"
checkbutton .ctrl.cpu.brkpt.chk1 -variable brkpt(en_1) -state disabled -command "updateBreakpoint 1" -text "Enable"
pack .ctrl.cpu.brkpt.chk1 -side left -padx "0"
entry .ctrl.cpu.brkpt.addr2 -textvariable brkpt(addr_2) -relief sunken -state disabled -width 10
pack .ctrl.cpu.brkpt.addr2 -side left -padx "20 0"
bind .ctrl.cpu.brkpt.addr2 <Return> "highlightCode"
checkbutton .ctrl.cpu.brkpt.chk2 -variable brkpt(en_2) -state disabled -command "updateBreakpoint 2" -text "Enable"
pack .ctrl.cpu.brkpt.chk2 -side left -padx "0"
 
 
# CPU Status register
label .ctrl.reg_stat.l1 -text "Status register (r2/sr):" -anchor w -state disabled
pack .ctrl.reg_stat.l1 -side left
checkbutton .ctrl.reg_stat.v -variable sr(v) -state disabled -command "statRegUpdate" -text "V"
pack .ctrl.reg_stat.v -side left -padx "0"
checkbutton .ctrl.reg_stat.scg1 -variable sr(scg1) -state disabled -command "statRegUpdate" -text "SCG1"
pack .ctrl.reg_stat.scg1 -side left -padx "0"
checkbutton .ctrl.reg_stat.oscoff -variable sr(oscoff) -state disabled -command "statRegUpdate" -text "OSCOFF"
pack .ctrl.reg_stat.oscoff -side left -padx "0"
checkbutton .ctrl.reg_stat.cpuoff -variable sr(cpuoff) -state disabled -command "statRegUpdate" -text "CPUOFF"
pack .ctrl.reg_stat.cpuoff -side left -padx "0"
checkbutton .ctrl.reg_stat.gie -variable sr(gie) -state disabled -command "statRegUpdate" -text "GIE"
pack .ctrl.reg_stat.gie -side left -padx "0"
checkbutton .ctrl.reg_stat.n -variable sr(n) -state disabled -command "statRegUpdate" -text "N"
pack .ctrl.reg_stat.n -side left -padx "0"
checkbutton .ctrl.reg_stat.z -variable sr(z) -state disabled -command "statRegUpdate" -text "Z"
pack .ctrl.reg_stat.z -side left -padx "0"
checkbutton .ctrl.reg_stat.c -variable sr(c) -state disabled -command "statRegUpdate" -text "C"
pack .ctrl.reg_stat.c -side left -padx "0"
label .ctrl.cpu.reg_stat.l1 -text "Status register (r2/sr):" -anchor w -state disabled
pack .ctrl.cpu.reg_stat.l1 -side left
checkbutton .ctrl.cpu.reg_stat.v -variable sr(v) -state disabled -command "statRegUpdate" -text "V"
pack .ctrl.cpu.reg_stat.v -side left -padx "0"
checkbutton .ctrl.cpu.reg_stat.scg1 -variable sr(scg1) -state disabled -command "statRegUpdate" -text "SCG1"
pack .ctrl.cpu.reg_stat.scg1 -side left -padx "0"
checkbutton .ctrl.cpu.reg_stat.oscoff -variable sr(oscoff) -state disabled -command "statRegUpdate" -text "OSCOFF"
pack .ctrl.cpu.reg_stat.oscoff -side left -padx "0"
checkbutton .ctrl.cpu.reg_stat.cpuoff -variable sr(cpuoff) -state disabled -command "statRegUpdate" -text "CPUOFF"
pack .ctrl.cpu.reg_stat.cpuoff -side left -padx "0"
checkbutton .ctrl.cpu.reg_stat.gie -variable sr(gie) -state disabled -command "statRegUpdate" -text "GIE"
pack .ctrl.cpu.reg_stat.gie -side left -padx "0"
checkbutton .ctrl.cpu.reg_stat.n -variable sr(n) -state disabled -command "statRegUpdate" -text "N"
pack .ctrl.cpu.reg_stat.n -side left -padx "0"
checkbutton .ctrl.cpu.reg_stat.z -variable sr(z) -state disabled -command "statRegUpdate" -text "Z"
pack .ctrl.cpu.reg_stat.z -side left -padx "0"
checkbutton .ctrl.cpu.reg_stat.c -variable sr(c) -state disabled -command "statRegUpdate" -text "C"
pack .ctrl.cpu.reg_stat.c -side left -padx "0"
 
# CPU Registers
frame .ctrl.reg_mem.reg.title
pack .ctrl.reg_mem.reg.title -side top
label .ctrl.reg_mem.reg.title.l -text " " -width 8 -anchor w
pack .ctrl.reg_mem.reg.title.l -side left
label .ctrl.reg_mem.reg.title.e -text "Registers" -anchor w -state disabled
pack .ctrl.reg_mem.reg.title.e -side left
frame .ctrl.cpu.reg_mem.reg.title
pack .ctrl.cpu.reg_mem.reg.title -side top
label .ctrl.cpu.reg_mem.reg.title.l -text " " -width 8 -anchor w
pack .ctrl.cpu.reg_mem.reg.title.l -side left
label .ctrl.cpu.reg_mem.reg.title.e -text "Registers" -anchor w -state disabled
pack .ctrl.cpu.reg_mem.reg.title.e -side left
for {set i 0} {$i<16} {incr i} {
switch $i {
{0} {set reg_label "r0 (pc):"}
662,53 → 937,53
{2} {set reg_label "r2 (sr):"}
default {set reg_label "r$i:"}
}
frame .ctrl.reg_mem.reg.f$i
pack .ctrl.reg_mem.reg.f$i -side top
label .ctrl.reg_mem.reg.f$i.l$i -text $reg_label -width 8 -anchor w -state disabled
pack .ctrl.reg_mem.reg.f$i.l$i -side left
entry .ctrl.reg_mem.reg.f$i.e$i -textvariable reg($i) -relief sunken -state disabled
pack .ctrl.reg_mem.reg.f$i.e$i -side left
bind .ctrl.reg_mem.reg.f$i.e$i <Return> "write2Reg $i"
frame .ctrl.cpu.reg_mem.reg.f$i
pack .ctrl.cpu.reg_mem.reg.f$i -side top
label .ctrl.cpu.reg_mem.reg.f$i.l$i -text $reg_label -width 8 -anchor w -state disabled
pack .ctrl.cpu.reg_mem.reg.f$i.l$i -side left
entry .ctrl.cpu.reg_mem.reg.f$i.e$i -textvariable reg($i) -relief sunken -state disabled
pack .ctrl.cpu.reg_mem.reg.f$i.e$i -side left
bind .ctrl.cpu.reg_mem.reg.f$i.e$i <Return> "write2Reg $i"
}
button .ctrl.reg_mem.reg.refresh -text "Refresh Registers" -state disabled -command {refreshReg}
pack .ctrl.reg_mem.reg.refresh -side top -padx 5 -pady 10 -fill x -expand true
button .ctrl.cpu.reg_mem.reg.refresh -text "Refresh Registers" -state disabled -command {refreshReg}
pack .ctrl.cpu.reg_mem.reg.refresh -side top -padx 5 -pady 10 -fill x -expand true
 
 
# CPU Memory
frame .ctrl.reg_mem.mem.title
pack .ctrl.reg_mem.mem.title -side top
label .ctrl.reg_mem.mem.title.l -text " Address " -anchor w -width 20 -state disabled
pack .ctrl.reg_mem.mem.title.l -side left -fill x -expand true
label .ctrl.reg_mem.mem.title.e -text " Data " -anchor w -width 20 -state disabled
pack .ctrl.reg_mem.mem.title.e -side left -fill x -expand true
frame .ctrl.cpu.reg_mem.mem.title
pack .ctrl.cpu.reg_mem.mem.title -side top
label .ctrl.cpu.reg_mem.mem.title.l -text " Address " -anchor w -width 20 -state disabled
pack .ctrl.cpu.reg_mem.mem.title.l -side left -fill x -expand true
label .ctrl.cpu.reg_mem.mem.title.e -text " Data " -anchor w -width 20 -state disabled
pack .ctrl.cpu.reg_mem.mem.title.e -side left -fill x -expand true
for {set i 0} {$i<16} {incr i} {
frame .ctrl.reg_mem.mem.f$i
pack .ctrl.reg_mem.mem.f$i -side top
frame .ctrl.cpu.reg_mem.mem.f$i
pack .ctrl.cpu.reg_mem.mem.f$i -side top
 
entry .ctrl.reg_mem.mem.f$i.addr_e$i -textvariable mem(address_$i) -relief sunken -state disabled -width 20
pack .ctrl.reg_mem.mem.f$i.addr_e$i -side left
bind .ctrl.reg_mem.mem.f$i.addr_e$i <Return> "refreshMem"
entry .ctrl.reg_mem.mem.f$i.data_e$i -textvariable mem(data_$i) -relief sunken -state disabled -width 20
pack .ctrl.reg_mem.mem.f$i.data_e$i -side left
bind .ctrl.reg_mem.mem.f$i.data_e$i <Return> "write2Mem $i"
entry .ctrl.cpu.reg_mem.mem.f$i.addr_e$i -textvariable mem(address_$i) -relief sunken -state disabled -width 20
pack .ctrl.cpu.reg_mem.mem.f$i.addr_e$i -side left
bind .ctrl.cpu.reg_mem.mem.f$i.addr_e$i <Return> "refreshMem"
entry .ctrl.cpu.reg_mem.mem.f$i.data_e$i -textvariable mem(data_$i) -relief sunken -state disabled -width 20
pack .ctrl.cpu.reg_mem.mem.f$i.data_e$i -side left
bind .ctrl.cpu.reg_mem.mem.f$i.data_e$i <Return> "write2Mem $i"
}
button .ctrl.reg_mem.mem.refresh -text "Refresh Memory" -state disabled -command {refreshMem}
pack .ctrl.reg_mem.mem.refresh -side top -padx 5 -pady 10 -fill x -expand true
button .ctrl.cpu.reg_mem.mem.refresh -text "Refresh Memory" -state disabled -command {refreshMem}
pack .ctrl.cpu.reg_mem.mem.refresh -side top -padx 5 -pady 10 -fill x -expand true
 
 
# Load TCL script fields
frame .ctrl.tclscript.ft
pack .ctrl.tclscript.ft -side top -fill x
pack .ctrl.tclscript.ft -side top -padx {10 10} -pady {10 5} -fill x
label .ctrl.tclscript.ft.l -text "TCL script:" -state disabled
pack .ctrl.tclscript.ft.l -side left -padx "0 10"
entry .ctrl.tclscript.ft.file -width 58 -relief sunken -textvariable tcl_file_name -state disabled
pack .ctrl.tclscript.ft.file -side left -padx 10
button .ctrl.tclscript.ft.browse -text "Browse" -state disabled -command {set tcl_file_name [tk_getOpenFile -filetypes {{{TCL Files} {.tcl}} {{All Files} *}}]}
pack .ctrl.tclscript.ft.browse -side left -padx 5
button .ctrl.tclscript.ft.browse -text "Browse" -width 9 -state disabled -command {set tcl_file_name [tk_getOpenFile -filetypes {{{TCL Files} {.tcl}} {{All Files} *}}]}
pack .ctrl.tclscript.ft.browse -side right -padx 5
frame .ctrl.tclscript.fb
pack .ctrl.tclscript.fb -side top -fill x
button .ctrl.tclscript.fb.read -text "Source TCL script !" -state disabled -command {if {[file exists $tcl_file_name]} {source $tcl_file_name}}
pack .ctrl.tclscript.fb.read -side left -padx 5 -fill x
pack .ctrl.tclscript.fb.read -side left -padx 15 -pady {0 10} -fill x
 
 
####################################
735,4 → 1010,38
-xscrollcommand {.code.xscroll set} -yscrollcommand {.code.yscroll set}
pack .code.text -side left -fill both -expand true
 
.code.text tag config highlight -background yellow
.code.text tag config highlightPC -background $color(PC)
.code.text tag config highlightBRK0_ACT -background $color(Brk0_active)
.code.text tag config highlightBRK0_DIS -background $color(Brk0_disabled)
.code.text tag config highlightBRK1_ACT -background $color(Brk1_active)
.code.text tag config highlightBRK1_DIS -background $color(Brk1_disabled)
.code.text tag config highlightBRK2_ACT -background $color(Brk2_active)
.code.text tag config highlightBRK2_DIS -background $color(Brk2_disabled)
 
 
#######################################
# PERIODICALLY CHECK THE CPU STATUS #
#######################################
 
while 1 {
 
# Wait 1 second
set ::refresh_flag 0
after 1000 set ::refresh_flag 1
vwait refresh_flag
 
# Check CPU status
if {$serial_status} {
if {$cpu_status} {
if {[IsHalted]} {
.ctrl.cpu.cpu.step configure -state normal
.ctrl.cpu.cpu.run configure -text "Run"
.ctrl.cpu.cpu.l3 configure -text "Stopped" -fg "\#cdad00"
set cpu_status 0
refreshReg
refreshMem
}
}
}
}
 
/README.TXT
0,0 → 1,33
=============================================================================
|| ONLY RELEVANT FOR WINDOWS USERS ||
=============================================================================
 
You here have two possibilities.
 
------------------------------------------
1) YES, I want to install TCL on my PC
------------------------------------------
 
You can download it here:
http://www.activestate.com/activetcl/downloads
 
 
------------------------------------------
2) NO, I don't want to install TCL on my PC
------------------------------------------
 
You can generate an executable from the existing TCL scripts by
running (or cliking) the following BAT file:
 
tools/freewrap642/tools/freewrap642/
 
 
The generated EXE files can then be found under:
 
tools/bin/openmsp430-loader.exe
tools/bin/openmsp430-minidebug.exe
tools/bin/openmsp430-gdbproxy.exe
 
 
=============================================================================
=============================================================================
README.TXT Property changes : Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: openmsp430-loader.tcl =================================================================== --- openmsp430-loader.tcl (revision 97) +++ openmsp430-loader.tcl (revision 110) @@ -36,6 +36,7 @@ global serial_baudrate global serial_device +global omsp_info ############################################################################### # PARAMETER CHECK # @@ -175,6 +176,10 @@ ExecutePOR_Halt puts "done" set sizes [GetCPU_ID_SIZE] + +if {$omsp_info(alias)!=""} { + puts "Connected: target device identified as $omsp_info(alias)." +} puts "Connected: target device has [lindex $sizes 0]B Program Memory and [lindex $sizes 1]B Data Memory" puts ""

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.