Timer fixes
authorMichael McMaster <michael@codesrc.com>
Tue, 16 Feb 2021 13:26:27 +0000 (23:26 +1000)
committerMichael McMaster <michael@codesrc.com>
Tue, 16 Feb 2021 13:26:27 +0000 (23:26 +1000)
src/firmware/main.c
src/firmware/time.h
src/firmware/usb_device/usbd_msc_scsi.c

index e42bb18383c33d0982cbb4629f1254a1398ecbef..087e95312fcafa454c8ebc746cf73a3fdb1b6984 100755 (executable)
@@ -114,6 +114,7 @@ void mainLoop()
        sdPoll();\r
 #endif\r
 \r
+    // TODO test if USB transfer is in progress\r
        if (unlikely(scsiDev.phase == BUS_FREE))\r
        {\r
                if (unlikely(s2s_elapsedTime_ms(lastSDPoll) > 200))\r
index 1926b2eee469ba2a36d4d9b35266fdb0f7873762..9a7dccdea0969b681cd34cedce24933f5a3bddaa 100755 (executable)
@@ -24,7 +24,13 @@ uint32_t s2s_getTime_ms(void); // Returns milliseconds since init
 uint32_t s2s_diffTime_ms(uint32_t start, uint32_t end);
 uint32_t s2s_elapsedTime_ms(uint32_t since);
 
+#ifdef STM32F2xx
 #define s2s_cpu_freq 108000000LL
+#endif
+#ifdef STM32F4xx
+#define s2s_cpu_freq 180000000LL
+#endif
+
 #define s2s_delay_ms(delay) s2s_delay_clocks((delay) * (s2s_cpu_freq / 1000))
 #define s2s_delay_us(delay) s2s_delay_clocks((delay) * (s2s_cpu_freq / 1000000))
 void s2s_delay_clocks(uint32_t delay);
index 16ed835260ebe044439f6b5b4cd7be6fbf0b6ad8..63ddca6dd35d86a89850e6d4e01be06b4bb57b1e 100755 (executable)
@@ -491,13 +491,13 @@ static int8_t SCSI_Read10(USBD_HandleTypeDef  *pdev, uint8_t lun , uint8_t *para
       return -1;
     } 
     
-    hmsc->scsi_blk_addr = (params[2] << 24) | \
-      (params[3] << 16) | \
-        (params[4] <<  8) | \
-          params[5];
+    hmsc->scsi_blk_addr = ((uint32_t)params[2] << 24) | \
+      ((uint32_t)params[3] << 16) | \
+        ((uint32_t)params[4] <<  8) | \
+          (uint32_t)params[5];
     
-    hmsc->scsi_blk_len =  (params[7] <<  8) | \
-      params[8];  
+    hmsc->scsi_blk_len =  ((uint32_t)params[7] <<  8) | \
+      (uint32_t)params[8];  
     
     
     
@@ -573,12 +573,12 @@ static int8_t SCSI_Write10 (USBD_HandleTypeDef  *pdev, uint8_t lun , uint8_t *pa
     } 
     
     
-    hmsc->scsi_blk_addr = (params[2] << 24) | \
-      (params[3] << 16) | \
-        (params[4] <<  8) | \
-          params[5];
-    hmsc->scsi_blk_len = (params[7] <<  8) | \
-      params[8];  
+    hmsc->scsi_blk_addr = ((uint32_t)params[2] << 24) | \
+      ((uint32_t)params[3] << 16) | \
+        ((uint32_t)params[4] <<  8) | \
+          (uint32_t)params[5];
+    hmsc->scsi_blk_len = ((uint32_t)params[7] <<  8) | \
+      (uint32_t)params[8];  
     
     /* check if LBA address is in the right range */
     if(SCSI_CheckAddressRange(pdev,