From 3a85962f94eccfa86a5db46899bddeaceb79fee6 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sun, 16 Aug 2009 10:57:47 +0000 Subject: [PATCH] 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. --- Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.c | 4 +++- Demos/Device/LowLevel/USBtoSerial/USBtoSerial.c | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.c b/Demos/Device/ClassDriver/USBtoSerial/USBtoSerial.c index 0c83cd8dde..8ef07f1c33 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 141a452763..d5e871c2dd 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. */