]> rtime.felk.cvut.cz Git - pes-rpp/rpp-test-sw.git/blobdiff - source/sci.c
Optimalization of print methods
[pes-rpp/rpp-test-sw.git] / source / sci.c
index ce3d08b4c450e67285e1559358c71defa807d49a..8cd0210ec791be73a18ff83df9de2b9be73d91fe 100644 (file)
@@ -114,7 +114,7 @@ void sciInit(void)
                     | (0);  /* Break detect */\r
 \r
     /** - inialise global transfer variables */\r
-    g_sciTransfer[0].mode   = 0 << 8;\r
+    g_sciTransfer[0].mode   = 1 << 8;\r
     g_sciTransfer[0].length = 0;\r
 \r
     /** - Finaly start SCI */\r
@@ -233,25 +233,6 @@ void sciSend(sciBASE_t *sci, uint32_t length, uint8_t *data)
     int index = sci == sciREG ? 0 : 1;\r
 \r
 /* USER CODE BEGIN (11) */\r
-    /* Using interrupt, does not work. Sometimes a character is lost */\r
-//    if ((g_sciTransfer[index].mode & SCI_TX_INT) != 0)\r
-//    {\r
-        /* start transmit by sending first byte */\r
-//     uint8_t byte = 0;\r
-//     if (xQueueReceiveFromISR(outBuffer.buf, (uint8_t *)&byte, NULL) == pdPASS) {\r
-//            sci->TD     = byte;\r
-//            sci->SETINT = SCI_TX_INT;\r
-//     }\r
-//    }\r
-//   else\r
-//    {\r
-        /* send the data *///\r
-//    while (length-- > 0)\r
-//        {\r
-//            while ((sci->FLR & SCI_TX_INT) == 0) { /* wait */ };\r
-//            sci->TD = *data++;\r
-//        }\r
-//    }\r
 /* USER CODE END */\r
 \r
     if ((g_sciTransfer[index].mode & SCI_TX_INT) != 0)\r
@@ -268,12 +249,10 @@ void sciSend(sciBASE_t *sci, uint32_t length, uint8_t *data)
     else\r
     {\r
         /* send the data */\r
-        while (xQueueIsQueueEmptyFromISR(outBuffer.buf) != pdTRUE)\r
+        while (length-- > 0)\r
         {\r
             while ((sci->FLR & SCI_TX_INT) == 0) { /* wait */ };\r
-            uint8_t byte;\r
-            xQueueReceiveFromISR(outBuffer.buf, (void *)&byte, NULL);\r
-            sci->TD = byte;\r
+            sci->TD = *data++;\r
         }\r
     }\r
 \r
@@ -363,7 +342,7 @@ void sciReceive(sciBASE_t *sci, uint32_t length, uint8_t *data)
 /* USER CODE BEGIN (16) */\r
     if (sci->SETINT & SCI_RX_INT)\r
     {\r
-        /* clear error flags */\r
+        /* We are in iterrupt mode, clear error flags */\r
         sci->FLR = SCI_FE_INT | SCI_OE_INT | SCI_PE_INT;\r
 \r
     }\r
@@ -377,25 +356,6 @@ void sciReceive(sciBASE_t *sci, uint32_t length, uint8_t *data)
     }\r
 /* USER CODE END */\r
 \r
-    if (sci->SETINT & SCI_RX_INT)\r
-    {\r
-        /* we are in interrupt mode */\r
-        int index = sci == sciREG ? 0 : 1;\r
-        \r
-        /* clear error flags */\r
-        sci->FLR = SCI_FE_INT | SCI_OE_INT | SCI_PE_INT;\r
-\r
-        g_sciTransfer[index].length = length;\r
-        g_sciTransfer[index].data   = data;\r
-    }\r
-    else\r
-    {   \r
-        while (length-- > 0)\r
-        {\r
-            while ((sci->FLR & SCI_RX_INT) == 0) { /* wait */ };\r
-            *data++ = sci->RD;\r
-        }\r
-    }\r
 /* USER CODE BEGIN (17) */\r
 /* USER CODE END */\r
 }\r
@@ -534,38 +494,23 @@ void sciHighLevelInterrupt(void)
 \r
     case 12:\r
         /* transmit */\r
-       /* using interrupt, does not work properly, sometimes a character is lost */\r
- /*    if (xQueueIsQueueEmptyFromISR(outBuffer.buf) == pdTRUE) {\r
-               sciREG->CLRINT = SCI_TX_INT;\r
-               sciNotification(sciREG, SCI_TX_INT);\r
-       }\r
-       else {\r
-               uint8_t byte = 0;\r
-               xQueueReceiveFromISR(outBuffer.buf, (uint8_t *)&byte, NULL);\r
-               while (sciIsTxReady(sciREG) == 0)\r
-                       ;\r
-                       sciREG->TD     = byte;\r
+       {\r
+                       uint8_t byte = 0;\r
+                       if (xQueueReceiveFromISR(outBuffer.buf, (uint8_t *)&byte, NULL) == errQUEUE_EMPTY) {\r
+                               sciREG->CLRINT = SCI_TX_INT;\r
+                               outBuffer.flags &= ~BUF_TRANSFER_IN_PROGRESS;\r
+                       }\r
+                       else {\r
+                               sciREG->TD     = byte;\r
+                       }\r
        }\r
- */\r
-        /* transmit */\r
-        if (--g_sciTransfer[0].length > 0)\r
-        {\r
-            sciREG->TD = *g_sciTransfer[0].data++;\r
-        }\r
-        else\r
-        {\r
-            sciREG->CLRINT = SCI_TX_INT;\r
-            sciNotification(sciREG, SCI_TX_INT);\r
-        }\r
-        break;\r
-\r
+       break;\r
      default:\r
         /* phantom interrupt, clear flags and return */\r
         sciREG->FLR = ~sciREG->SETINTLVL & 0x07000303;\r
         break;\r
     }\r
 /* USER CODE END */\r
-\r
 /* USER CODE BEGIN (27) */\r
 /* USER CODE END */\r
 }\r
@@ -578,6 +523,7 @@ void sciHighLevelInterrupt(void)
 void sciLowLevelInterrupt(void)\r
 {\r
     uint32_t vec = sciREG->INTVECT1;\r
+\r
 /* USER CODE BEGIN (28) */\r
 /* USER CODE END */\r
 \r