Difference between revisions of "MSP-EXP430F5529LP"

From MAGEEC
Jump to: navigation, search
(Toolchain)
Line 53: Line 53:
 
===Toolchain===
 
===Toolchain===
  
  $ apt-get install gcc-msp430 msp430-libc msp430mcu gdb-msp430
+
  $ apt-get install gcc-msp430 msp430mcu gdb-msp430
 +
 
 +
The C library can be installed from the package msp430-libc. However this is missing several functions. If trying to run BEEBS on the board then the required version of pow is missing from the library. The following steps patch the library (patch applied on commit 292e920cff2ab95b1f6eb160a6eedd2b39bc7a60):
 +
 
 +
$ git clone git://mspgcc.git.sourceforge.net/gitroot/mspgcc/msp430-libc
 +
$ cd msp430-libc
 +
$ [Put patch file listed below into msp430_libc_patch]
 +
$ patch -p1 < msp430_libc_patch
 +
$ ./configure
 +
$ cd src
 +
$ make
 +
$ sudo make PREFIX=/usr install
 +
 
 +
Patch file:
 +
diff --git a/src/libm/ef_pow.c b/src/libm/ef_pow.c
 +
index 9a21339..fe000b7 100644
 +
--- a/src/libm/ef_pow.c
 +
+++ b/src/libm/ef_pow.c
 +
@@ -257,3 +257,16 @@ float powf(float x, float y)
 +
else SET_FLOAT_WORD(z,j);
 +
return s*z;
 +
  }
 +
+
 +
+#ifdef _DOUBLE_IS_32BITS
 +
+
 +
+#ifdef __STDC__
 +
+ double pow(double x, double y)
 +
+#else
 +
+ double pow(x, y)
 +
+ double x, y;
 +
+#endif
 +
+{
 +
+ return (double) powf((float) x, (float) y);
 +
+}
 +
+#endif
 +
diff --git a/src/libm/fpmulparts.S b/src/libm/fpmulparts.S
 +
index 439abf7..05ad679 100644
 +
--- a/src/libm/fpmulparts.S
 +
+++ b/src/libm/fpmulparts.S
 +
@@ -35,10 +35,10 @@
 +
 
 +
  #define lowresult R14
 +
  #define highresult R15
 +
-
 +
-#if __MSP430X__ - 0
 +
- .cpux_target bits=__MSP430X__ ; Encode build options for link-time validation
 +
-#endif /* __MSP430X__ */
 +
+
 +
+#if __MSP430X__ - 0
 +
+; .cpux_target bits=__MSP430X__ ; Encode build options for link-time validation
 +
+#endif /* __MSP430X__ */
 +
 
 +
  .global __fpmulparts
 +
  .type __fpmulparts,@function
 +
diff --git a/src/misc/__bswap_32.S b/src/misc/__bswap_32.S
 +
index fbb7ca0..822729f 100644
 +
--- a/src/misc/__bswap_32.S
 +
+++ b/src/misc/__bswap_32.S
 +
@@ -30,10 +30,10 @@
 +
  * OF THE POSSIBILITY OF SUCH DAMAGE
 +
  *
 +
  */
 +
-
 +
-#if __MSP430X__ - 0
 +
- .cpux_target bits=__MSP430X__ ; Encode build options for link-time validation
 +
-#endif /* __MSP430X__ */
 +
+
 +
+#if __MSP430X__ - 0
 +
+; .cpux_target bits=__MSP430X__ ; Encode build options for link-time validation
 +
+#endif /* __MSP430X__ */
 +
 
 +
.section .text
 +
.global __bswap_32
 +
diff --git a/src/misc/__bswap_64.S b/src/misc/__bswap_64.S
 +
index 1b1e762..d7fb116 100644
 +
--- a/src/misc/__bswap_64.S
 +
+++ b/src/misc/__bswap_64.S
 +
@@ -30,10 +30,10 @@
 +
  * OF THE POSSIBILITY OF SUCH DAMAGE
 +
  *
 +
  */
 +
-
 +
-#if __MSP430X__ - 0
 +
- .cpux_target bits=__MSP430X__ ; Encode build options for link-time validation
 +
-#endif /* __MSP430X__ */
 +
+
 +
+#if __MSP430X__ - 0
 +
+; .cpux_target bits=__MSP430X__ ; Encode build options for link-time validation
 +
+#endif /* __MSP430X__ */
 +
 
 +
.section .text
 +
.global __bswap_64
 +
diff --git a/src/stdlib/abort.S b/src/stdlib/abort.S
 +
index b06b31c..21fce5e 100644
 +
--- a/src/stdlib/abort.S
 +
+++ b/src/stdlib/abort.S
 +
@@ -1,6 +1,6 @@
 +
-#if __MSP430X__ - 0
 +
- .cpux_target bits=__MSP430X__ ; Encode build options for link-time validation
 +
-#endif /* __MSP430X__ */
 +
+#if __MSP430X__ - 0
 +
+; .cpux_target bits=__MSP430X__ ; Encode build options for link-time validation
 +
+#endif /* __MSP430X__ */
 +
 
 +
          .text
 +
          .p2align 1,0
 +
diff --git a/src/stdlib/div.S b/src/stdlib/div.S
 +
index 444ec2f..91320e2 100644
 +
--- a/src/stdlib/div.S
 +
+++ b/src/stdlib/div.S
 +
@@ -6,9 +6,9 @@
 +
  #define RETX ret
 +
  #endif /* C20 */
 +
 
 +
-#if __MSP430X__ - 0
 +
- .cpux_target bits=__MSP430X__ ; Encode build options for link-time validation
 +
-#endif /* __MSP430X__ */
 +
+#if __MSP430X__ - 0
 +
+; .cpux_target bits=__MSP430X__ ; Encode build options for link-time validation
 +
+#endif /* __MSP430X__ */
 +
 
 +
.section .text.div
 +
.global div
 +
diff --git a/src/stdlib/exit.S b/src/stdlib/exit.S
 +
index 32373ed..d87360c 100644
 +
--- a/src/stdlib/exit.S
 +
+++ b/src/stdlib/exit.S
 +
@@ -32,9 +32,9 @@
 +
  * Multitasking exiting and such.
 +
  */
 +
 
 +
-#if __MSP430X__ - 0
 +
- .cpux_target bits=__MSP430X__ ; Encode build options for link-time validation
 +
-#endif /* __MSP430X__ */
 +
+#if __MSP430X__ - 0
 +
+; .cpux_target bits=__MSP430X__ ; Encode build options for link-time validation
 +
+#endif /* __MSP430X__ */
 +
 
 +
          .text
 +
          .p2align 1,0
 +
diff --git a/src/stdlib/ldiv.S b/src/stdlib/ldiv.S
 +
index 41d68f6..4644d9e 100644
 +
--- a/src/stdlib/ldiv.S
 +
+++ b/src/stdlib/ldiv.S
 +
@@ -6,9 +6,9 @@
 +
  #define RETX ret
 +
  #endif /* C20 */
 +
 
 +
-#if __MSP430X__ - 0
 +
- .cpux_target bits=__MSP430X__ ; Encode build options for link-time validation
 +
-#endif /* __MSP430X__ */
 +
+#if __MSP430X__ - 0
 +
+; .cpux_target bits=__MSP430X__ ; Encode build options for link-time validation
 +
+#endif /* __MSP430X__ */
 +
 
 +
.section .text.ldiv
 +
.global ldiv
 +
diff --git a/src/stdlib/setjmp.S b/src/stdlib/setjmp.S
 +
index 3920d60..038b422 100644
 +
--- a/src/stdlib/setjmp.S
 +
+++ b/src/stdlib/setjmp.S
 +
@@ -48,9 +48,9 @@
 +
  #define BRX br
 +
  #endif /* C20 */
 +
 
 +
-#if __MSP430X__ - 0
 +
- .cpux_target bits=__MSP430X__ ; Encode build options for link-time validation
 +
-#endif /* __MSP430X__ */
 +
+#if __MSP430X__ - 0
 +
+; .cpux_target bits=__MSP430X__ ; Encode build options for link-time validation
 +
+#endif /* __MSP430X__ */
 +
 
 +
.global setjmp
 +
.type setjmp, @function
  
 
==Links==
 
==Links==

Revision as of 21:06, 20 November 2013


Platform details

Processor MSP430F5529
Architecture MSP430
Instruction sets MSP430
Memory 128kB Flash, 8kB RAM

Hardware modifications

None necessary, attach probes to the 3V3 jumper.

Software setup

udev rules

$ cat /etc/udev/rules.d/62-msp-exp430f5529lp.rules
ATTRS{idVendor}=="2047", ATTRS{idProduct}=="0013", MODE="0666", GROUP="plugdev"

GDB server

To build:

$ git clone git://git.code.sf.net/p/mspdebug/code mspdebug
$ cd mspdebug
$ make

To run:

$ ./mspdebug ezfet gdb

This starts a gdb server on port 2000, however doesn't seem to allow flashing of the device (although you can debug, and step through programs).

$ wget http://www-s.ti.com/sc/techzip/slac460.zip
$ unzip slac460.zip
$ cd MSPDebugStack_OS_Package

$ wget http://mspdebug.sourceforge.net/misc/slac460f_unix.diff
$ patch -p1 <slac460f_unix.diff
$ cd ThirdParty
$ chmod +x install_thirdparty.sh 
$ ./install_thirdparty.sh 
$ cd ..
$ make
$ sudo make install

This creates libmsp430.so, which allows the tilib driver of mspdebug to be used. This seems to be able to successfully flash the board.

 $ ./mspdebug tilib gdb

Toolchain

$ apt-get install gcc-msp430 msp430mcu gdb-msp430

The C library can be installed from the package msp430-libc. However this is missing several functions. If trying to run BEEBS on the board then the required version of pow is missing from the library. The following steps patch the library (patch applied on commit 292e920cff2ab95b1f6eb160a6eedd2b39bc7a60):

$ git clone git://mspgcc.git.sourceforge.net/gitroot/mspgcc/msp430-libc 
$ cd msp430-libc
$ [Put patch file listed below into msp430_libc_patch]
$ patch -p1 < msp430_libc_patch
$ ./configure
$ cd src
$ make
$ sudo make PREFIX=/usr install

Patch file:

diff --git a/src/libm/ef_pow.c b/src/libm/ef_pow.c
index 9a21339..fe000b7 100644
--- a/src/libm/ef_pow.c
+++ b/src/libm/ef_pow.c
@@ -257,3 +257,16 @@ float powf(float x, float y)
	 else SET_FLOAT_WORD(z,j);
	 return s*z;
 }
+
+#ifdef _DOUBLE_IS_32BITS
+
+#ifdef __STDC__
+	double pow(double x, double y)
+#else
+	double pow(x, y)
+	double x, y;
+#endif
+{
+	return (double) powf((float) x, (float) y);
+}
+#endif
diff --git a/src/libm/fpmulparts.S b/src/libm/fpmulparts.S
index 439abf7..05ad679 100644
--- a/src/libm/fpmulparts.S
+++ b/src/libm/fpmulparts.S
@@ -35,10 +35,10 @@
 
 #define lowresult	R14
 #define highresult	R15
-	
-#if __MSP430X__ - 0	
-	.cpux_target	bits=__MSP430X__ ; Encode build options for link-time validation
-#endif /* __MSP430X__ */	
+
+#if __MSP430X__ - 0
+;	.cpux_target	bits=__MSP430X__ ; Encode build options for link-time validation
+#endif /* __MSP430X__ */
 
 .global __fpmulparts
 .type __fpmulparts,@function
diff --git a/src/misc/__bswap_32.S b/src/misc/__bswap_32.S
index fbb7ca0..822729f 100644
--- a/src/misc/__bswap_32.S
+++ b/src/misc/__bswap_32.S
@@ -30,10 +30,10 @@
  * OF THE POSSIBILITY OF SUCH DAMAGE
  *
  */
-	
-#if __MSP430X__ - 0	
-	.cpux_target	bits=__MSP430X__ ; Encode build options for link-time validation
-#endif /* __MSP430X__ */	
+
+#if __MSP430X__ - 0
+;	.cpux_target	bits=__MSP430X__ ; Encode build options for link-time validation
+#endif /* __MSP430X__ */
 
	 .section .text
	 .global __bswap_32
diff --git a/src/misc/__bswap_64.S b/src/misc/__bswap_64.S
index 1b1e762..d7fb116 100644
--- a/src/misc/__bswap_64.S
+++ b/src/misc/__bswap_64.S
@@ -30,10 +30,10 @@
  * OF THE POSSIBILITY OF SUCH DAMAGE
  *
  */
-	
-#if __MSP430X__ - 0	
-	.cpux_target	bits=__MSP430X__ ; Encode build options for link-time validation
-#endif /* __MSP430X__ */	
+
+#if __MSP430X__ - 0
+;	.cpux_target	bits=__MSP430X__ ; Encode build options for link-time validation
+#endif /* __MSP430X__ */
 
	 .section .text
	 .global	__bswap_64
diff --git a/src/stdlib/abort.S b/src/stdlib/abort.S
index b06b31c..21fce5e 100644
--- a/src/stdlib/abort.S
+++ b/src/stdlib/abort.S
@@ -1,6 +1,6 @@
-#if __MSP430X__ - 0	
-	.cpux_target	bits=__MSP430X__ ; Encode build options for link-time validation
-#endif /* __MSP430X__ */	
+#if __MSP430X__ - 0
+;	.cpux_target	bits=__MSP430X__ ; Encode build options for link-time validation
+#endif /* __MSP430X__ */
 
         .text
         .p2align 1,0
diff --git a/src/stdlib/div.S b/src/stdlib/div.S
index 444ec2f..91320e2 100644
--- a/src/stdlib/div.S
+++ b/src/stdlib/div.S
@@ -6,9 +6,9 @@
 #define RETX	ret
 #endif /* C20 */
 
-#if __MSP430X__ - 0	
-	.cpux_target	bits=__MSP430X__ ; Encode build options for link-time validation
-#endif /* __MSP430X__ */	
+#if __MSP430X__ - 0
+;	.cpux_target	bits=__MSP430X__ ; Encode build options for link-time validation
+#endif /* __MSP430X__ */
 
	 .section .text.div
	 .global div
diff --git a/src/stdlib/exit.S b/src/stdlib/exit.S
index 32373ed..d87360c 100644
--- a/src/stdlib/exit.S
+++ b/src/stdlib/exit.S
@@ -32,9 +32,9 @@
  * Multitasking exiting and such.
  */
 
-#if __MSP430X__ - 0	
-	.cpux_target	bits=__MSP430X__ ; Encode build options for link-time validation
-#endif /* __MSP430X__ */	
+#if __MSP430X__ - 0
+;	.cpux_target	bits=__MSP430X__ ; Encode build options for link-time validation
+#endif /* __MSP430X__ */
 
         .text
         .p2align 1,0
diff --git a/src/stdlib/ldiv.S b/src/stdlib/ldiv.S
index 41d68f6..4644d9e 100644
--- a/src/stdlib/ldiv.S
+++ b/src/stdlib/ldiv.S
@@ -6,9 +6,9 @@
 #define RETX	ret
 #endif /* C20 */
 
-#if __MSP430X__ - 0	
-	.cpux_target	bits=__MSP430X__ ; Encode build options for link-time validation
-#endif /* __MSP430X__ */	
+#if __MSP430X__ - 0
+;	.cpux_target	bits=__MSP430X__ ; Encode build options for link-time validation
+#endif /* __MSP430X__ */
 
	 .section .text.ldiv
	 .global ldiv
diff --git a/src/stdlib/setjmp.S b/src/stdlib/setjmp.S
index 3920d60..038b422 100644
--- a/src/stdlib/setjmp.S
+++ b/src/stdlib/setjmp.S
@@ -48,9 +48,9 @@
 #define	BRX	br
 #endif /* C20 */
 
-#if __MSP430X__ - 0	
-	.cpux_target	bits=__MSP430X__ ; Encode build options for link-time validation
-#endif /* __MSP430X__ */	
+#if __MSP430X__ - 0
+;	.cpux_target	bits=__MSP430X__ ; Encode build options for link-time validation
+#endif /* __MSP430X__ */
 
	 .global	setjmp
	 .type	setjmp, @function

Links