Fix the field sequence for the I/O write and Memory write cycle types.
Previously the state machine was using the same sequence for read and
write cycles.
---
 decoders/lpc/pd.py | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/decoders/lpc/pd.py b/decoders/lpc/pd.py
index 8ab2faf..273420d 100644
--- a/decoders/lpc/pd.py
+++ b/decoders/lpc/pd.py
@@ -149,6 +149,7 @@ def reset(self):
         self.cycle_type = -1
         self.databyte = 0
         self.tarcount = 0
+        self.write_dir = -1
         self.synccount = 0
         self.ss_block = self.es_block = None
 
@@ -180,6 +181,7 @@ def handle_get_ct_dr(self):
         # LAD[3:0]: Cycle type / direction field (1 clock cycle).
 
         self.cycle_type = fields['CT_DR'].get(self.lad, 'Reserved / unknown')
+        self.write_dir = (self.lad & 0b0010) >> 1 # LAD1 == 1
 
         # TODO: Warning/error on invalid cycle types.
         if 'Reserved' in self.cycle_type:
@@ -219,8 +221,12 @@ def handle_get_addr(self):
         self.putb([3, [s % self.addr]])
         self.ss_block = self.samplenum
 
-        self.state = 'GET TAR'
-        self.tar_count = 0
+        if self.write_dir:
+            self.cycle_count = 0
+            self.state = 'GET DATA'
+        else:
+            self.state = 'GET TAR'
+        self.tarcount = 0
 
     def handle_get_tar(self):
         # LAD[3:0]: First TAR (turn-around) field (2 clock cycles).
@@ -261,8 +267,11 @@ def handle_get_sync(self):
 
         # TODO
 
-        self.cycle_count = 0
-        self.state = 'GET DATA'
+        if self.write_dir:
+            self.state = 'GET TAR2'
+        else:
+            self.cycle_count = 0
+            self.state = 'GET DATA'
 
     def handle_get_data(self):
         # LAD[3:0]: DATA field (2 clock cycles).
@@ -284,7 +293,10 @@ def handle_get_data(self):
         self.ss_block = self.samplenum
 
         self.cycle_count = 0
-        self.state = 'GET TAR2'
+        if self.write_dir:
+            self.state = 'GET TAR'
+        else:
+            self.state = 'GET TAR2'
 
     def handle_get_tar2(self):
         # LAD[3:0]: Second TAR field (2 clock cycles).
-- 
2.30.2


_______________________________________________
sigrok-devel mailing list
sigrok-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sigrok-devel

Reply via email to