openMSP430之openmsp430-loader
openmsp430-loader
This simple program allows the user to load the openMSP430 program memory with an executable file (ELF or Intel-HEX format) provided as argument.
It is typically used in conjunction with 'make' in order to automatically load the program after the compile step (see 'Makefile' from software examples provided with the project's FPGA implementation).
openmsp430-loader.tcl
#!/usr/bin/tclsh
2 #------------------------------------------------------------------------------
3 # File Name: openmsp430-loader.tcl
4 #------------------------------------------------------------------------------ global omsp_conf
global omsp_info 9 ###############################################################################
10 # SOURCE LIBRARIES #
11 ############################################################################### 13 # Get library path
set current_file [info script]
if {[file type $current_file]=="link"} {
set current_file [file readlink $current_file]
}
set lib_path [file dirname $current_file]/../lib/tcl-lib 20 # Source library
source $lib_path/dbg_functions.tcl
source $lib_path/dbg_utils.tcl 25 ###############################################################################
26 # PARAMETER CHECK #
27 ###############################################################################
28 #proc GetAllowedSpeeds proc help {} {
puts ""
puts "USAGE : openmsp430-loader.tcl \[-device <communication port>\]"
puts " \[-adaptor <adaptor type>\]"
puts " \[-speed <communication speed>\]"
puts " \[-i2c_addr <cpu address>\] <elf/ihex-file>"
puts ""
puts "DEFAULT : <communication port> = /dev/ttyUSB0"
puts " <adaptor type> = uart_generic"
puts " <communication speed> = 115200 (for UART) / I2C_S_100KHZ (for I2C)"
puts " <core address> = 42"
puts ""
puts "EXAMPLES: openmsp430-loader.tcl -device /dev/ttyUSB0 -adaptor uart_generic -speed 9600 leds.elf"
puts " openmsp430-loader.tcl -device COM2: -adaptor i2c_usb-iss -speed I2C_S_100KHZ -i2c_addr 75 ta_uart.ihex"
puts ""
} 47 # Default values
set omsp_conf(interface) uart_generic
set omsp_conf(device) /dev/ttyUSB0
set omsp_conf(baudrate) [lindex [GetAllowedSpeeds] ]
set omsp_conf(,cpuaddr)
set elf_file -
set bin_file "[clock clicks].bin" 55 # Parse arguments
for {set i } {$i < $argc} {incr i} {
switch -exact -- [lindex $argv $i] {
-device {set omsp_conf(device) [lindex $argv [expr $i+]]; incr i}
-adaptor {set omsp_conf(interface) [lindex $argv [expr $i+]]; incr i}
-speed {set omsp_conf(baudrate) [lindex $argv [expr $i+]]; incr i}
-i2c_addr {set omsp_conf(,cpuaddr) [lindex $argv [expr $i+]]; incr i}
default {set elf_file [lindex $argv $i]}
}
} 66 # Make sure arugments were specified
if {[string eq $elf_file -]} {
puts "\nERROR: ELF/IHEX file isn't specified"
help
exit
} 73 # Make sure the elf file exists
if {![file exists $elf_file]} {
puts "\nERROR: Specified ELF/IHEX file doesn't exist"
help
exit
} 80 # Make sure the selected adptor is valid
if {![string eq $omsp_conf(interface) "uart_generic"] &
![string eq $omsp_conf(interface) "i2c_usb-iss"]} {
puts "\nERROR: Specified adaptor is not valid (should be \"uart_generic\" or \"i2c_usb-iss\")"
help
exit
} 88 # Make sure the I2C address is an integer
if {![string is integer $omsp_conf(,cpuaddr)]} {
puts "\nERROR: Specified I2C address is not an integer"
help
exit
} 95 # Make sure the I2C address is valid
if {($omsp_conf(,cpuaddr)<) | ($omsp_conf(,cpuaddr)>)} {
puts "\nERROR: Specified I2C address should lay between 7 and 120"
help
exit
} 102 # If the selected interface is a UART, make sure the selected speed is an integer
if {[string eq $omsp_conf(interface) "uart_generic"]} {
if {![string is integer $omsp_conf(baudrate)]} {
puts "\nERROR: Specified UART communication speed is not an integer"
help
exit
}
} elseif {[string eq $omsp_conf(interface) "i2c_usb-iss"]} {
if {[lsearch [lindex [GetAllowedSpeeds] ] $omsp_conf(baudrate)]==-} {
puts "\nERROR: Specified I2C communication speed is not valid."
puts " Allowed values are:"
foreach allowedVal [lindex [GetAllowedSpeeds] ] {
puts " - $allowedVal"
}
puts ""
exit
}
} 122 ###############################################################################
123 # CREATE AND READ BINARY EXECUTABLE FILE #
124 ############################################################################### 126 # Detect the file format depending on the fil extention
set fileType [file extension $elf_file]
set fileType [string tolower $fileType]
regsub {\.} $fileType {} fileType
if {![string eq $fileType "ihex"] & ![string eq $fileType "hex"] & ![string eq $fileType "elf"]} {
puts "\nERROR: [string toupper $fileType] file format not supported"
return
}
if {[string eq $fileType "hex"]} {
set fileType "ihex"
}
if {[string eq $fileType "elf"]} {
set fileType "elf32-msp430"
} 141 # Generate binary file
if {[catch {exec msp430-objcopy -I $fileType -O binary $elf_file $bin_file} errMsg]} {
puts $errMsg
exit
} 147 # Wait until bin file is present on the filesystem
set timeout
for {set i } {$i <= $timeout} {incr i} {
after
if {[file exists $bin_file]} {
break
}
}
if {$i>=$timeout} {
puts "\nTimeout: ELF to BIN file conversion problem with \"msp430-objcopy\" executable"
puts "$errMsg"
exit
} 161 # Read file
set fp [open $bin_file r]
fconfigure $fp -translation binary
binary scan [read $fp] H* hex_data yop
close $fp 167 # Cleanup
file delete $bin_file 170 # Get program size
set hex_size [string length $hex_data]
set byte_size [expr $hex_size/]
set word_size [expr $byte_size/] 175 # Format data
for {set i } {$i < $hex_size} {set i [expr $i+]} {
set hex_msb "[string index $hex_data [expr $i+2]][string index $hex_data [expr $i+3]]"
set hex_lsb "[string index $hex_data [expr $i+0]][string index $hex_data [expr $i+1]]"
lappend DataArray "0x$hex_msb$hex_lsb"
} 183 ###############################################################################
184 # LOAD PROGRAM TO OPENMSP430 TARGET #
185 ############################################################################### 187 # Connect to target and stop CPU
puts ""
puts -nonewline "Connecting with the openMSP430 ($omsp_conf(device), $omsp_conf(baudrate)\ bps)... "
flush stdout
if {![GetDevice ]} {
puts "failed"
puts "Could not open $omsp_conf(device)"
puts "Available serial ports are:"
foreach port [utils::uart_port_list] {
puts " - $port"
}
if {[string eq $omsp_conf(interface) "i2c_usb-iss"]} {
puts "\nMake sure the specified I2C device address is correct: $omsp_conf(0,cpuaddr)\n"
}
exit
}
ExecutePOR_Halt
puts "done"
set sizes [GetCPU_ID_SIZE ] if {$omsp_info(,alias)!=""} {
puts "Connected: target device identified as $omsp_info(0,alias)."
}
puts "Connected: target device has [lindex $sizes 0]B Program Memory and [lindex $sizes 1]B Data Memory"
puts "" 213 # Make sure ELF program size is the same as the available program memory
if {[lindex $sizes ] != [expr $hex_size/]} {
puts "ERROR: ELF program size ($byte_size B) is different than the available program memory ([lindex $sizes 0] B)"
exit
} 219 # Load Program Memory
set StartAddr [format "0x%04x" [expr 0x10000-$byte_size]]
puts -nonewline "Load Program Memory... "
flush stdout
WriteMemQuick $StartAddr $DataArray
after
puts "done" 227 # Check Data
puts -nonewline "Verify Program Memory... "
flush stdout
if {[VerifyMem $StartAddr $DataArray ]} {
puts "done"
} else {
puts "ERROR"
exit
} 237 # Release device
ReleaseDevice 0xfffe
openMSP430之openmsp430-loader的更多相关文章
- openMSP430之io_test
openMSP430: IO functionality test with interupt #include "omsp_system.h" volatile char shi ...
- openMSP430之Custom linker script
The use of the -mmcu switch is of course NOT mandatory. It is simply a convenient way to use the pre ...
- Verilog之openMSP430(1)
openMSP430_IO interrupt Verilog file: omsp_gpio.v //================================================ ...
- webpack入门教程之初识loader(二)
上一节我们学习了webpack的安装和编译,这一节我们来一起学习webpack的加载器和配置文件. 要想让网页看起来绚丽多彩,那么css就是必不可少的一份子.如果想要在应用中增加一个css文件,那么w ...
- 简单实用的进度条加载组件loader.js
本文提供一个简单的方法实现一个流程的进度条加载效果,以便在页面中可以通过它来更好地反馈耗时任务的完成进度.要实现这个功能,首先要考虑怎样实现一个静态的进度条效果,类似下面这样的: 这个倒是比较简单,两 ...
- 怎样写一个webpack loader
div{display:table-cell;vertical-align:middle}#crayon-theme-info .content *{float:left}#crayon-theme- ...
- 异常:java.lang.LinkageError: loader constraint violation: when resolving interface method
异常:java.lang.LinkageError: loader constraint violation: when resolving interface method "javax. ...
- ClassNotFoundException: org.apache.catalina.loader.DevLoader 自己摸索,丰衣足食
使用tomcat插件时遇到的问题: ClassNotFoundException: org.apache.catalina.loader.DevLoader 解决方案: 参考了许多文章,对我自己的目录 ...
- xcode8打包ipa文件, application loader上传成功,但是iTunes Connect不显示构建版本
最近更新的Xcode8.今天提交新项目时.按照以往的流程走 Xcode 编译ipa文件.applicaiton loader提交成功 但是.iTunes connect构建版本不显示.非常疑惑.平时等 ...
随机推荐
- 【6】Django视图函数
治大国若烹小鲜.以道莅天下 --老子<道德经> 本节内容 Django web项目的运行流程分析 视图处理函数的定义 多视图处理函数及接收参数 1. web项目运行流程分析 通常情况下,完 ...
- GeoTrust 企业(OV)型 多域名(SAN/UC)版 SSL证书
GeoTrust 企业(OV)型 多域名(SAN/UC)版 SSL证书(GeoTrust True BusinessID With Multi-Domain(SAN/UC) ),支持多域名,属于企业 ...
- Linux学习总结(13)——在阿里云的ubuntu上部署个人服务
作为一个IT界的人,一般都希望有一个独立的博客,或者一部独立的机器.所以我一直在找机会,拥有一台自己可以独立控制的机器,自己想干嘛干嘛.当然这在虚拟机或者自己的PC上面也可以实现,但是这跟一台一直开着 ...
- Centos 7开启网卡打开DHCP自动获取IP
在Windows10上安装了CentOS7的Hyper-V虚拟机. 虽然配置了可访问外网的网卡(Win8.1 Hyper-V 共享本机IP上网),但是默认安装的CentOS是没有开启配置网卡信息的,也 ...
- SSM框架下实现导入功能
何叫导入?简单说,导入就是把excel表格里的数据插入到数据库里.我这里做的是支持.xls和.xlsx格式. 因为是自己做案例记录,那些jar包什么的就不细说了,主要讲实现和步骤,看代码: 先在你的项 ...
- python在Linux中安装虚拟环境,区别python2和python3,分别安装模块
安装虚拟环境的时候遇到的问题,解决的过程很闹心,在这里简单直接的分享出来,就是为了解决问题. 安装虚拟环境(须在联网状态下) $ sudo pip install virtualenv $ sudo ...
- [NOIP2016day1T1] 玩具迷題(toy)
题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉 ...
- npm install socket.io 提示缺少"VCBuild.exe"
http://www.cnblogs.com/yangzhx/p/4648501.html https://www.v2ex.com/t/120493
- SSM(spring mvc+spring+mybatis)学习路径——2-2、spring MVC拦截器
目录 2-2 Spring MVC拦截器 第一章 概述 第二章 Spring mvc拦截器的实现 2-1 拦截器的工作原理 2-2 拦截器的实现 2-3 拦截器的方法介绍 2-4 多个拦截器应用 2- ...
- CF #327 DIV2 D、E
两题都不难. 对于D题,可以使用相对移动,把吹aircraft移动变成相反方向的待援点的移动.假设此时时间为t,把aircraft的速度设为Vmax,看待援点在飞船最大速度飞行t秒的范围内,注意风向变 ...