From d593c0817c599f9cdd782079b83874024c838c98 Mon Sep 17 00:00:00 2001 From: androda Date: Thu, 14 Apr 2022 06:44:19 -0600 Subject: [PATCH] Seems to boot --- src/BlueSCSI.cpp | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/BlueSCSI.cpp b/src/BlueSCSI.cpp index 0d06593..89ba92f 100644 --- a/src/BlueSCSI.cpp +++ b/src/BlueSCSI.cpp @@ -180,8 +180,9 @@ SdFs SD; // Turn on the output only for BSY #define SCSI_BSY_ACTIVE() { gpio_mode(BSY, GPIO_OUTPUT_PP); SCSI_OUT(vBSY, active) } +#define SCSI_TARGET_ACTIVE() { gpio_mode(REQ, GPIO_OUTPUT_PP); gpio_mode(MSG, GPIO_OUTPUT_PP); gpio_mode(CD, GPIO_OUTPUT_PP); gpio_mode(IO, GPIO_OUTPUT_PP); gpio_mode(BSY, GPIO_OUTPUT_PP); TRANSCEIVER_IO_SET(vTR_TARGET,TR_OUTPUT);} // BSY,REQ,MSG,CD,IO Turn off output, BSY is the last input -#define SCSI_TARGET_INACTIVE() { gpio_mode(REQ, GPIO_INPUT_FLOATING); gpio_mode(MSG, GPIO_INPUT_FLOATING); gpio_mode(CD, GPIO_INPUT_FLOATING); gpio_mode(IO, GPIO_INPUT_FLOATING); gpio_mode(BSY, GPIO_INPUT_FLOATING); TRANSCEIVER_IO_SET(vTR_TARGET,TR_INPUT); } +#define SCSI_TARGET_INACTIVE() { pinMode(REQ, INPUT); pinMode(MSG, INPUT); pinMode(CD, INPUT); pinMode(IO, INPUT); pinMode(BSY, INPUT); TRANSCEIVER_IO_SET(vTR_TARGET,TR_INPUT); } #define DB_MODE_OUT 1 // push-pull mode #define DB_MODE_IN 4 // floating inputs @@ -209,7 +210,7 @@ SdFs SD; // Put DB and DP in output mode #define SCSI_DB_OUTPUT() { PBREG->CRL=(PBREG->CRL &0xfffffff0)|DB_MODE_OUT; PBREG->CRH = 0x11111111*DB_MODE_OUT; } // Put DB and DP in input mode -#define SCSI_DB_INPUT() { PBREG->CRL=(PBREG->CRL &0xfffffff0)|DB_MODE_IN ; PBREG->CRH = 0x11111111*DB_MODE_IN; if (DB_MODE_IN == 8) PBREG->BSRR = 0xFF01;} +#define SCSI_DB_INPUT() { PBREG->CRL=(PBREG->CRL &0xfffffff0)|DB_MODE_IN ; PBREG->CRH = 0x11111111*DB_MODE_IN; } // HDDiamge file #define HDIMG_ID_POS 2 // Position to embed ID number @@ -445,9 +446,9 @@ void setup() #if XCVR == 1 // Transceiver Pin Initialization - gpio_mode(TR_TARGET, GPIO_OUTPUT_PP); - gpio_mode(TR_INITIATOR, GPIO_OUTPUT_PP); - gpio_mode(TR_DBP, GPIO_OUTPUT_PP); + pinMode(TR_TARGET, OUTPUT); + pinMode(TR_INITIATOR, OUTPUT); + pinMode(TR_DBP, OUTPUT); TRANSCEIVER_IO_SET(vTR_INITIATOR,TR_INPUT); #endif @@ -465,18 +466,18 @@ void setup() TRANSCEIVER_IO_SET(vTR_DBP,TR_INPUT); // Initiator port - gpio_mode(ATN, GPIO_INPUT_FLOATING); - gpio_mode(BSY, GPIO_INPUT_FLOATING); - gpio_mode(ACK, GPIO_INPUT_FLOATING); - gpio_mode(RST, GPIO_INPUT_FLOATING); - gpio_mode(SEL, GPIO_INPUT_FLOATING); + pinMode(ATN, INPUT); + pinMode(BSY, INPUT); + pinMode(ACK, INPUT); + pinMode(RST, INPUT); + pinMode(SEL, INPUT); TRANSCEIVER_IO_SET(vTR_INITIATOR,TR_INPUT); // Target port - gpio_mode(MSG, GPIO_INPUT_FLOATING); - gpio_mode(CD, GPIO_INPUT_FLOATING); - gpio_mode(REQ, GPIO_INPUT_FLOATING); - gpio_mode(IO, GPIO_INPUT_FLOATING); + pinMode(MSG, INPUT); + pinMode(CD, INPUT); + pinMode(REQ, INPUT); + pinMode(IO, INPUT); TRANSCEIVER_IO_SET(vTR_TARGET,TR_INPUT); #else // Input port @@ -490,10 +491,10 @@ void setup() gpio_mode(CD, GPIO_OUTPUT_OD); gpio_mode(REQ, GPIO_OUTPUT_OD); gpio_mode(IO, GPIO_OUTPUT_OD); -#endif // Turn off the output port SCSI_TARGET_INACTIVE() +#endif //Occurs when the RST pin state changes from HIGH to LOW //attachInterrupt(RST, onBusReset, FALLING); @@ -1576,7 +1577,10 @@ void loop() enableResetJmp(); #if XCVR == 1 - TRANSCEIVER_IO_SET(vTR_TARGET,TR_OUTPUT); + // Reconfigure target pins to output mode, after resetting their values + GPIOB->regs->BSRR = 0x000000E8; // MSG, CD, REQ, IO + GPIOA->regs->BSRR = 0x00000200; // BSY + SCSI_TARGET_ACTIVE(); #endif // Set BSY to-when selected SCSI_BSY_ACTIVE(); // Turn only BSY output ON, ACTIVE