Browse Source

Fixed gpio mode and direction

Per Mårtensson 3 years ago
parent
commit
ab5bb08dd9
2 changed files with 17 additions and 7 deletions
  1. 3 3
      sw/include/blacksasi.h
  2. 14 4
      sw/src/main.cpp

+ 3 - 3
sw/include/blacksasi.h

@@ -93,10 +93,10 @@
 #define PE(BIT)       (BIT + 64)
 
 // Virtual pin decoding
-#define GPIOREG(VPIN)     ((VPIN) >= 16 ? PBREG : PAREG)
+#define GPIOREG(VPIN)     ((VPIN) >= 16 ? ((VPIN) >= 32 ? ((VPIN) >= 48 ? ((VPIN) >= 48 ? PEREG : PDREG) : PCREG) : PBREG) : PAREG)
 #define BITMASK(VPIN)     (1 << ((VPIN) & 15))
 
-#define vATN       PB(14)      // SCSI:ATN
+#define vATN       PB(14)     // SCSI:ATN
 #define vBSY       PB(6)      // SCSI:BSY
 #define vACK       PB(7)      // SCSI:ACK
 #define vRST       PA(15)     // SCSI:RST
@@ -109,7 +109,7 @@
 #define vDTD       PC(0)      // SCSI:DTD
 #define vIND       PC(1)      // SCSI:IND
 #define vTAD       PC(2)      // SCSI:TAD
-
+#define vTRANS_OE  PB(12)     // SCSI:TRANS_OE
 // SCSI output pin control: opendrain active LOW (direct pin drive)
 #define SCSI_OUT(VPIN,ACTIVE) { GPIOREG(VPIN)->BSRR = BITMASK(VPIN) << ((ACTIVE) ? 16 : 0); }
 

+ 14 - 4
sw/src/main.cpp

@@ -71,13 +71,23 @@ SdFs SD;
 // Logfile
 FsFile LOG_FILE;
 
-static const uint32_t scsiDbOutputRegOr = 0x55150011;     // 0b01010101 00010101 00000000 00010001
-static const uint32_t scsiDbInputOutputAnd = 0x00C0FFCC;  // 0b00000000 11000000 11111111 11001100
+// Data pins
+//                                                    5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 
+static const uint32_t scsiDbOutputRegOr_PDREG    = 0b00000000000000000101010101010101;
+static const uint32_t scsiDbInputOutputAnd_PDREG = 0b00000000000000000000000000000000;
+//                                                    5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 
+static const uint32_t scsiDbOutputRegOr_PEREG    = 0b00000000000000000000000000000001;
+static const uint32_t scsiDbInputOutputAnd_PEREG = 0b00000000000000000011111111110000;
+
+
+
+
+
 // Put DB and DP in output mode
-#define SCSI_DB_OUTPUT() { PBREG->MODER = (PBREG->MODER & scsiDbInputOutputAnd) | scsiDbOutputRegOr; }
+#define SCSI_DB_OUTPUT() { PDREG->MODER = (PDREG->MODER & scsiDbInputOutputAnd_PDREG) | scsiDbOutputRegOr_PDREG; PEREG->MODER = (PEREG->MODER & scsiDbInputOutputAnd_PEREG) | scsiDbOutputRegOr_PEREG; }
 
 // Put DB and DP in input mode
-#define SCSI_DB_INPUT()  { PBREG->MODER = (PBREG->MODER & scsiDbInputOutputAnd); }
+#define SCSI_DB_INPUT()  { PDREG->MODER = (PDREG->MODER & scsiDbInputOutputAnd_PDREG); PEREG->MODER = (PEREG->MODER & scsiDbInputOutputAnd_PEREG); }
 
 
 // BSY,REQ,MSG,CD,IO Turn off output, BSY is the last input