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

 
 
> Регистр 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
Ответов
zltigo
сообщение Sep 11 2007, 14:46
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Цырен @ Sep 11 2007, 17:30) *
Есть инициализация UART0..

Тип контролера, полагаете, несущественнен? sad.gif
Цитата
, в ней есть строка установки FCR, которая задает, кроме всего прочего, длину буфера FIFO, по которой соответственно будут происходить прерывания. Мне нужно установить порог на один байт.

Так какого беса Вы тогда АКТИВИЗИРУЕТЕ FIFO???
Код
U0FCR = (1<<0) | (1<<1) | (1<<2);
-----------^^^^^

Цитата
в RTLS

И что это за буквы такие "RTLS"???


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 11 2007, 23:11
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(zltigo @ Sep 11 2007, 17:46) *
Так какого беса Вы тогда АКТИВИЗИРУЕТЕ FIFO???

Чтоб TX fifo работало вестимо.

Код
// FCR (Fifo control register) bits description
#define FCR_FIFO_EN          0
#define FCR_RX_FIFO_RESET    1
#define FCR_TX_FIFO_RESET    2
// RX trigger level bits 7:6
// 0 - trigger level 1 char
// 1 - trigger level 4 chars
// 2 - trigger level 8 chars
// 3 - trigger level 14 chars
#define FCR_RX_TRIGGER_LVL0  0x00
#define FCR_RX_TRIGGER_LVL1  0x40
#define FCR_RX_TRIGGER_LVL2  0x80
#define FCR_RX_TRIGGER_LVL3  0xC0


Афтар говорит о RX Trigger Level Select (RTLS) trigger level 0. Работать должно.
Ошибка скорее всего в обработчике прерывания.

1. Надо обязательно прочитать UxIIR.
2. надо обязательно записать в конце обработчика прерывания
VICVectAddr = 0; //Dummy write to signal end of interrupt
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 19:08
Рейтинг@Mail.ru


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