Kaynağa Gözat

Use SCSI_PINS struct in scsi_accel code

androda 2 yıl önce
ebeveyn
işleme
57ed8f0f3c

+ 4 - 1
lib/BlueSCSI_platform_RP2040/BlueSCSI_platform.cpp

@@ -48,7 +48,9 @@ SCSI_PINS scsi_pins = {  // Default values, to be tweaked later as needed
     .IN_BSY = SCSI_IN_BSY,
     .IN_RST = SCSI_IN_RST,
     .IN_ACK = SCSI_IN_ACK,
-    .IN_ATN = SCSI_IN_ATN
+    .IN_ATN = SCSI_IN_ATN,
+
+    .SCSI_ACCEL_PINMASK = SCSI_ACCEL_SETPINS
 };
 
 #ifdef MBED
@@ -165,6 +167,7 @@ void platform_init()
 
         // Reset REQ to appropriate pin for older hardware
         scsi_pins.OUT_REQ = SCSI_OUT_REQ_BEFORE_2023_09a;
+        scsi_pins.SCSI_ACCEL_PINMASK = SCSI_ACCEL_SETPINS_PRE09A;
 
         // Initialize logging to SWO pin (UART0) 
         gpio_conf(SWO_PIN,        GPIO_FUNC_UART,false,false, true,  false, true);

+ 4 - 0
lib/BlueSCSI_platform_RP2040/BlueSCSI_platform_gpio.h

@@ -83,6 +83,9 @@
 // Other pins
 #define SWO_PIN 16
 
+#define SCSI_ACCEL_SETPINS 0x801FF
+#define SCSI_ACCEL_SETPINS_PRE09A 0x201FF
+
 typedef struct __attribute__((packed))
 {
 	uint8_t OUT_IO;
@@ -104,4 +107,5 @@ typedef struct __attribute__((packed))
 	uint8_t IN_ACK;
 	uint8_t IN_ATN;
 
+	uint32_t SCSI_ACCEL_PINMASK;
 } SCSI_PINS;

+ 10 - 10
lib/BlueSCSI_platform_RP2040/scsi_accel_rp2040.cpp

@@ -767,7 +767,7 @@ static void scsidma_config_gpio()
     else if (g_scsi_dma_state == SCSIDMA_WRITE)
     {
         // Make sure the initial state of all pins is high and output
-        pio_sm_set_pins(SCSI_DMA_PIO, SCSI_DATA_SM, is202309a() ? 0x801FF : 0x201FF);
+        pio_sm_set_pins(SCSI_DMA_PIO, SCSI_DATA_SM, scsi_pins.SCSI_ACCEL_PINMASK);
         // Binary of 0x3FF is is 0 0 1 1 11111111
         //                       ? A R P DBP
         // A = ACK, R = REQ, DBP are the data pins
@@ -775,7 +775,7 @@ static void scsidma_config_gpio()
         // 100000010000000000111111111
         // Probably right to left here, so 0 - 9 are set 'high' and 10/11 are set 'low'
         pio_sm_set_consecutive_pindirs(SCSI_DMA_PIO, SCSI_DATA_SM, 0, 9, true);
-        pio_sm_set_consecutive_pindirs(SCSI_DMA_PIO, SCSI_DATA_SM, is202309a() ? 19 : 17, 1, true);
+        pio_sm_set_consecutive_pindirs(SCSI_DMA_PIO, SCSI_DATA_SM, scsi_pins.OUT_REQ, 1, true);
 
         iobank0_hw->io[SCSI_IO_DB0].ctrl  = GPIO_FUNC_PIO0;
         iobank0_hw->io[SCSI_IO_DB1].ctrl  = GPIO_FUNC_PIO0;
@@ -794,16 +794,16 @@ static void scsidma_config_gpio()
         {
             // Asynchronous read
             // Data bus as input, REQ pin as output
-            pio_sm_set_pins(SCSI_DMA_PIO, SCSI_DATA_SM, is202309a() ? 0x801FF : 0x201FF);
+            pio_sm_set_pins(SCSI_DMA_PIO, SCSI_DATA_SM, scsi_pins.SCSI_ACCEL_PINMASK);
             pio_sm_set_consecutive_pindirs(SCSI_DMA_PIO, SCSI_DATA_SM, 0, 9, false);
-            pio_sm_set_consecutive_pindirs(SCSI_DMA_PIO, SCSI_DATA_SM, is202309a() ? 19 : 17, 1, true);
+            pio_sm_set_consecutive_pindirs(SCSI_DMA_PIO, SCSI_DATA_SM, scsi_pins.OUT_REQ, 1, true);
         }
         else
         {
             // Synchronous read, REQ pin is written by SYNC_SM
-            pio_sm_set_pins(SCSI_DMA_PIO, SCSI_SYNC_SM, is202309a() ? 0x801FF : 0x201FF);
+            pio_sm_set_pins(SCSI_DMA_PIO, SCSI_SYNC_SM, scsi_pins.SCSI_ACCEL_PINMASK);
             pio_sm_set_consecutive_pindirs(SCSI_DMA_PIO, SCSI_DATA_SM, 0, 9, false);
-            pio_sm_set_consecutive_pindirs(SCSI_DMA_PIO, SCSI_SYNC_SM, is202309a() ? 19 : 17, 1, true);
+            pio_sm_set_consecutive_pindirs(SCSI_DMA_PIO, SCSI_SYNC_SM, scsi_pins.OUT_REQ, 1, true);
         }
 
         iobank0_hw->io[SCSI_IO_DB0].ctrl  = GPIO_FUNC_SIO;
@@ -870,7 +870,7 @@ void scsi_accel_rp2040_init()
     g_scsi_dma.pio_offset_async_write = pio_add_program(SCSI_DMA_PIO, &scsi_accel_async_write_program);
     g_scsi_dma.pio_cfg_async_write = scsi_accel_async_write_program_get_default_config(g_scsi_dma.pio_offset_async_write);
     sm_config_set_out_pins(&g_scsi_dma.pio_cfg_async_write, SCSI_IO_DB0, 9);
-    sm_config_set_sideset_pins(&g_scsi_dma.pio_cfg_async_write, is202309a() ? 19 : 17);
+    sm_config_set_sideset_pins(&g_scsi_dma.pio_cfg_async_write, scsi_pins.OUT_REQ);
     sm_config_set_fifo_join(&g_scsi_dma.pio_cfg_async_write, PIO_FIFO_JOIN_TX);
     sm_config_set_out_shift(&g_scsi_dma.pio_cfg_async_write, true, false, 32);
 
@@ -883,7 +883,7 @@ void scsi_accel_rp2040_init()
     g_scsi_dma.pio_offset_sync_write = pio_add_program(SCSI_DMA_PIO, &scsi_sync_write_program);
     g_scsi_dma.pio_cfg_sync_write = scsi_sync_write_program_get_default_config(g_scsi_dma.pio_offset_sync_write);
     sm_config_set_out_pins(&g_scsi_dma.pio_cfg_sync_write, SCSI_IO_DB0, 9);
-    sm_config_set_sideset_pins(&g_scsi_dma.pio_cfg_sync_write, is202309a() ? 19 : 17);
+    sm_config_set_sideset_pins(&g_scsi_dma.pio_cfg_sync_write, scsi_pins.OUT_REQ);
     sm_config_set_out_shift(&g_scsi_dma.pio_cfg_sync_write, true, true, 32);
     sm_config_set_in_shift(&g_scsi_dma.pio_cfg_sync_write, true, true, 1);
 
@@ -891,14 +891,14 @@ void scsi_accel_rp2040_init()
     g_scsi_dma.pio_offset_read = pio_add_program(SCSI_DMA_PIO, &scsi_accel_read_program);
     g_scsi_dma.pio_cfg_read = scsi_accel_read_program_get_default_config(g_scsi_dma.pio_offset_read);
     sm_config_set_in_pins(&g_scsi_dma.pio_cfg_read, SCSI_IO_DB0);
-    sm_config_set_sideset_pins(&g_scsi_dma.pio_cfg_read, is202309a() ? 19 : 17);
+    sm_config_set_sideset_pins(&g_scsi_dma.pio_cfg_read, scsi_pins.OUT_REQ);
     sm_config_set_out_shift(&g_scsi_dma.pio_cfg_read, true, false, 32);
     sm_config_set_in_shift(&g_scsi_dma.pio_cfg_read, true, true, 32);
 
     // Synchronous SCSI read pacer
     g_scsi_dma.pio_offset_sync_read_pacer = pio_add_program(SCSI_DMA_PIO, &scsi_sync_read_pacer_program);
     g_scsi_dma.pio_cfg_sync_read_pacer = scsi_sync_read_pacer_program_get_default_config(g_scsi_dma.pio_offset_sync_read_pacer);
-    sm_config_set_sideset_pins(&g_scsi_dma.pio_cfg_sync_read_pacer, is202309a() ? 19 : 17);
+    sm_config_set_sideset_pins(&g_scsi_dma.pio_cfg_sync_read_pacer, scsi_pins.OUT_REQ);
 
     // Read parity check
     g_scsi_dma.pio_offset_read_parity = pio_add_program(SCSI_DMA_PIO, &scsi_read_parity_program);