aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2009-08-16 10:57:47 +0000
committerDean Camera <dean@fourwalledcubicle.com>2009-08-16 10:57:47 +0000
commit3a85962f94eccfa86a5db46899bddeaceb79fee6 (patch)
tree6253b7b5dde08040af73f3d2371e5b0c3ddd57fb
parentb71ff7c8cd68209a74c8690f4d190cc634ef8fb3 (diff)
downloadlufa-3a85962f94eccfa86a5db46899bddeaceb79fee6.tar.gz
lufa-3a85962f94eccfa86a5db46899bddeaceb79fee6.tar.bz2
lufa-3a85962f94eccfa86a5db46899bddeaceb79fee6.zip
Fix USBtoSerial device demos -- ensure the UDR1 register contents is read in under all circumstances which fire the ISR, so that the receive complete interrupt is cleared correctly to prevent freezes.
-rw-r--r--Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.c4
-rw-r--r--Demos/Device/LowLevel/USBtoSerial/USBtoSerial.c4
2 files changed, 6 insertions, 2 deletions
diff --git a/Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.c b/Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.c
index 0c83cd8dd..8ef07f1c3 100644
--- a/Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.c
+++ b/Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.c
@@ -147,8 +147,10 @@ void EVENT_USB_Device_UnhandledControlPacket(void)
*/
ISR(USART1_RX_vect, ISR_BLOCK)
{
+ uint8_t ReceivedByte = UDR1;
+
if (USB_DeviceState == DEVICE_STATE_Configured)
- Buffer_StoreElement(&Tx_Buffer, UDR1);
+ Buffer_StoreElement(&Tx_Buffer, ReceivedByte);
}
/** Event handler for the CDC Class driver Line Encoding Changed event.
diff --git a/Demos/Device/LowLevel/USBtoSerial/USBtoSerial.c b/Demos/Device/LowLevel/USBtoSerial/USBtoSerial.c
index 141a45276..d5e871c2d 100644
--- a/Demos/Device/LowLevel/USBtoSerial/USBtoSerial.c
+++ b/Demos/Device/LowLevel/USBtoSerial/USBtoSerial.c
@@ -296,9 +296,11 @@ void CDC_Task(void)
*/
ISR(USART1_RX_vect, ISR_BLOCK)
{
+ uint8_t ReceivedByte = UDR1;
+
/* Only store received characters if the USB interface is connected */
if ((USB_DeviceState != DEVICE_STATE_Configured) && LineEncoding.BaudRateBPS)
- Buffer_StoreElement(&Tx_Buffer, UDR1);
+ Buffer_StoreElement(&Tx_Buffer, ReceivedByte);
}
/** Reconfigures the USART to match the current serial port settings issued by the host as closely as possible. */