aboutsummaryrefslogtreecommitdiff
path: root/libraries
diff options
context:
space:
mode:
Diffstat (limited to 'libraries')
-rw-r--r--libraries/SoftwareSerial/SoftwareSerial.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/libraries/SoftwareSerial/SoftwareSerial.cpp b/libraries/SoftwareSerial/SoftwareSerial.cpp
index d1f6c92..8476deb 100644
--- a/libraries/SoftwareSerial/SoftwareSerial.cpp
+++ b/libraries/SoftwareSerial/SoftwareSerial.cpp
@@ -385,9 +385,13 @@ void SoftwareSerial::begin(long speed)
long baud = pgm_read_dword(&table[i].baud);
if (baud == speed)
{
- _rx_delay_centering = pgm_read_word(&table[i].rx_delay_centering);
- _rx_delay_intrabit = pgm_read_word(&table[i].rx_delay_intrabit);
- _rx_delay_stopbit = pgm_read_word(&table[i].rx_delay_stopbit);
+ if (digitalPinToPCICR(_receivePin))
+ {
+ // Only setup rx when we have a valid PCINT for this pin
+ _rx_delay_centering = pgm_read_word(&table[i].rx_delay_centering);
+ _rx_delay_intrabit = pgm_read_word(&table[i].rx_delay_intrabit);
+ _rx_delay_stopbit = pgm_read_word(&table[i].rx_delay_stopbit);
+ }
_tx_delay = pgm_read_word(&table[i].tx_delay);
break;
}
@@ -396,11 +400,8 @@ void SoftwareSerial::begin(long speed)
// Set up RX interrupts, but only if we have a valid RX baud rate
if (_rx_delay_stopbit)
{
- if (digitalPinToPCICR(_receivePin))
- {
- *digitalPinToPCICR(_receivePin) |= _BV(digitalPinToPCICRbit(_receivePin));
- *digitalPinToPCMSK(_receivePin) |= _BV(digitalPinToPCMSKbit(_receivePin));
- }
+ *digitalPinToPCICR(_receivePin) |= _BV(digitalPinToPCICRbit(_receivePin));
+ *digitalPinToPCMSK(_receivePin) |= _BV(digitalPinToPCMSKbit(_receivePin));
tunedDelay(_tx_delay); // if we were low this establishes the end
}