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

 
 
> Помогите настроить
MixEr
сообщение Feb 16 2007, 15:29
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 7-03-06
Из: Самара
Пользователь №: 15 040



Проблема в прнцепе простая:
Использую в LPC2124 UART0.
Проинициализировал его, настроил на использование прерываний.
Написал функции приема и передачи, запускающиеся из обработчика прерываний.
Так вот передача работает нормально, передается нужная посылка, состоящая из нескольких байт.
А при приеме возникли проблемы. Прерывание по приему байта не генерится. Причем в том, что данные приходят на RxD сомнений нет.
Может быть кто подскажет как правильно проинициализировать UART для работы и на прием и на передачу.

TUART::TUART()
{
PINSEL0 |= 0x05; //выбираем альтернативную функцию
U0FCR = 0x07; //активируем FIFO буфер для приемника и передатчика и очищаем их
U0LCR = 0x83; //8 бит без контроля четности 1 стоп-бит
U0DLL = BAUDRATEDIVISOR & 0x00ffж //записываем младший байт делителя
U0DLM = (BAUDRATEDIVISOR >> 8) & 0x00ff; //записываем старший байт делителя
U0LCR = 0x03;
U0IER = 0x03; // Rx and Tx interrupt
VICIntSelect &= ~VIC_UART0_bit; // IRQ on UART0.
VICVectAddr5 = (unsigned int)&UART0isr;
VICVectCntl5 = 0x20|isrUART0; // Enable vector interrupt for UART0.
VICIntEnable = VIC_UART0_bit; // Enable UART 0 interrupt.
U0LCR_bit.DLAB = 0;
}


--------------------
Бесплатный файлообменник с выгодой для тебя...
http://depositfiles.com/signup.php?ref=ankudin-off
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
etoja
сообщение Feb 16 2007, 17:08
Сообщение #2


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

Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952



1. Напиши программу приёма байта из UART по готовности (без прерываний) для проверки факта приёма.

2. Работа по прерыванию от приёма байта :

// --------------------------------------------------------------------------------
void UART1_Init(long baud)
{
unsigned int divisor = peripheralClockFrequency() / (16 * baud);

PCB_PINSEL0 |= 0x00050000; // Select UART1 RXD/TXD
UART1_LCR = 0x87; // 8N2, enable Divisor latch bit
UART1_IER = 0X00; // 0: запретить прерывания
UART1_DLL = divisor & 0xFF;
UART1_DLM = (divisor >> 8) & 0xFF;
UART1_LCR &= ~0x80;

UART1_FCR = 1; //1: Enable FIFO's
Uart_Init_Delay();
UART1_FCR = 7; //6: Reset TX and RX FIFO
Uart_Init_Delay();
}
// --------------------------------------------------------------------------------

//select interrupts

VICIntSelect=0x00000000; // IRQ
VICSoftInt = 0x00000000;
VICSoftIntClear = ~VICSoftInt;

VICVectAddr4=(unsigned)uart1_isr; // UART1 на приём
VICVectCntl4 = 0x20 | 7;
VICIntEnable = 0x00000080;

// --------------------------------------------------------------------------------
#pragma interrupt_handler uart1_isr // эта строчка - для компилятора ICCV7
void uart1_isr(void)
{
unsigned char id, status, bChar;
id=UART1_IIR; //read interrupt id to clear flag
if((id & 0b0100) != 0)
{
status = UART1_LSR; // Get status register

if(status & 1) // If Holding is empty then send
{
RxChar = UART1_RBR; // записываем принятый байт в переменную
RxRdy = 1; // признак, что прерывание произошло
if(xRx < RxLEN) Rxbuf[xRx++]= RxChar; // записываем принятый байт в буфер, пока есть место
}
}
VICVectAddr = 0; // Acknowledge Interrupt
}
// -------------------------------------------------------------------------------------------
// ---- приём по готовности, без прерываний -----------------------
unsigned char rx_char1( void)
{
while(RxRdy == 0);
RxRdy = 0;
return(RxChar);
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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