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.

pull/1469/head
Dean Camera 15 years ago
parent b71ff7c8cd
commit 3a85962f94

@ -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.

@ -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. */

Loading…
Cancel
Save