more changes to TX test code
[goodfet] / client / gplay-arm.py
index f8dd394..70333d7 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env ipython
 import sys, struct, binascii,time
-from GoodFETARM import *
+from GoodFETARM7 import *
 from intelhex import IntelHex
 
 
@@ -15,9 +15,9 @@ def init():
     #Connect to target
     print >>sys.stderr,"Setting up JTAG ARM on goodfet..."
     client.setup()
-    print >>sys.stderr,"Starting JTAG ARM on goodfet..."
+    print >>sys.stderr,"Starting JTAG ARM on goodfet...\n\n"
     client.start()
-    print "STARTUP: "+repr(client.data)
+    print "STARTUP: %s\n"%repr(client.data)
     #
 
 def print_registers():
@@ -109,6 +109,15 @@ def test():
     print "PC:",client.ARMgetPC()
     print "PC:",client.ARMgetPC()
     print "PC:",client.ARMgetPC()
+    print "Testing readChunk/writeChunk"
+    mem=client.ARMreadChunk(0x200000,32)
+    client.ARMwriteChunk(0x200000,mem)
+    mem2=client.ARMreadChunk(0x200000,32)
+    if (mem != mem2):
+        print "Failed: \n%s\n%s"%(repr([hex(x) for x in mem]), repr([hex(x) for x in mem2]))
+    else:
+        print "Passed."
+
 
 def test1():
     global data
@@ -334,7 +343,6 @@ def readtest(start=0,end=14):
         seed += 1
 
 init()
-print "Don't forget to 'client.stop()' if you want to exit cleanly"
 
 
 def printResults():
@@ -342,6 +350,38 @@ def printResults():
             x=results[y]
             print "%.2x=%s"%(y,repr(["%x"%t for t in x]))
 
+def ARMreadMem(self, adr, wrdcount):
+    retval = [] 
+    r0 = self.ARMget_register(5);        # store R0 and R1
+    r1 = self.ARMget_register(9);
+    #print >>sys.stderr,("CPSR:\t%x"%self.ARMget_regCPSR())
+    for word in range(adr, adr+(wrdcount*4), 4):
+        #sys.stdin.readline()
+        self.ARMset_register(5, word);        # write address into R0
+        self.ARMset_register(9, 0xdeadbeef)
+        self.ARM_nop(0)
+        self.ARM_nop(1)
+        self.ARMdebuginstr(0xe4959004L, 0); # push LDR R1, [R0], #4 into instruction pipeline  (autoincrements for consecutive reads)
+        self.ARM_nop(0)
+        self.ARMrestart()
+        self.ARMwaitDBG()
+        time.sleep(.4)
+        self.ARMdebuginstr(0x47146,0)
+        self.ARMdebuginstr(0x47147,0)
+        print hex(self.ARMget_register(9))
+        # FIXME: this may end up changing te current debug-state.  should we compare to current_dbgstate?
+        #print repr(self.data[4])
+        if (len(self.data)>4 and self.data[4] == '\x00'):
+          print >>sys.stderr,("FAILED TO READ MEMORY/RE-ENTER DEBUG MODE")
+          raise Exception("FAILED TO READ MEMORY/RE-ENTER DEBUG MODE")
+          #return -1
+        else:
+          retval.append( self.ARMget_register(9) )  # read memory value from R1 register
+          #print >>sys.stderr,("CPSR: %x\t\tR0: %x\t\tR1: %x"%(self.ARMget_regCPSR(),self.ARMget_register(0),self.ARMget_register(1)))
+    self.ARMset_register(9, r1);       # restore R0 and R1 
+    self.ARMset_register(5, r0);
+    return retval
+
 """
   case 0xD0: // loopback test
     cmddatalong[0] = 0x12345678;