Add even parity bit to the software USART framing in the AVRISP project's PDI programming code.

pull/1469/head
Dean Camera 15 years ago
parent 9c8ed168e5
commit 1e3513ed70

@ -39,6 +39,8 @@
* with the rest of the library errorcodes * with the rest of the library errorcodes
* - Make MIDI device demos also turn off the on board LEDs if MIDI Note On messages are sent with a velocity of zero, * - Make MIDI device demos also turn off the on board LEDs if MIDI Note On messages are sent with a velocity of zero,
* which some devices use instead of Note Off messages (thanks to Robin Green) * which some devices use instead of Note Off messages (thanks to Robin Green)
* - The CDC demos are now named "VirtualSerial" instead to indicate the demos' function rather than its implemented USB class,
* to reduce confusion and to be in line with the rest of the LUFA demos
* *
* <b>Fixed:</b> * <b>Fixed:</b>
* - Added missing CDC_Host_CreateBlockingStream() function code to the CDC Host Class driver * - Added missing CDC_Host_CreateBlockingStream() function code to the CDC Host Class driver
@ -56,7 +58,7 @@
* - Fixed TeensyHID bootloader not properly shutting down the USB interface to trigger a disconnection on the host before resetting * - Fixed TeensyHID bootloader not properly shutting down the USB interface to trigger a disconnection on the host before resetting
* - Fixed MassStorageHost Class driver demo not having USB_STREAM_TIMEOUT_MS compile time option set properly to prevent slow * - Fixed MassStorageHost Class driver demo not having USB_STREAM_TIMEOUT_MS compile time option set properly to prevent slow
* devices from timing out the data pipes * devices from timing out the data pipes
* - Fixed the definition of the Endpoint_BytesInEndpoint() macro for the U4 parts * - Fixed the definition of the Endpoint_BytesInEndpoint() macro for the U4 series AVR parts
* *
* \section Sec_ChangeLog091122 Version 091122 * \section Sec_ChangeLog091122 Version 091122
* *

@ -45,22 +45,40 @@
*/ */
void PDITarget_SendByte(uint8_t Byte) void PDITarget_SendByte(uint8_t Byte)
{ {
uint8_t LogicOneBits = 0;
// One Start Bit
PDIDATA_LINE_PORT &= ~PDIDATA_LINE_MASK; PDIDATA_LINE_PORT &= ~PDIDATA_LINE_MASK;
TOGGLE_PDI_CLOCK; TOGGLE_PDI_CLOCK;
// Eight Data Bits
for (uint8_t i = 0; i < 8; i++) for (uint8_t i = 0; i < 8; i++)
{ {
if (Byte & 0x01) if (Byte & 0x01)
PDIDATA_LINE_PORT &= ~PDIDATA_LINE_MASK; {
PDIDATA_LINE_PORT &= ~PDIDATA_LINE_MASK;
LogicOneBits++;
}
else else
PDIDATA_LINE_PORT |= PDIDATA_LINE_MASK; {
PDIDATA_LINE_PORT |= PDIDATA_LINE_MASK;
}
Byte >>= 1; Byte >>= 1;
TOGGLE_PDI_CLOCK; TOGGLE_PDI_CLOCK;
} }
// Even Parity Bit
if (LogicOneBits & 0x01)
PDIDATA_LINE_PORT &= ~PDIDATA_LINE_MASK;
else
PDIDATA_LINE_PORT |= PDIDATA_LINE_MASK;
TOGGLE_PDI_CLOCK;
// Two Stop Bits
PDIDATA_LINE_PORT |= PDIDATA_LINE_MASK; PDIDATA_LINE_PORT |= PDIDATA_LINE_MASK;
TOGGLE_PDI_CLOCK; TOGGLE_PDI_CLOCK;
@ -77,9 +95,11 @@ uint8_t PDITarget_ReceiveByte(void)
PDIDATA_LINE_DDR &= ~PDIDATA_LINE_MASK; PDIDATA_LINE_DDR &= ~PDIDATA_LINE_MASK;
// One Start Bit
while (PDIDATA_LINE_PIN & PDIDATA_LINE_MASK); while (PDIDATA_LINE_PIN & PDIDATA_LINE_MASK);
TOGGLE_PDI_CLOCK; TOGGLE_PDI_CLOCK;
// Eight Data Bits
for (uint8_t i = 0; i < 8; i++) for (uint8_t i = 0; i < 8; i++)
{ {
if (PDIDATA_LINE_PIN & PDIDATA_LINE_MASK) if (PDIDATA_LINE_PIN & PDIDATA_LINE_MASK)
@ -90,6 +110,10 @@ uint8_t PDITarget_ReceiveByte(void)
TOGGLE_PDI_CLOCK; TOGGLE_PDI_CLOCK;
} }
// Even Parity Bit (discarded)
TOGGLE_PDI_CLOCK;
// Two Stop Bits
TOGGLE_PDI_CLOCK; TOGGLE_PDI_CLOCK;
TOGGLE_PDI_CLOCK; TOGGLE_PDI_CLOCK;

Loading…
Cancel
Save