/* Set up the synchronous USART for XMEGA communications - \r
8 data bits, even parity, 2 stop bits */\r
UBRR1 = 10;\r
- UCSR1B = (1 << TXEN1);\r
UCSR1C = (1 << UMSEL10) | (1 << UPM11) | (1 << USBS1) | (1 << UCSZ11) | (1 << UCSZ10) | (1 << UCPOL1);\r
\r
+ /* Send two BREAKs of 12 bits each to enable PDI interface (need at least 16 idle bits) */\r
PDITarget_SendBreak();\r
PDITarget_SendBreak();\r
}\r
UCSR1C = 0;\r
\r
/* Set all USART lines as input, tristate */\r
- DDRD &= ~(1 << 5) | (1 << 3);\r
+ DDRD &= ~((1 << 5) | (1 << 3));\r
PORTD &= ~((1 << 5) | (1 << 3) | (1 << 2));\r
}\r
\r
void PDITarget_SendBreak(void)\r
{\r
UCSR1B &= ~(1 << RXEN1);\r
- UCSR1B |= (1 << TXEN1);\r
+ UCSR1B |= (1 << TXEN1);\r
\r
- for (uint8_t i = 0; i < BITS_IN_FRAME; i++)\r
+ for (uint8_t i = 0; i <= BITS_IN_FRAME; i++)\r
{\r
+ /* Wait for rising edge of clock */\r
while (PIND & (1 << 5));\r
+ \r
+ /* Wait for falling edge of clock */\r
while (!(PIND & (1 << 5)));\r
}\r
}\r