Browse Source

Clean up in pins

Per Mårtensson 3 years ago
parent
commit
f4ecd85520
3 changed files with 32 additions and 23 deletions
  1. 21 13
      sw/include/blacksasi.h
  2. 7 6
      sw/src/main.cpp
  3. 4 4
      sw/variant/blacksasi_f411m/blacksasi_f411m.h

+ 21 - 13
sw/include/blacksasi.h

@@ -78,21 +78,30 @@
 #define PEREG GPIOE->regs
 #define PEREG GPIOE->regs
 
 
 // Termination control (LOW is active)
 // Termination control (LOW is active)
-//                                                12   8   4   0             12   8   4   0
-#define TERMINATION_HIGH()      PBREG->BSRR = 0b0000000100000000 << 16 | 0b0000001000000000;
-#define TERMINATION_LOW()       PBREG->BSRR = 0b0000001000000000 << 16 | 0b0000000100000000;
-#define TERMINATION_OFF()       PBREG->BSRR = 0b0000001100000000;
+#define TERMINATION_HIGH()      GPIOREG(BOARD_SCSI_TERM_HIGH)->BSRR = (1 << BOARD_SCSI_TERM_HIGH % 16) << 16 | (1 << BOARD_SCSI_TERM_LOW % 16);
+#define TERMINATION_LOW()       GPIOREG(BOARD_SCSI_TERM_HIGH)->BSRR = (1 << BOARD_SCSI_TERM_LOW % 16) << 16 | (1 << BOARD_SCSI_TERM_HIGH % 16);
+#define TERMINATION_OFF()       GPIOREG(BOARD_SCSI_TERM_HIGH)->BSRR = (1 << BOARD_SCSI_TERM_HIGH % 16) | (1 << BOARD_SCSI_TERM_LOW % 16);
 
 
 // Enable SCSI buffers
 // Enable SCSI buffers
-//                                                12   8   4   0
-#define SCSI_OUTPUT_ENABLE()    PBREG->BSRR = 0b0001000000000000 << 16 ;
-#define SCSI_OUTPUT_DISABLE()   PBREG->BSRR = 0b0001000000000000;
-
+#define SCSI_OUTPUT_ENABLE()    GPIOREG(BOARD_TRANS_OE)->BSRR = (1 << (BOARD_TRANS_OE % 16)) << 16;
+#define SCSI_OUTPUT_DISABLE()   GPIOREG(BOARD_TRANS_OE)->BSRR = (1 << (BOARD_TRANS_OE % 16));
 
 
 // SCSI Data Direction
 // SCSI Data Direction
-//                                                12   8   4   0
-#define SCSI_BUFFERS_IN()       PCREG->BSRR = 0b0000000000000001 << 16 ;
-#define SCSI_BUFFERS_OUT()      PCREG->BSRR = 0b0000000000000001;
+#define SCSI_DATABUS_IN()       GPIOREG(BOARD_SCSI_DTD)->BSRR = (1 << (BOARD_SCSI_DTD % 16)) << 16; 
+#define SCSI_DATABUS_OUT()      GPIOREG(BOARD_SCSI_DTD)->BSRR = (1 << (BOARD_SCSI_DTD % 16))
+
+// SCSI IND Direction
+#define SCSI_IND_IN()           GPIOREG(BOARD_SCSI_IND)->BSRR = (1 << (BOARD_SCSI_IND % 16));
+#define SCSI_IND_OUT()          GPIOREG(BOARD_SCSI_IND)->BSRR = (1 << (BOARD_SCSI_IND % 16)) << 16;
+
+//SCSI Data and IND Direction
+#define SCSI_DATABUS_IND_IN()   GPIOREG(BOARD_SCSI_DTD)->BSRR = ((1 << (BOARD_SCSI_DTD % 16)) << 16) | (1 << (BOARD_SCSI_IND % 16));
+#define SCSI_DATABUS_IND_OUT()  GPIOREG(BOARD_SCSI_DTD)->BSRR = ((1 << (BOARD_SCSI_IND % 16)) << 16) | (1 << (BOARD_SCSI_DTD % 16));
+
+// SCSI TAD Direction
+
+#define SCSI_TAD_IN()           GPIOREG(BOARD_SCSI_TAD)->BSRR = (1 << (BOARD_SCSI_TAD % 16));
+#define SCSI_TAD_OUT()          GPIOREG(BOARD_SCSI_TAD)->BSRR = (1 << (BOARD_SCSI_TAD % 16)) << 16;
 
 
 // Virtual pin (Arduio compatibility is slow, so make it MCU-dependent)
 // Virtual pin (Arduio compatibility is slow, so make it MCU-dependent)
 #define PA(BIT)       (BIT)
 #define PA(BIT)       (BIT)
@@ -119,11 +128,10 @@
 #define vIND       PC(1)      // SCSI:IND
 #define vIND       PC(1)      // SCSI:IND
 #define vTAD       PC(2)      // SCSI:TAD
 #define vTAD       PC(2)      // SCSI:TAD
 #define vTRANS_OE  PB(12)     // SCSI:TRANS_OE
 #define vTRANS_OE  PB(12)     // SCSI:TRANS_OE
-// SCSI output pin control: opendrain active LOW (direct pin drive)
+// SCSI output pin control: active LOW (direct pin drive)
 #define SCSI_OUT(VPIN,ACTIVE) { GPIOREG(VPIN)->BSRR = BITMASK(VPIN) << ((ACTIVE) ? 16 : 0); }
 #define SCSI_OUT(VPIN,ACTIVE) { GPIOREG(VPIN)->BSRR = BITMASK(VPIN) << ((ACTIVE) ? 16 : 0); }
 
 
 // SCSI input pin check (inactive=0,active=1)
 // SCSI input pin check (inactive=0,active=1)
-//BLACKSASI need to be checked
 #define SCSI_IN(VPIN) ((~GPIOREG(VPIN)->IDR >> ((VPIN % 16) & 15)) & 1)
 #define SCSI_IN(VPIN) ((~GPIOREG(VPIN)->IDR >> ((VPIN % 16) & 15)) & 1)
 
 
 // HDDiamge file
 // HDDiamge file

+ 7 - 6
sw/src/main.cpp

@@ -13,7 +13,7 @@
  *  General Public License for more details.  
  *  General Public License for more details.  
  *  
  *  
  *  You should have received a copy of the GNU General Public License  
  *  You should have received a copy of the GNU General Public License  
- *  along with this program.  If not, see https://git.sweproj.com/ABC80/Blackhttps://git.sweproj.com/SASI/
+ *  along with this program.  If not, see https://git.sweproj.com/ABC80/BlackSASI
  *  
  *  
  *  This file incorporates work covered by the following copyright and  
  *  This file incorporates work covered by the following copyright and  
  *  permission notice:  
  *  permission notice:  
@@ -71,6 +71,7 @@ SdFs SD;
 // Logfile
 // Logfile
 FsFile LOG_FILE;
 FsFile LOG_FILE;
 
 
+//BLACKSASI clean this up and use defines
 // Data pins
 // Data pins
 //                                                         5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 
 //                                                         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 scsiDbOutputRegOr_PDREG         = 0b00000000000000000101010101010101;
@@ -84,10 +85,10 @@ static const uint32_t scsiDbInputOutputPullAnd_PEREG  = 0b0000000000000000010101
 
 
 
 
 // Put DB and DP in output mode and control buffers
 // Put DB and DP in output mode and control buffers
-#define SCSI_DB_OUTPUT() { PDREG->MODER = (PDREG->MODER & scsiDbInputOutputAnd_PDREG) | scsiDbOutputRegOr_PDREG; PEREG->MODER = (PEREG->MODER & scsiDbInputOutputAnd_PEREG) | scsiDbOutputRegOr_PEREG; SCSI_BUFFERS_OUT() ;}
+#define SCSI_DB_OUTPUT() { PDREG->MODER = (PDREG->MODER & scsiDbInputOutputAnd_PDREG) | scsiDbOutputRegOr_PDREG; PEREG->MODER = (PEREG->MODER & scsiDbInputOutputAnd_PEREG) | scsiDbOutputRegOr_PEREG; SCSI_DATABUS_OUT() ;}
 
 
 // Put DB and DP in input mode and control buffers
 // Put DB and DP in input mode and control buffers
-#define SCSI_DB_INPUT()  { PDREG->MODER = (PDREG->MODER & scsiDbInputOutputAnd_PDREG); PEREG->MODER = (PEREG->MODER & scsiDbInputOutputAnd_PEREG); SCSI_BUFFERS_IN();}
+#define SCSI_DB_INPUT()  { PDREG->MODER = (PDREG->MODER & scsiDbInputOutputAnd_PDREG); PEREG->MODER = (PEREG->MODER & scsiDbInputOutputAnd_PEREG); SCSI_DATABUS_IN();}
 #define SCSI_SET_PULL()  { PDREG->PUPDR |= scsiDbInputOutputPullAnd_PDREG; PEREG->PUPDR |= scsiDbInputOutputPullAnd_PEREG; }
 #define SCSI_SET_PULL()  { PDREG->PUPDR |= scsiDbInputOutputPullAnd_PDREG; PEREG->PUPDR |= scsiDbInputOutputPullAnd_PEREG; }
 
 
 // BSY,REQ,MSG,CD,IO Turn off output, BSY is the last input
 // BSY,REQ,MSG,CD,IO Turn off output, BSY is the last input
@@ -305,12 +306,12 @@ void setup()
 
 
   board_rev = digitalRead(BOARD_REV_PIN0) << 1 | digitalRead(BOARD_REV_PIN1) << 2 | digitalRead(BOARD_REV_PIN2) << 3 | 0x01;
   board_rev = digitalRead(BOARD_REV_PIN0) << 1 | digitalRead(BOARD_REV_PIN1) << 2 | digitalRead(BOARD_REV_PIN2) << 3 | 0x01;
 
 
-  SCSI_BUFFERS_IN() ;
-
+  SCSI_DATABUS_IND_IN();
+  SCSI_TAD_IN();
   SCSI_SET_PULL();
   SCSI_SET_PULL();
 
 
   //Default turn termination off
   //Default turn termination off
-  TERMINATION_HIGH();
+  TERMINATION_OFF();
 #if DEBUG > 0
 #if DEBUG > 0
   Serial.begin(19200);
   Serial.begin(19200);
   delay(3000);
   delay(3000);

+ 4 - 4
sw/variant/blacksasi_f411m/blacksasi_f411m.h

@@ -123,11 +123,11 @@
 #define BOARD_SCSI_ACK          PB7
 #define BOARD_SCSI_ACK          PB7
 #define BOARD_TRANS_OE          PB12
 #define BOARD_TRANS_OE          PB12
 #define BOARD_SCSI_ATN          PB14
 #define BOARD_SCSI_ATN          PB14
-#define BOARD_SCSI_DTD          PC0
-#define BOARD_SCSI_IND          PC1
+#define BOARD_SCSI_DTD          PC0                 // Needs to be on the same port as BOARD_SCSI_IND
+#define BOARD_SCSI_IND          PC1                 // Needs to be on the same port as BOARD_SCSI_DTD
 #define BOARD_SCSI_TAD          PC2
 #define BOARD_SCSI_TAD          PC2
-#define BOARD_SCSI_TERM_HIGH    PB8
-#define BOARD_SCSI_TERM_LOW     PB9
+#define BOARD_SCSI_TERM_HIGH    PB8                 // Needs to be on the same port as BOARD_SCSI_TERM_LOW
+#define BOARD_SCSI_TERM_LOW     PB9                 // Needs to be on the same port as BOARD_SCSI_TERM_HIGH
 #define BOARD_SCSI_TERM_POWER   PC8
 #define BOARD_SCSI_TERM_POWER   PC8
 
 
 #define BOARD_NR_PWM_PINS       22
 #define BOARD_NR_PWM_PINS       22