Beginning proper includes; compiles for both 1611 and 16112.
authortravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Fri, 29 May 2009 16:36:57 +0000 (16:36 +0000)
committertravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Fri, 29 May 2009 16:36:57 +0000 (16:36 +0000)
git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@16 12e2690d-a6be-4b82-a7b7-67c4a43b65c8

firmware/include/platform.h [new file with mode: 0644]
firmware/ldscripts/161x.x [new file with mode: 0644]
firmware/tests/blink/Makefile
firmware/tests/blink/blink.c
firmware/tests/echo/Makefile [new file with mode: 0644]
firmware/tests/echo/echo.c [new file with mode: 0644]

diff --git a/firmware/include/platform.h b/firmware/include/platform.h
new file mode 100644 (file)
index 0000000..fe42d4f
--- /dev/null
@@ -0,0 +1,10 @@
+//! \file platform.h
+
+
+//LED on P1.0
+#define PLEDOUT P1OUT
+#define PLEDDIR P1DIR
+#define PLEDPIN 0x1
+
+//
+
diff --git a/firmware/ldscripts/161x.x b/firmware/ldscripts/161x.x
new file mode 100644 (file)
index 0000000..fdcba1b
--- /dev/null
@@ -0,0 +1,210 @@
+
+/* Extra-neighborly linking script, targetting the MSP430F1611 and F1612.
+   by Travis Goodspeed
+   <travis at radiantmachines.com>
+*/
+/* Space from 0x2500 to 0x4000 (5K) is RAM on the 1611, flash on the 1612.
+   It is unused here, but it might be used as a buffer or something through
+   pointer referencing.
+*/
+
+OUTPUT_FORMAT("elf32-msp430","elf32-msp430","elf32-msp430")
+OUTPUT_ARCH(msp:16)
+MEMORY
+{
+  text   (rx)          : ORIGIN = 0x4000,      LENGTH = 0xbfe0
+  data   (rwx)         : ORIGIN = 0x1100,      LENGTH = 0x1400
+  vectors (rw)         : ORIGIN = 0xffe0,      LENGTH = 0x20
+  bootloader(rx)       : ORIGIN = 0x0c00,      LENGTH = 1K
+  infomem(rx)          : ORIGIN = 0x1000,      LENGTH = 256
+  infomemnobits(rx)    : ORIGIN = 0x1000,      LENGTH = 256
+}
+SECTIONS
+{
+  /* Read-only sections, merged into text segment.  */
+  .hash          : { *(.hash)             }
+  .dynsym        : { *(.dynsym)           }
+  .dynstr        : { *(.dynstr)           }
+  .gnu.version   : { *(.gnu.version)      }
+  .gnu.version_d   : { *(.gnu.version_d)  }
+  .gnu.version_r   : { *(.gnu.version_r)  }
+  .rel.init      : { *(.rel.init) }
+  .rela.init     : { *(.rela.init) }
+  .rel.text      :
+    {
+      *(.rel.text)
+      *(.rel.text.*)
+      *(.rel.gnu.linkonce.t*)
+    }
+  .rela.text     :
+    {
+      *(.rela.text)
+      *(.rela.text.*)
+      *(.rela.gnu.linkonce.t*)
+    }
+  .rel.fini      : { *(.rel.fini) }
+  .rela.fini     : { *(.rela.fini) }
+  .rel.rodata    :
+    {
+      *(.rel.rodata)
+      *(.rel.rodata.*)
+      *(.rel.gnu.linkonce.r*)
+    }
+  .rela.rodata   :
+    {
+      *(.rela.rodata)
+      *(.rela.rodata.*)
+      *(.rela.gnu.linkonce.r*)
+    }
+  .rel.data      :
+    {
+      *(.rel.data)
+      *(.rel.data.*)
+      *(.rel.gnu.linkonce.d*)
+    }
+  .rela.data     :
+    {
+      *(.rela.data)
+      *(.rela.data.*)
+      *(.rela.gnu.linkonce.d*)
+    }
+  .rel.ctors     : { *(.rel.ctors)        }
+  .rela.ctors    : { *(.rela.ctors)       }
+  .rel.dtors     : { *(.rel.dtors)        }
+  .rela.dtors    : { *(.rela.dtors)       }
+  .rel.got       : { *(.rel.got)          }
+  .rela.got      : { *(.rela.got)         }
+  .rel.bss       : { *(.rel.bss)          }
+  .rela.bss      : { *(.rela.bss)         }
+  .rel.plt       : { *(.rel.plt)          }
+  .rela.plt      : { *(.rela.plt)         }
+  /* Internal text space.  */
+  .text :
+  {
+    . = ALIGN(2);
+    *(.init)
+    *(.init0)  /* Start here after reset.  */
+    *(.init1)
+    *(.init2)  /* Copy data loop  */
+    *(.init3)
+    *(.init4)  /* Clear bss  */
+    *(.init5)
+    *(.init6)  /* C++ constructors.  */
+    *(.init7)
+    *(.init8)
+    *(.init9)  /* Call main().  */
+     __ctors_start = . ;
+     *(.ctors)
+     __ctors_end = . ;
+     __dtors_start = . ;
+     *(.dtors)
+     __dtors_end = . ;
+    . = ALIGN(2);
+    *(.text)
+    . = ALIGN(2);
+    *(.text.*)
+    . = ALIGN(2);
+    *(.fini9)  /*   */
+    *(.fini8)
+    *(.fini7)
+    *(.fini6)  /* C++ destructors.  */
+    *(.fini5)
+    *(.fini4)
+    *(.fini3)
+    *(.fini2)
+    *(.fini1)
+    *(.fini0)  /* Infinite loop after program termination.  */
+    *(.fini)
+    _etext = .;
+  }  > text
+  .data   : AT (ADDR (.text) + SIZEOF (.text))
+  {
+     PROVIDE (__data_start = .) ;
+    . = ALIGN(2);
+    *(.data)
+    . = ALIGN(2);
+    *(.gnu.linkonce.d*)
+    . = ALIGN(2);
+     _edata = . ;
+  }  > data
+  /* Bootloader.  */
+  .bootloader   :
+  {
+     PROVIDE (__boot_start = .) ;
+    *(.bootloader)
+    . = ALIGN(2);
+    *(.bootloader.*)
+  }  > bootloader
+  /* Information memory.  */
+  .infomem   :
+  {
+    *(.infomem)
+    . = ALIGN(2);
+    *(.infomem.*)
+  }  > infomem
+  /* Information memory (not loaded into MPU).  */
+  .infomemnobits   :
+  {
+    *(.infomemnobits)
+    . = ALIGN(2);
+    *(.infomemnobits.*)
+  }  > infomemnobits
+  .bss  SIZEOF(.data) + ADDR(.data) :
+  {
+     PROVIDE (__bss_start = .) ;
+    *(.bss)
+    *(COMMON)
+     PROVIDE (__bss_end = .) ;
+     _end = . ;
+  }  > data
+  .noinit  SIZEOF(.bss) + ADDR(.bss) :
+  {
+     PROVIDE (__noinit_start = .) ;
+    *(.noinit)
+    *(COMMON)
+     PROVIDE (__noinit_end = .) ;
+     _end = . ;
+  }  > data
+  .vectors  :
+  {
+     PROVIDE (__vectors_start = .) ;
+    *(.vectors*)
+     _vectors_end = . ;
+  }  > vectors
+  /* Stabs for profiling information*/
+  .profiler 0 : { *(.profiler) }
+  /* Stabs debugging sections.  */
+  .stab 0 : { *(.stab) }
+  .stabstr 0 : { *(.stabstr) }
+  .stab.excl 0 : { *(.stab.excl) }
+  .stab.exclstr 0 : { *(.stab.exclstr) }
+  .stab.index 0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment 0 : { *(.comment) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  PROVIDE (__stack = 0x2500) ;
+  PROVIDE (__data_start_rom = _etext) ;
+  PROVIDE (__data_end_rom   = _etext + SIZEOF (.data)) ;
+  PROVIDE (__noinit_start_rom = _etext + SIZEOF (.data)) ;
+  PROVIDE (__noinit_end_rom = _etext + SIZEOF (.data) + SIZEOF (.noinit)) ;
+  PROVIDE (__subdevice_has_heap = 0) ;
+}
index 422db30..4b176de 100644 (file)
@@ -5,7 +5,9 @@ BSL=tos-bsl --invert-reset --invert-test -c $(PORT)
 #mcu=msp430x1611
 mcu=msp430x1612
 
 #mcu=msp430x1611
 mcu=msp430x1612
 
-CC=msp430-gcc -g -mmcu=$(mcu) -DGCC
+GCCINC=-T ../../ldscripts/161x.x
+CC=msp430-gcc -g -mmcu=$(mcu) -DGCC $(GCCINC) -I ../../include
+
 
 app=blink
 
 
 app=blink
 
@@ -15,3 +17,5 @@ install: $(app)
        $(BSL) -P $(app) -r
 erase:
        $(BSL) -e 
        $(BSL) -P $(app) -r
 erase:
        $(BSL) -e 
+clean:
+       rm $(app)
index d6c7c71..fabe89c 100644 (file)
@@ -1,6 +1,7 @@
-//GOODFET Blinker\r
+//GOODFET Echo test.\r
 \r
 \r
-//1611 is preferred, but 1612 accepted\r
+\r
+#include "platform.h"\r
 \r
 #include <signal.h>\r
 #include <io.h>\r
 \r
 #include <signal.h>\r
 #include <io.h>\r
@@ -14,7 +15,7 @@ void init(){
   WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer\r
   \r
   //LED and TX OUT\r
   WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer\r
   \r
   //LED and TX OUT\r
-  P1DIR = 0x03;\r
+  PLEDDIR |= PLEDPIN;\r
   \r
   //Enable Interrupts.\r
   //eint();\r
   \r
   //Enable Interrupts.\r
   //eint();\r
@@ -30,7 +31,7 @@ int main(void)
     i = 10000;\r
     while(i--);\r
     \r
     i = 10000;\r
     while(i--);\r
     \r
-    P1OUT^=1;                                   // Blink\r
+    PLEDOUT^=PLEDPIN;  // Blink\r
   }\r
 }\r
 \r
   }\r
 }\r
 \r
diff --git a/firmware/tests/echo/Makefile b/firmware/tests/echo/Makefile
new file mode 100644 (file)
index 0000000..a8b398b
--- /dev/null
@@ -0,0 +1,21 @@
+
+PORT=/dev/ttyUSB0
+BSL=tos-bsl --invert-reset --invert-test -c $(PORT)
+
+#mcu=msp430x1611
+mcu=msp430x1612
+
+GCCINC=-T ../../ldscripts/161x.x
+CC=msp430-gcc -g -mmcu=$(mcu) -DGCC $(GCCINC) -I ../../include
+
+
+app=echo
+
+install: $(app)
+       $(BSL) -e -p $(app) 
+       #$(BSL) -P $(app) -g 0x2500
+       $(BSL) -P $(app) -r
+erase:
+       $(BSL) -e 
+clean:
+       rm $(app)
diff --git a/firmware/tests/echo/echo.c b/firmware/tests/echo/echo.c
new file mode 100644 (file)
index 0000000..fabe89c
--- /dev/null
@@ -0,0 +1,37 @@
+//GOODFET Echo test.\r
+\r
+\r
+#include "platform.h"\r
+\r
+#include <signal.h>\r
+#include <io.h>\r
+#include <iomacros.h>\r
+\r
+//LED on P1.0\r
+//IO on P5\r
+\r
+//! Initialize registers and all that jazz.\r
+void init(){\r
+  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer\r
+  \r
+  //LED and TX OUT\r
+  PLEDDIR |= PLEDPIN;\r
+  \r
+  //Enable Interrupts.\r
+  //eint();\r
+}\r
+\r
+//! Main loop.\r
+int main(void)\r
+{\r
+  volatile unsigned int i;\r
+  init();\r
+  \r
+  while(1){\r
+    i = 10000;\r
+    while(i--);\r
+    \r
+    PLEDOUT^=PLEDPIN;  // Blink\r
+  }\r
+}\r
+\r