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

This commit is contained in:
Dean Camera 2009-12-09 12:31:55 +00:00
parent 9c8ed168e5
commit 1e3513ed70
2 changed files with 33 additions and 7 deletions

View file

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