(UxSTA <4>) показывает состояние регистра UxRSR. Бит состояния RIDLE - это бит только для чтения, который устанавливается, когда приёмник простаивает (то есть, регистр UxRSR пуст). Никакая логика прерывания не привязана к этому биту, так пользовательское приложение должно опросить этот бит, чтобы определить, простаивает ли UxRSR.
Бит URXDA (UxSTA <0>) указывает, имеет ли получающийся буфер данные или пуст. Этот бит установлен пока есть не менее одного символа, который читается из буфера получателя. URXDA – бит только для чтения.
Рисунок 10 отображает блок-схему приёмника UART
7.4 Настройка приёмника UART
Используйте следующие шаги при настройки приема:
1. Инициализировать регистр UxBRG для соответствующей baud rate (см.раздел 3 ГЕНЕРАТОР baud rate модуля UART).
2. Установить количество информационных разрядов, количество Стоповых битов, и выбор четности, заполняя биты PDSEL <1:0> (UxMODE <2:1>) и STSEL (UxMODE <0>).
3. Если нужно получать прерывания от передатчика, то установить служебный бит UxRXIE в соответствующем регистре управления разрешением прерывания (IEC).
Определите приоритет прерывания для прерывания приёмника, используя служебные биты UxRXIP <2:0> в соответствующем регистре управления приоритетами прерывания (IPC). Также, выберите режим прерывания приёмника записывая биты UTXISEL <1:0> (UxSTA <7,6>).
4. Включить модуль UART, установив бит UARTEN (UxMODE <15>).
5. Генерирование прерывания, будет зависеть от параметров настройки служебного бита URXISEL <1:0>.
Если прерывания отключены, пользовательское приложение может опросить бит URXDA. UxRXIF бит должен быть сброшен в подпрограмме обработки прерывания приёмника UART.
6. Читать данные из буфера приёмника.
Если производится 9 битная передача данных, то читайте слово; иначе, читайте байт. Бит состояния URXDA
(UxSTA <0>) будет установлен всякий раз, когда данные доступны в буфере.
В примере 3 приведён типовой код программы для настройки приёма UART.
Рисунок 11. Приём UART
Обратите внимание:Эта временная диаграмма показывает 2 символа, полученные на входее UxRX.
Рисунок 12. UART Прием с переполненным буфером
Обратите внимание:Эта временная диаграмма показывает получение 6 символов без чтения пользоватлем данных из буфера. 5-ый полученный символ находится в принимающем сдвиговым регистре. Ошибка переполнения происходит в начале 6-ого символа.
Пример 3 типовой код программы для настройки приёма UART.
#define FCY 40000000
#define BAUDRATE 9600
#define BRGVAL ((FCY/BAUDRATE)/16)-1
intmain(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
U1STAbits.URXISEL = 0; // Прерывание после приёма одного символа;
U1MODEbits.UARTEN = 1; // Enable UART
while(1)
{
char ReceivedChar;
/* проверяем ошибку приёмника */
if(U1STAbits.FERR == 1)
{
continue;
}
/* необходимо очистить ошибку переполнения, чтобы сохранять полученные символы UART */
if(U1STAbits.OERR == 1)
{
U1STAbits.OERR = 0;
continue;
}
/* получить информацию */
if(U1STAbits.URXDA == 1)
{
ReceivedChar = U1RXREG;
}
}
9. Использование UART для 9-ти битной коммутации
Приёмник UARTа может использоваться в 9-ти битном режиме работы для мультипроцессорной коммутации. С помощью бита ADDEN включается 9-ти битный режим работы, приёмник может игнорировать данные когда 9-ый бит данных является ‘0’. Эта особенность может использоваться в многопроцессорной среде.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.