OS X instructions.
[goodfet] / client / GoodFETMSP430.py
index d5e5f8f..bb20bfe 100644 (file)
@@ -10,12 +10,13 @@ import sys, time, string, cStringIO, struct, glob, serial, os;
 from GoodFET import GoodFET;
 
 class GoodFETMSP430(GoodFET):
+    APP=0x11;
     MSP430APP=0x11;  #Changed by inheritors.
     CoreID=0;
     DeviceID=0;
     JTAGID=0;
     MSP430ident=0;
-    def MSP430setup(self):
+    def setup(self):
         """Move the FET into the MSP430 JTAG application."""
         self.writecmd(self.MSP430APP,0x10,0,None);
         
@@ -35,6 +36,12 @@ class GoodFETMSP430(GoodFET):
             ord(self.data[0])+(ord(self.data[1])<<8)+
             (ord(self.data[2])<<16)+(ord(self.data[3])<<24));
         return DeviceID;
+    def peek16(self,adr,memory="vn"):
+        return self.MSP430peek(adr);
+    def peek8(self,address, memory="vn"):
+        adr=self.MSP430peek(adr&~1);
+        if adr&1==0: return adr&0xFF;
+        else: return adr>>8;
     def MSP430peek(self,adr):
         """Read a word at an address."""
         self.data=[adr&0xff, (adr&0xff00)>>8,
@@ -73,14 +80,14 @@ class GoodFETMSP430(GoodFET):
         #print "%2x %2x %2x %2x ..." % (data[0], data[1], data[2], data[3]);
         self.writecmd(self.MSP430APP,0xE1,len(self.data),self.data);
         return ord(self.data[0])+(ord(self.data[1])<<8);
-    def MSP430start(self):
+    def start(self):
         """Start debugging."""
         self.writecmd(self.MSP430APP,0x20,0,self.data);
         self.JTAGID=ord(self.data[0]);
         #print "Identified as %02x." % self.JTAGID;
         if(not (self.JTAGID==0x89 or self.JTAGID==0x91)):
             print "Error, misidentified as %02x." % self.JTAGID;
-        
+        self.MSP430haltcpu();
     def MSP430haltcpu(self):
         """Halt the CPU."""
         self.writecmd(self.MSP430APP,0xA0,0,self.data);
@@ -124,15 +131,15 @@ class GoodFETMSP430(GoodFET):
         0xf249: "MSP430F24x",
         0xf26f: "MSP430F261x",
         0xf237: "MSP430F23x0",
-        
+        0xf201: "MSP430F201x",
         
         #MSP430F1xx
         0xf16c: "MSP430F161x",
-        0xf149: "MSP430F13x", #or f14x(1)
-        0xf112: "MSP430F11x", #or f11x1
+        0xf149: "MSP430F13x",  #or f14x(1)
+        0xf112: "MSP430F11x",  #or f11x1
         0xf143: "MSP430F14x",
-        0xf112: "MSP430F11x", #or F11x1A
-        0xf123: "MSP430F1xx", #or F123x
+        0xf112: "MSP430F11x",  #or F11x1A
+        0xf123: "MSP430F1xx",  #or F123x
         0x1132: "MSP430F1122", #or F1132
         0x1232: "MSP430F1222", #or F1232
         0xf169: "MSP430F16x",
@@ -186,7 +193,12 @@ class GoodFETMSP430(GoodFET):
     def MSP430masserase(self):
         """Erase MSP430 flash memory."""
         self.writecmd(self.MSP430APP,0xE3,0,None);
-    
+    def MSP430setPC(self, pc):
+        """Set the program counter."""
+        self.writecmd(self.MSP430APP,0xC2,2,[pc&0xFF,(pc>>8)&0xFF]);
+    def MSP430run(self):
+        """Reset the MSP430 to run on its own."""
+        self.writecmd(self.MSP430APP,0x21,0,None);
     def MSP430dumpbsl(self):
         self.MSP430dumpmem(0xC00,0xfff);
     def MSP430dumpallmem(self):