Fixed Serial peripheral driver not turning off the USART before reconfiguring it, which would cause incorrect operation to occur (thanks to Bob Paddock).

Dean Camera 15 years ago
parent 612df774d9
commit 9597b33c33

@ -53,13 +53,13 @@ TMC_Capabilities_t Capabilities =
};
/** Current TMC control request that is being processed */
uint8_t RequestInProgress = 0;
uint8_t RequestInProgress = 0;
/** Stream callback abort flag for bulk IN data */
bool IsTMCBulkINReset = false;
bool IsTMCBulkINReset = false;
/** Stream callback abort flag for bulk OUT data */
bool IsTMCBulkOUTReset = false;
bool IsTMCBulkOUTReset = false;
/** Last used tag value for data transfers */
uint8_t CurrentTransferTag = 0;

@ -99,27 +99,27 @@
static inline void Serial_Init(const uint32_t BaudRate,
const bool DoubleSpeed)
{
UBRR1 = (DoubleSpeed ? SERIAL_2X_UBBRVAL(BaudRate) : SERIAL_UBBRVAL(BaudRate));
UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));
UCSR1A = (DoubleSpeed ? (1 << U2X1) : 0);
UCSR1B = ((1 << TXEN1) | (1 << RXEN1));
UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));
DDRD |= (1 << 3);
DDRD |= (1 << 3);
PORTD |= (1 << 2);
UBRR1 = (DoubleSpeed ? SERIAL_2X_UBBRVAL(BaudRate) : SERIAL_UBBRVAL(BaudRate));
}
/** Turns off the USART driver, disabling and returning used hardware to their default configuration. */
static inline void Serial_ShutDown(void)
{
UCSR1A = 0;
UCSR1B = 0;
UCSR1A = 0;
UCSR1C = 0;
UBRR1 = 0;
DDRD &= ~(1 << 3);
DDRD &= ~(1 << 3);
PORTD &= ~(1 << 2);
UBRR1 = 0;
}
/** Indicates whether a character has been received through the USART.
@ -143,7 +143,9 @@
UDR1 = DataByte;
}
/** Receives a byte from the USART.
/** Receives a byte from the USART. This function blocks until a byte has been
* received; if non-blocking behaviour is required, test for a received character
* beforehand with \ref Serial_IsCharReceived().
*
* \return Byte received from the USART.
*/

@ -65,6 +65,8 @@
* - Fixed MIDI_Device_SendEventPacket() not correctly waiting for the endpoint to become ready (thanks to Robin Green)
* - Fixed Benito and USBtoSerial projects not turning off the USART before reconfiguring it, which could cause incorrect
* operation to occur (thanks to Bob Paddock)
* - Fixed Serial peripheral driver not turning off the USART before reconfiguring it, which would cause incorrect operation
* to occur (thanks to Bob Paddock)
*
* \section Sec_ChangeLog100513 Version 100513
* <b>New:</b>

@ -86,7 +86,7 @@ int main(void)
if (!(ReceivedByte < 0) && !(RingBuffer_IsFull(&USBtoUSART_Buffer)))
RingBuffer_AtomicInsert(&USBtoUSART_Buffer, (uint8_t)ReceivedByte);
/* Check if the software USART flush timer has expired */
/* Check if the UART receive buffer flush timer has expired */
if (TIFR0 & (1 << TOV0))
{
TIFR0 |= (1 << TOV0);

@ -124,7 +124,7 @@ void UARTBridge_Task(void)
if (!(ReceivedByte < 0) && !(RingBuffer_IsFull(&USBtoUART_Buffer)))
RingBuffer_AtomicInsert(&USBtoUART_Buffer, CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface));
/* Check if the software UART flush timer has expired */
/* Check if the UART receive buffer flush timer has expired */
if (TIFR0 & (1 << TOV0))
{
TIFR0 |= (1 << TOV0);

Loading…
Cancel
Save