Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: NXP LPC2129 не работает UART
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Д_М
Здравствуйте!
Ниже инициализация UART

br = ((Fpclk) / (16 * baud)) /*- 1*/;
PCONP |= pcon_PCUART0; // Power up UART0
PINSEL0 = (1<< 1) | (1<< 3); // Enable RxD0 and TxD0
U0LCR = 0x00000083; /* UART0 8 bits, no parity, 1 stop bit, DLAB */
U0DLL = (unsigned char)(br);
U0DLM = (unsigned char)(br >> 8);
U0LCR = 0x00000003; /* UART0 8 bits, no parity, 1 stop bit*/
U0FCR = SD_FIFO_ENABLE | SD_FIFO_RX_RESET | SD_FIFO_TX_RESET;

Циклически записываю данные в буфер
void TIMER0VectoredIRQ (void) __irq
{

U0THR = 0xA5;


T0IR |= 0x00000001; //Clear match 0 interrupt
VICVectAddr = 0;// Dummy write to signal end of interrupt
}

Не работает. Смущает, что на выводе TxD0 логический ноль. Если передатчик корректно инициализирован,
то на его выходе должна быть логическая единица.
Что я сделал не так?
Заранее благодарен за поддержку!
Tarbal
Цитата(Д_М @ Nov 12 2013, 22:16) *
Не работает. Смущает, что на выводе TxD0 логический ноль. Если передатчик корректно инициализирован,
то на его выходе должна быть логическая единица.
Что я сделал не так?
Заранее благодарен за поддержку!


С чипом не знаком.
Часто бывает надо вывести устройство (UART) из энергосберегающего режима, разрешить синхроимпульсам поступать к устройству.
GetSmart
Цитата(Д_М @ Nov 13 2013, 01:16) *
PINSEL0 = (1<< 1) | (1<< 3); // Enable RxD0 and TxD0

Вы тут настраиваете выходы в режим PWM. Попробуйте так
PINSEL0 = (PINSEL0 & ~0x0f) | (1<< 0) | (1<< 2);

И чтобы первый раз залететь в прерывание уарта надо вне прерывания кинуть в U0THR что-нибудь.
mempfis_
Скачайте книгу Мартина Тревора The Insiders Guide To The Philips ARM7 Based Microcontrollers. Там есть базовые примеры работы с переферией.

*
Д_М
Цитата(GetSmart @ Nov 13 2013, 09:40) *
Вы тут настраиваете выходы в режим PWM. Попробуйте так
PINSEL0 = (PINSEL0 & ~0x0f) | (1<< 0) | (1<< 2);

И чтобы первый раз залететь в прерывание уарта надо вне прерывания кинуть в U0THR что-нибудь.


Спасибо большое! Получилось. В этом и была моя ошибка.
Tarbal
Кстати вспомнил особенности программирования передатчика UART. В разных процессорах по разному устанавливается флаг вызова прерывания. В одних он означает "передача закончена" и после обработки будет опущен пока новый байт не будет записан в буфер передатчика и не передан (8051). В других он означает "буфер передатчика пуст" (6811). Он всегда установлен, пока не идет передача, или посложнее с двойным буферированием. В таком случае окончание передачи должно сопровождаться снятием разрешения прерывания передатчика. Я встречал процессоры, в которых присутствовали оба флага.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.