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

 
 
> LPC2129 прерывание UART, не получается прерывание завершения передачи
Д_М
сообщение Mar 11 2015, 20:34
Сообщение #1


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

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



Здравствуйте!
Работает прерывание приёма и опустошения регистра передачи. Очень хочется, чтобы было прерывание и по окончании передачи.
Ниже обработчик прерывания

CODE
#define RBR_Interrupt_Enable (1<< 0)
#define THRE_Interrupt_Enable (1<< 1)
#define LS_Interrupt_Enable (1<< 2)
#define Receive_Line_Status 6
#define Receive_Data_Available 4
#define Character_TimeOut_Indicator 0x0C
#define THRE_Interrupt 2
#define msk_ULSR_Errors 0x9E

void UART0VectoredIRQ (void) __irq
{
char
Msg,
dummy;

if(((Msg = U0IIR) & 0x01) == 0) // Flag Status of RX Int
{
switch(Msg & 0x0E) // Filter Msg
{
case Receive_Line_Status:
if (IOPIN & LED_G)
LEDS_ON = LED_G;
else
LEDS_OFF = LED_G;

if (U0LSR & msk_ULSR_Errors)
break;
else
if ((RTS0) && (U0LSR & (1<< TEMP))) // Transmition Finish
{
// Run Tx handler
/* if (IOPIN & LED_G)
LEDS_ON = LED_G;
else
LEDS_OFF = LED_G; */
U0IER = RBR_Interrupt_Enable | LS_Interrupt_Enable;
RTS0 = 0;
break;
}

case Receive_Data_Available:
RTS0 = 1;
U0IER = THRE_Interrupt_Enable;
U0THR = U0RBR + 3;
/* if (IOPIN & LED_G)
LEDS_ON = LED_G;
else
LEDS_OFF = LED_G; */
break;
case THRE_Interrupt:
if (IOPIN & LED_G)
LEDS_ON = LED_G;
else
LEDS_OFF = LED_G;

U0IER = LS_Interrupt_Enable;
/*
if (RTS0) // Transmition
if (amount_SIO0--)
U0THR = *ptr_SIO0++;
else
dummy = U0LSR; */
break;
default:
break;
}
}
VICVectAddr = 1;// Dummy write to signal end of interrupt
}

Программа должна возвращать один байт на один байт запроса. Как я себе представляю, при обработке прерывания опустошения регистра передачи, включается прерывание "состояние линии" (LS_Interrupt_Enable). Когда произойдёт это прерывание, отследить в регистре состояния линии (LSR) бит TransmitterEmpty(TEMT). Однако, управление не переходит на Receive_Line_Status
Что не так?

Сообщение отредактировал IgorKossak - Mar 12 2015, 18:30
Причина редактирования: [codebox] для длинного кода, [code] - для короткого
Go to the top of the page
 
+Quote Post



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

 


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


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