- /* Set DATA and CLOCK lines to outputs */\r
- BITBANG_PDIDATA_DDR |= BITBANG_PDIDATA_MASK;\r
- BITBANG_PDICLOCK_DDR |= BITBANG_PDICLOCK_MASK;\r
- \r
- /* Set DATA line high for 90ns to disable /RESET functionality */\r
- BITBANG_PDIDATA_PORT |= BITBANG_PDIDATA_MASK;\r
- asm volatile ("NOP"::);\r
- asm volatile ("NOP"::);\r
-\r
- /* Fire timer compare ISR every 160 cycles */\r
- OCR0A = 20;\r
- TCCR0A = (1 << WGM01);\r
- TCCR0B = (1 << CS01);\r
- TIMSK0 = (1 << OCIE0A);\r
-}\r
-\r
-void PDITarget_DisableTargetPDI(void)\r
-{\r
- /* Set DATA and CLOCK lines to inputs */\r
- BITBANG_PDIDATA_DDR &= ~BITBANG_PDIDATA_MASK;\r
- BITBANG_PDICLOCK_DDR &= ~BITBANG_PDICLOCK_MASK;\r
- \r
- /* Tristate DATA and CLOCK lines */\r
- BITBANG_PDIDATA_PORT &= ~BITBANG_PDIDATA_MASK;\r
- BITBANG_PDICLOCK_PORT &= ~BITBANG_PDICLOCK_MASK;\r
-\r
- TCCR0B = 0;\r
-}\r
-\r
-void PDITarget_SendByte(uint8_t Byte)\r
-{\r
- bool IsOddBitsSet = false;\r
- \r
- /* Compute Even parity bit */\r
- for (uint8_t i = 0; i < 8; i++)\r
- {\r
- if (Byte & (1 << i))\r
- IsOddBitsSet = !(IsOddBitsSet);\r
- }\r
-\r
- /* Data shifted out LSB first, START DATA PARITY STOP STOP */\r
- DataBits = ((uint16_t)IsOddBitsSet << 10) | ((uint16_t)Byte << 1) | (1 << 0);\r
-\r
- BITBANG_PDIDATA_PORT |= BITBANG_PDIDATA_MASK;\r
- BITBANG_PDIDATA_DDR |= BITBANG_PDIDATA_MASK;\r
-\r
- IsSending = true;\r
- BitCount = BITS_IN_FRAME;\r
- while (BitCount);\r
-\r
- BITBANG_PDIDATA_PORT &= ~BITBANG_PDIDATA_MASK;\r
- BITBANG_PDIDATA_DDR &= ~BITBANG_PDIDATA_MASK;\r
-}\r
-\r
-uint8_t PDITarget_ReceiveByte(void)\r
-{\r
- IsSending = false;\r
- BitCount = BITS_IN_FRAME;\r
- while (BitCount);\r
-\r
- return (DataBits >> 1);\r
-}\r
-\r
-void PDITarget_SendBreak(void)\r
-{\r
- DataBits = 0;\r
-\r
- BITBANG_PDIDATA_PORT |= BITBANG_PDIDATA_MASK;\r
- BITBANG_PDIDATA_DDR |= BITBANG_PDIDATA_MASK;\r
-\r
- IsSending = true;\r
- BitCount = BITS_IN_FRAME;\r
- while (BitCount);\r
-\r
- BITBANG_PDIDATA_PORT &= ~BITBANG_PDIDATA_MASK;\r
- BITBANG_PDIDATA_DDR &= ~BITBANG_PDIDATA_MASK;\r
-}\r
-#else\r
-void PDITarget_EnableTargetPDI(void)\r
-{\r