forked from mfulz_github/qmk_firmware
Fixed Serial peripheral driver not turning off the USART before reconfiguring it, which would cause incorrect operation to occur (thanks to Bob Paddock).
This commit is contained in:
parent
612df774d9
commit
9597b33c33
|
@ -53,13 +53,13 @@ TMC_Capabilities_t Capabilities =
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Current TMC control request that is being processed */
|
/** Current TMC control request that is being processed */
|
||||||
uint8_t RequestInProgress = 0;
|
uint8_t RequestInProgress = 0;
|
||||||
|
|
||||||
/** Stream callback abort flag for bulk IN data */
|
/** Stream callback abort flag for bulk IN data */
|
||||||
bool IsTMCBulkINReset = false;
|
bool IsTMCBulkINReset = false;
|
||||||
|
|
||||||
/** Stream callback abort flag for bulk OUT data */
|
/** Stream callback abort flag for bulk OUT data */
|
||||||
bool IsTMCBulkOUTReset = false;
|
bool IsTMCBulkOUTReset = false;
|
||||||
|
|
||||||
/** Last used tag value for data transfers */
|
/** Last used tag value for data transfers */
|
||||||
uint8_t CurrentTransferTag = 0;
|
uint8_t CurrentTransferTag = 0;
|
||||||
|
|
|
@ -99,27 +99,27 @@
|
||||||
static inline void Serial_Init(const uint32_t BaudRate,
|
static inline void Serial_Init(const uint32_t BaudRate,
|
||||||
const bool DoubleSpeed)
|
const bool DoubleSpeed)
|
||||||
{
|
{
|
||||||
|
UBRR1 = (DoubleSpeed ? SERIAL_2X_UBBRVAL(BaudRate) : SERIAL_UBBRVAL(BaudRate));
|
||||||
|
|
||||||
|
UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));
|
||||||
UCSR1A = (DoubleSpeed ? (1 << U2X1) : 0);
|
UCSR1A = (DoubleSpeed ? (1 << U2X1) : 0);
|
||||||
UCSR1B = ((1 << TXEN1) | (1 << RXEN1));
|
UCSR1B = ((1 << TXEN1) | (1 << RXEN1));
|
||||||
UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));
|
|
||||||
|
|
||||||
DDRD |= (1 << 3);
|
DDRD |= (1 << 3);
|
||||||
PORTD |= (1 << 2);
|
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. */
|
/** Turns off the USART driver, disabling and returning used hardware to their default configuration. */
|
||||||
static inline void Serial_ShutDown(void)
|
static inline void Serial_ShutDown(void)
|
||||||
{
|
{
|
||||||
UCSR1A = 0;
|
|
||||||
UCSR1B = 0;
|
UCSR1B = 0;
|
||||||
|
UCSR1A = 0;
|
||||||
UCSR1C = 0;
|
UCSR1C = 0;
|
||||||
|
|
||||||
DDRD &= ~(1 << 3);
|
|
||||||
PORTD &= ~(1 << 2);
|
|
||||||
|
|
||||||
UBRR1 = 0;
|
UBRR1 = 0;
|
||||||
|
|
||||||
|
DDRD &= ~(1 << 3);
|
||||||
|
PORTD &= ~(1 << 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Indicates whether a character has been received through the USART.
|
/** Indicates whether a character has been received through the USART.
|
||||||
|
@ -143,7 +143,9 @@
|
||||||
UDR1 = DataByte;
|
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.
|
* \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 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
|
* - Fixed Benito and USBtoSerial projects not turning off the USART before reconfiguring it, which could cause incorrect
|
||||||
* operation to occur (thanks to Bob Paddock)
|
* 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
|
* \section Sec_ChangeLog100513 Version 100513
|
||||||
* <b>New:</b>
|
* <b>New:</b>
|
||||||
|
|
|
@ -86,7 +86,7 @@ int main(void)
|
||||||
if (!(ReceivedByte < 0) && !(RingBuffer_IsFull(&USBtoUSART_Buffer)))
|
if (!(ReceivedByte < 0) && !(RingBuffer_IsFull(&USBtoUSART_Buffer)))
|
||||||
RingBuffer_AtomicInsert(&USBtoUSART_Buffer, (uint8_t)ReceivedByte);
|
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))
|
if (TIFR0 & (1 << TOV0))
|
||||||
{
|
{
|
||||||
TIFR0 |= (1 << TOV0);
|
TIFR0 |= (1 << TOV0);
|
||||||
|
|
|
@ -124,7 +124,7 @@ void UARTBridge_Task(void)
|
||||||
if (!(ReceivedByte < 0) && !(RingBuffer_IsFull(&USBtoUART_Buffer)))
|
if (!(ReceivedByte < 0) && !(RingBuffer_IsFull(&USBtoUART_Buffer)))
|
||||||
RingBuffer_AtomicInsert(&USBtoUART_Buffer, CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface));
|
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))
|
if (TIFR0 & (1 << TOV0))
|
||||||
{
|
{
|
||||||
TIFR0 |= (1 << TOV0);
|
TIFR0 |= (1 << TOV0);
|
||||||
|
|
Loading…
Reference in New Issue