1. Если UTXISEL <1:0> = 00, то флаг UxTXIF устанавливается, когда символ передан из буфера передатчика в передающий сдвиговый регистр (UxTSR). Это подразумевает не менее одного свободного уровня в буфере передатчика.
2. Если UTXISEL <1:0> = 01, то флаг UxTXIF устанавливается, когда перемещён последний символ из регистра UxTSR. Это подразумевает, что весь передают операции, закончены.
3. Если UTXISEL <1:0> = 10, то флаг UxTXIF устанавливается, когда символ передан из регистра UxTSR и передающий буфер пуст.
Бит UxTXIF будет установлен когда модуль впервые включается. Пользовательское приложение должно очистить бит UxTXIF в ISR.
Допускается переключение между двумя режимами Interrupt в течение операции.
Обратите внимание:Когда бит UTXEN установлен, флаг UxTXIF будет также установлен если
UTXISEL <1:0> =00, так как переданный буфер еще не полон (можно перемещать данные для передачи в регистр UxTXREG).
В то время как флаг UxTXIF, указывает состояние UxTXREG регистра, бит TRMT (UxSTA <8>) показывает состояние UxTSR. Бит состояния TRMT - бит только для чтения, который установлен когда UxTSR пуст. Никакая логика прерывания не привязана к этому биту, так что пользовательское приложение должно опросить этот бит чтобы определить пуст ли UxTSR.
5.3 Настройки для передатчика UART
Используйте следующие шаги при установке передачи:
1. Инициализировать регистр UxBRG для соответствующего baud rate (см.раздел 3 ГЕНЕРАТОР baud rate модуля UART ”).
2. Установить количество информационных разрядов, количество Стоповых битов, и выбор четности, заполняя биты PDSEL <1:0> (UxMODE <2:1>) и STSEL (UxMODE <0>).
3. Если нужно получать прерывания от передатчика, то установить служебный бит UxTXIE в соответствующем регистре управления разрешением прерывания (IEC).
Определите приоритет прерывания для прерывания передатчика, используя служебные биты UxTXIP <2:0> в соответствующем регистре управления приоритетами прерывания (IPC). Также, выберите режим прерывания передатчика записывая биты UTXISEL <1:0> (UxSTA <15,13>).
4. Включить модуль UART, установив бит UARTEN (UxMODE <15>).
5. Разрешить передачу, установив бит UTXEN (UxSTA <10>), который также установит флаг UxTXIF.
Необходимо сбросить флаг UxTXIF в программе. Флаг UxTXIF будет устанавливаться при условиях, которые описываются битами UTXISEL <1:0>.
6. Загрузить данные в регистр UxTXREG (начинается передача).
Если осуществляется 9-ти битная передача, то загрузите слово. Если используется передача 8-ми битная, загрузите байт. Данные могут быть загружены в буфер, пока бит состояния UTXBF (UxSTA <9>) не установлен (свидетельствует о том, что буфер полный.
Обратите внимание: бит UTXEN не должен быть установлен, пока бит UARTEN не был установлен; иначе передачи UARTа не будут осуществляться
В примере 2 представлен типовой код, который настраивает UART для передачи.
Рисунок 5. Передача 8-ми или 9-ти битных данных
Рисунок 6. Противовключённая передача (Back-to-Back)
Обратите внимание: Эта временная диаграмма показывает две последовательных передачи.
Пример 2: UART Передача с Прерываниями
#defineFCY 40000000
#define BAUDRATE 9600
#define BRGVAL ((FCY/BAUDRATE)/16)-1
unsigned int i;
int main(void)
{
// Конфигурируем генератор микроконтроллера для работы на частоте 40Mhz
// Fosc= Fin*M/(N1*N2), Fcy=Fosc/2
// Fosc= 8M*40(2*2)=80Mhz для 8M входных тактов
PLLFBD=38; // M=40
CLKDIVbits.PLLPOST=0; // N1=2
CLKDIVbits.PLLPRE=0; // N2=2
OSCTUN=0; // Настраиваем FRC генератор, если используется FRC
RCONbits.SWDTEN=0; // Отключаем сторожевой таймер
while(OSCCONbits.LOCK!=1) {}; // Wait for PLL to lock
U1MODEbits.STSEL = 0; // 1-стоп бит
U1MODEbits.PDSEL = 0; // без чётности, 8-информационных бит
U1MODEbits.ABAUD = 0; // Auto-Baud отключаем
U1MODEbits.BRGH = 0; // Низкоскоростной режим
U1BRG = BRGVAL; // BAUD Rate настраиваем для 9600
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.