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

 
 
> NXP LPC2129 не работает UART
Д_М
сообщение Nov 12 2013, 19:16
Сообщение #1


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

Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185



Здравствуйте!
Ниже инициализация 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 логический ноль. Если передатчик корректно инициализирован,
то на его выходе должна быть логическая единица.
Что я сделал не так?
Заранее благодарен за поддержку!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
Tarbal
сообщение Nov 12 2013, 20:51
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



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


С чипом не знаком.
Часто бывает надо вывести устройство (UART) из энергосберегающего режима, разрешить синхроимпульсам поступать к устройству.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 13 2013, 05:40
Сообщение #3


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(Д_М @ Nov 13 2013, 01:16) *
PINSEL0 = (1<< 1) | (1<< 3); // Enable RxD0 and TxD0

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

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


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Nov 13 2013, 08:25
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



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

*
Go to the top of the page
 
+Quote Post
Д_М
сообщение Nov 13 2013, 11:12
Сообщение #5


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

Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185



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

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


Спасибо большое! Получилось. В этом и была моя ошибка.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Nov 13 2013, 12:57
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Кстати вспомнил особенности программирования передатчика UART. В разных процессорах по разному устанавливается флаг вызова прерывания. В одних он означает "передача закончена" и после обработки будет опущен пока новый байт не будет записан в буфер передатчика и не передан (8051). В других он означает "буфер передатчика пуст" (6811). Он всегда установлен, пока не идет передача, или посложнее с двойным буферированием. В таком случае окончание передачи должно сопровождаться снятием разрешения прерывания передатчика. Я встречал процессоры, в которых присутствовали оба флага.
Go to the top of the page
 
+Quote Post

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

 


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


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