Add even parity bit to the software USART framing in the AVRISP project's PDI program...
[pub/USBasp.git] / Projects / AVRISP / Lib / PDITarget.c
index 03dd779..7b35a33 100644 (file)
  */\r
 void PDITarget_SendByte(uint8_t Byte)\r
 {\r
+       uint8_t LogicOneBits = 0;\r
+\r
+       // One Start Bit\r
        PDIDATA_LINE_PORT &= ~PDIDATA_LINE_MASK;\r
 \r
        TOGGLE_PDI_CLOCK;\r
-\r
+       \r
+       // Eight Data Bits\r
        for (uint8_t i = 0; i < 8; i++)\r
        {\r
                if (Byte & 0x01)\r
-                 PDIDATA_LINE_PORT &= ~PDIDATA_LINE_MASK;\r
+               {\r
+                       PDIDATA_LINE_PORT &= ~PDIDATA_LINE_MASK;\r
+                       LogicOneBits++;\r
+               }\r
                else\r
-                 PDIDATA_LINE_PORT |=  PDIDATA_LINE_MASK;\r
-                 \r
+               {\r
+                       PDIDATA_LINE_PORT |=  PDIDATA_LINE_MASK;\r
+               }\r
+               \r
                Byte >>= 1;\r
 \r
                TOGGLE_PDI_CLOCK;\r
        }\r
 \r
-       PDIDATA_LINE_PORT |= PDIDATA_LINE_MASK;\r
+       // Even Parity Bit\r
+       if (LogicOneBits & 0x01)\r
+         PDIDATA_LINE_PORT &= ~PDIDATA_LINE_MASK;\r
+       else\r
+         PDIDATA_LINE_PORT |=  PDIDATA_LINE_MASK;\r
+\r
+       TOGGLE_PDI_CLOCK;\r
 \r
+       // Two Stop Bits\r
+       PDIDATA_LINE_PORT |= PDIDATA_LINE_MASK;\r
+       \r
        TOGGLE_PDI_CLOCK;\r
        TOGGLE_PDI_CLOCK;\r
 }\r
@@ -77,9 +95,11 @@ uint8_t PDITarget_ReceiveByte(void)
 \r
        PDIDATA_LINE_DDR &= ~PDIDATA_LINE_MASK;\r
 \r
+       // One Start Bit\r
        while (PDIDATA_LINE_PIN & PDIDATA_LINE_MASK);\r
          TOGGLE_PDI_CLOCK;\r
-         \r
+               \r
+       // Eight Data Bits\r
        for (uint8_t i = 0; i < 8; i++)\r
        {\r
                if (PDIDATA_LINE_PIN & PDIDATA_LINE_MASK)\r
@@ -90,6 +110,10 @@ uint8_t PDITarget_ReceiveByte(void)
                TOGGLE_PDI_CLOCK;       \r
        }\r
 \r
+       // Even Parity Bit (discarded)\r
+       TOGGLE_PDI_CLOCK;\r
+\r
+       // Two Stop Bits\r
        TOGGLE_PDI_CLOCK;\r
        TOGGLE_PDI_CLOCK;\r
        \r