34.16 UART Baud Rate Generator

The Baud Rate Generator (BRG) is a 16-bit timer that is dedicated to the support of the UART operation. The UxBRG register pair determines the period of the free-running baud rate timer. The multiplier of the baud rate period is determined by the BRGS bit.

The high baud rate range (BRGS = 1) is intended to extend the baud rate range up to a faster rate when the desired baud rate is not otherwise possible and to improve the baud rate resolution at high baud rates. Using the normal baud rate range (BRGS = 0) is recommended when the desired baud rate is achievable with either range.

Important: BRGS = 1 is not supported in the DALI mode.

Writing a new value to UxBRG causes the BRG timer to be reset (or cleared). This ensures that the BRG does not wait for a timer overflow before outputting the new baud rate.

If the system clock is changed during an active receive operation, a receive error or data loss may result. To avoid this problem, check the status of the RXIDL bit to make sure that the receive operation is Idle before changing the system clock. The following table contains formulas for determining the baud rate.
Table 34-2. Baud Rate Formulas
BRGSBRG/UART ModeBaud Rate Formula
1High RateFosc/[4(UxBRG+1)]
0Normal RateFosc/[16(UxBRG+1)]
The following example provides a sample calculation for determining the baud rate and baud rate error.

Baud Rate Error Calculation

For a device with Fosc of 16 MHz, desired baud rate of 9600, Asynchronous mode, and BRGS = 0.

DesiredBaudrate=FOSC16×(UxBRG+1)

Solving for UxBRG:

UxBRG=FOSC16×DesiredBaudrate1
UxBRG=1600000016×96001
UxBRG=103.17103
CalculatedBaudrate=1600000016×(103+1)
CalculatedBaudrate=9615
Error=CalculatedBaudrateDesiredBaudrateDesiredBaudrate
Error=961596009600
Error0.16%