Bläddra i källkod

Get USB serial logging working

Enabled USB serial logging
Morio 1 år sedan
förälder
incheckning
68d8f3431d

+ 1 - 1
lib/ZuluSCSI_platform_GD32F205/gd32_sdio_sdcard.c

@@ -544,7 +544,7 @@ sd_error_enum sd_block_read(uint32_t *preadbuffer, uint64_t readaddr, uint16_t b
     } else if(SD_DMA_MODE == transmode) {
         /* DMA mode */
         /* enable the SDIO corresponding interrupts and DMA function */
-        sdio_interrupt_enable(SDIO_INT_CCRCERR | SDIO_INT_DTTMOUT | SDIO_INT_RXORE | SDIO_INT_DTEND | SDIO_INT_STBITE);
+        sdio_interrupt_enable(SDIO_INT_DTCRCERR | SDIO_INT_DTTMOUT | SDIO_INT_RXORE | SDIO_INT_DTEND | SDIO_INT_STBITE);
         sdio_dma_enable();
         dma_receive_config(preadbuffer, blocksize);
         uint32_t start = millis();

+ 22 - 21
lib/ZuluSCSI_platform_GD32F450/ZuluSCSI_platform.cpp

@@ -30,6 +30,7 @@
 #include <SdFat.h>
 #include <scsi.h>
 #include <assert.h>
+#include "usb_serial.h"
 
 extern "C" {
 
@@ -307,26 +308,26 @@ void platform_disable_led(void)
 // this function sends as much as fits in USB CDC buffer.
 
 // \todo add serial logging for the F4
-// static void usb_log_poll()
-// {
-//     static uint32_t logpos = 0;
-
-//     if (usb_serial_ready())
-//     {
-//         // Retrieve pointer to log start and determine number of bytes available.
-//         uint32_t available = 0;
-//         const char *data = log_get_buffer(&logpos, &available);
-//         // Limit to CDC packet size
-//         uint32_t len = available;
-//         if (len == 0) return;
-//         if (len > USB_CDC_DATA_PACKET_SIZE) len = USB_CDC_DATA_PACKET_SIZE;
-
-//         // Update log position by the actual number of bytes sent
-//         // If USB CDC buffer is full, this may be 0
-//         usb_serial_send((uint8_t*)data, len);
-//         logpos -= available - len;
-//     }
-// }
+static void usb_log_poll()
+{
+    static uint32_t logpos = 0;
+
+    if (usb_serial_ready())
+    {
+        // Retrieve pointer to log start and determine number of bytes available.
+        uint32_t available = 0;
+        const char *data = log_get_buffer(&logpos, &available);
+        // Limit to CDC packet size
+        uint32_t len = available;
+        if (len == 0) return;
+        if (len > USB_CDC_DATA_PACKET_SIZE) len = USB_CDC_DATA_PACKET_SIZE;
+
+        // Update log position by the actual number of bytes sent
+        // If USB CDC buffer is full, this may be 0
+        usb_serial_send((uint8_t*)data, len);
+        logpos -= available - len;
+    }
+}
 
 /*****************************************/
 /* Crash handlers                        */
@@ -505,7 +506,7 @@ void platform_reset_watchdog()
 void platform_poll()
 {
     // adc_poll();
-    // usb_log_poll();
+    usb_log_poll();
 }
 
 uint8_t platform_get_buttons()

+ 7 - 10
lib/ZuluSCSI_platform_GD32F450/gd32_sdio_sdcard.c

@@ -544,7 +544,7 @@ sd_error_enum sd_block_read(uint32_t *preadbuffer, uint64_t readaddr, uint16_t b
     } else if(SD_DMA_MODE == transmode) {
         /* DMA mode */
         /* enable the SDIO corresponding interrupts and DMA function */
-        sdio_interrupt_enable(SDIO_INT_CCRCERR | SDIO_INT_DTTMOUT | SDIO_INT_RXORE | SDIO_INT_DTEND | SDIO_INT_STBITE);
+        sdio_interrupt_enable(SDIO_INT_DTCRCERR | SDIO_INT_DTTMOUT | SDIO_INT_RXORE | SDIO_INT_DTEND | SDIO_INT_STBITE);
         sdio_dma_enable();
         dma_receive_config(preadbuffer, blocksize);
         uint32_t start = millis();
@@ -716,14 +716,11 @@ sd_error_enum sd_multiblocks_read(uint32_t *preadbuffer, uint64_t readaddr, uint
                 if (callback)
                 {
                     // Note: GD32F4 DMA counts down from 0xFFFF when DMA flow control mode is "peripheral"
-                    uint32_t complete = (0xFFFF - DMA_CHCNT(DMA1, DMA_CH3) * 4);
+                    uint32_t complete = ((0xFFFF - DMA_CHCNT(DMA1, DMA_CH3)) * 4);
                     if (complete <= blocksize)
                     {
                         callback(complete);
                     }
-                    // \todo Figure out why the SDIO interrupt isn't firing
-                    // Forcing interrupt processing because interrupt doesn't seem to fire
-                    // sd_interrupts_process();
                 }
             }
             while((0 == transend) && (SD_OK == transerror)) {
@@ -731,8 +728,7 @@ sd_error_enum sd_multiblocks_read(uint32_t *preadbuffer, uint64_t readaddr, uint
                 {
                     callback(totalnumber_bytes);
                 }
-                // \todo Figure out why the SDIO interrupt isn't firing
-                // Forcing interrupt processing because interrupt doesn't seem to fire
+                // \todo delete me
                 sd_interrupts_process();
             }
             if(SD_OK != transerror) {
@@ -903,8 +899,8 @@ sd_error_enum sd_block_write(uint32_t *pwritebuffer, uint64_t writeaddr, uint16_
         /* DMA mode */
         /* enable the SDIO corresponding interrupts and DMA */
         sdio_interrupt_enable(SDIO_INT_DTCRCERR | SDIO_INT_DTTMOUT | SDIO_INT_TXURE | SDIO_INT_DTEND | SDIO_INT_STBITE);
-        dma_transfer_config(pwritebuffer, blocksize);
         sdio_dma_enable();
+        dma_transfer_config(pwritebuffer, blocksize);
 
         uint32_t start = millis();
         while((RESET == dma_flag_get(DMA1, DMA_CH3, DMA_FLAG_FTF))) {
@@ -926,6 +922,8 @@ sd_error_enum sd_block_write(uint32_t *pwritebuffer, uint64_t writeaddr, uint16_
             {
                 callback(blocksize);
             }
+            // \todo delete me
+            sd_interrupts_process();
         }
 
         if(SD_OK != transerror) {
@@ -1151,8 +1149,7 @@ sd_error_enum sd_multiblocks_write(uint32_t *pwritebuffer, uint64_t writeaddr, u
                 {
                     callback(totalnumber_bytes);
                 }
-                // \todo Figure out why the SDIO interrupt isn't firing
-                // Forcing interrupt processing because interrupt doesn't seem to fire
+                // \todo delete me
                 sd_interrupts_process();
             }
             if(SD_OK != transerror) {