реклама на сайте
подробности

 
 
> Регистр FCR UART0 не устанавливается должным образом, Не проходит инициализация
Цырен
сообщение Sep 11 2007, 14:30
Сообщение #1


Частый гость
**

Группа: Validating
Сообщений: 184
Регистрация: 26-06-07
Из: Санкт-Петербург
Пользователь №: 28 714



Есть инициализация UART0, в ней есть строка установки FCR, которая задает, кроме всего прочего, длину буфера FIFO, по которой соответственно будут происходить прерывания. Мне нужно установить порог на один байт. Но при пошаговой отладке видно, что в инициализации в RTLS записывается 0х3 (порог в 14байт). Я уже не знаю на что думать. Может контроллер дефектный или есть хитрости работы с FCR? Результат работы UARTa - срабатывание обработчика прерывания по последнему пришедшему символу или полное игнорирование входящих данных. Помогите, только не общими словами, а, если можно, подробнее.

Вот код:

void UARTInit( DWORD baudrate, DWORD IntrPriority )
{
DWORD Fdiv;

U0LCR = 0x80;
Fdiv = ( Fpclk / 16 ) / baudrate ;
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x07;

U0FCR = (1<<0) | (1<<1) | (1<<2);

U0IER_bit.RDAIE = 1;

VIC_SetVectoredIRQ(UART0Interrupt,IntrPriority,VIC_UART0);
VICINTENABLE |= 1UL << VIC_UART0;

PINSEL0 = 0x00000050; /* RxD0 and TxD0 */
}

Заранее благодарю за дельные советы.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Цырен
сообщение Sep 12 2007, 14:26
Сообщение #2


Частый гость
**

Группа: Validating
Сообщений: 184
Регистрация: 26-06-07
Из: Санкт-Петербург
Пользователь №: 28 714



Верно подметили, я не указал тип контроллера; это LPC2378. Я попробовал все перечисленные советы - без результата sad.gif.
Видите ли, сегодня я достал другую отладочную плату с другим контроллером, LPC2364, и был неприятно удивлен, что там поведение U0FCR при инициализации подобно. Там тоже после установки в ноль RTLS не устанавливается, а, как прежде принимает значение 0х3. Я много раз слышал, что регистры U0IIR и U0FCR находятся по одному адресу, один из них для чтения другой - для записи, соответственно. Но к чему это? Разве это объясняет, почему прерывание срабатывает не по приходу одного байта, а из очереди байтов выхватывает последний? Помоему прерывание срабатывает на таймаут. А проблема в инициализации. Может там хитрый сиквел инициализации или есть какие-то условия доступа?
Кто делал обработчик прерываний по приходу одного байта в UART, отзовитесь!!!
Ведь это такая распространенная задача, странно, что никто не сталкивался с подобной проблемой.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 00:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016