Fixing software serial stop bits. Was broken since timer frequency

calculation changes in c7de7d2ebc.
This commit is contained in:
Dominic Clifton 2014-04-07 18:12:42 +01:00
parent c2c1613dac
commit e2deeeebd3
2 changed files with 10 additions and 7 deletions

View File

@ -218,17 +218,20 @@ void processTxState(softSerial_t *softSerial)
softSerial->internalTxBuffer = (1 << (TX_TOTAL_BITS - 1)) | (byteToSend << 1);
softSerial->bitsLeftToTransmit = TX_TOTAL_BITS;
softSerial->isTransmittingData = true;
return;
}
if (softSerial->bitsLeftToTransmit) {
mask = softSerial->internalTxBuffer & 1;
softSerial->internalTxBuffer >>= 1;
setTxSignal(softSerial, mask);
if (--softSerial->bitsLeftToTransmit <= 0) {
softSerial->isTransmittingData = false;
softSerial->bitsLeftToTransmit--;
return;
}
softSerial->isTransmittingData = false;
}
enum {

View File

@ -24,7 +24,7 @@ typedef struct softSerial_s {
uint8_t rxEdge;
uint8_t isTransmittingData;
uint8_t bitsLeftToTransmit;
int8_t bitsLeftToTransmit;
uint16_t internalTxBuffer; // includes start and stop bits
uint16_t internalRxBuffer; // includes start and stop bits