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

 
 
> Проблема LPC2214 UART+T0 IRQ
dmyl
сообщение Nov 22 2006, 11:44
Сообщение #1


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

Группа: Свой
Сообщений: 123
Регистрация: 11-01-06
Пользователь №: 13 032



Прерывания два УАРТ и Таймер0, Т0 запускается периодически (отсчет таймаута), пока был один Т0 все работало, с делал прерывание на прием по УАРТу - какие-то глюки
Не получается разобраться в чем проблема, вот код
Инициализания прирываний:

static void DefDummyInterrupt(void)
{}

// IRQ exception handler. Calls the interrupt handlers.
#pragma vector=0x18
__irq __ramfunc void irq_handler(void)
{
void (*interrupt_function)();
unsigned long vector;

vector = VICVectAddr; // Get interrupt vector.
interrupt_function = (void(*)())vector;
// __enable_interrupt(); // Enable interrupts.
(*interrupt_function)(); // Call vectored interrupt function.

VICVectAddr = 0; // Clear interrupt in VIC.
}

//************************************************************
void init_IRQ(void)
{
// Setup interrupt controller.
VICProtection = 0;
// Disable all interrupts
VICIntEnClear = 0xffffffff;
VICDefVectAddr = (unsigned long)&DefDummyInterrupt;

// Setup timer callback function.
VICIntSelect=0x0; // Timer0 & UART select as IRQ.
VICVectAddr0 = (unsigned long)&UART0Interrupt;
VICVectCntl0 = 0x20 | VIC_UART0; // Enable vector interrupt for UART0.
VICVectAddr1 = (unsigned long)&Timer0Interrupt;
VICVectCntl1 = 0x20 | VIC_TIMER0; // Enable vector interrupt for timer 0.
VICIntEnable = 0x50; // Enable timer 0 & UART0 interrupt.
}

УАРТ - слот0
Т0- слот1
Процедура обработки для Т0 и УАРТа

// Timer0 interrupt handler
__ramfunc void Timer0Interrupt(void)
{
T0IR = 0xff; // Clear timer 0 interrupt line.
BF=0;
}

//******************************************************************
// Заполняет буфер приема
__ramfunc void UART0Interrupt()
{
while (U0LSR&0x1)
{
rx_buff[rx_end]=U0RBR;
rx_end=(rx_end+1)%RX_BUFF_LEN;
rx_len++;
}
}


Под житагом запускаю программу, передаю пакет данных. На него должен быть ответ, ответа нет. Останавливаю программу, пакет в буфер принимается верно, лишнего нет почему-то постоянно вылетает на DummyInterrupt, пока не тормознешь отладчиком ответа нет, после остановки отладчиком и снова запуска ответ передается.
Если точка останова на irq_handler то постоянно вылезают DummyInterrupt.
Вообщем чушь какая-то, отладить не получается стоит тормознуть отладчиком идут ответы на пакет.

Может есть пример рабочего кода для обработки приема по УАРТ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Nov 23 2006, 12:46
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Nov 23 2006, 10:20) *
Моя статистика наблюдений за "проблемами с прерываниями" на данном форуме, показывает, что в большинстве случаев они оказываются "проблемаим со стеком".

По-моему, описанная проблема - не вызывается обработчик прерывания - очень плохо вяжется с "проблемами со стеком".
Go to the top of the page
 
+Quote Post
dmyl
сообщение Nov 23 2006, 16:40
Сообщение #3


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

Группа: Свой
Сообщений: 123
Регистрация: 11-01-06
Пользователь №: 13 032



Проблему поборол, не понятно почему вычитывание данных UART до опустошения буфера (бит DR) не эквивалентно вычитыванию UART пока не снимется IIR. Прерывания УАРТа кроме RDA все запрещены.

Загадкой осталось такое поведение под отладчиком через JTAG.
Причем абсолютно точно, если висит окно просмотра регистров UART то прерывание сразу сбрасывалось, если окно закрыть то нет. Видимо чтение регистров сбрасывающих прерывания через JTAG в отладчике эквивалентно их чтению в программе. Вот и получается глюкодром.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 23 2006, 18:39
Сообщение #4


Гуру
******

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



Цитата(dmyl @ Nov 23 2006, 15:40) *
Проблему поборол, не понятно почему вычитывание данных UART до опустошения буфера (бит DR) не эквивалентно вычитыванию UART пока не снимется IIR.

Странный подход к делу - НЕ должно оно сниматся от того, что буфер опустошили а должно только после того, как Вы дали понять, что на него среагировали, а уж какяя там Ваша реакция должна быть -
читать буфер, не читать буфер, читать, но в следующий понедельник - не его дело.

Цитата
Загадкой осталось такое поведение под отладчиком через JTAG.
Причем абсолютно точно, если висит окно просмотра регистров UART то прерывание сразу сбрасывалось, если окно закрыть то нет.

Какая "загадка" - висит отладчик и ЧИТАЕТ UART. Железу UART по барабану, кто его считал и дал знак,
что СРЕАГИРОВАЛ на прерывание.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
dmyl
сообщение Nov 24 2006, 10:22
Сообщение #5


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

Группа: Свой
Сообщений: 123
Регистрация: 11-01-06
Пользователь №: 13 032



Цитата
Странный подход к делу - НЕ должно оно сниматся от того, что буфер опустошили а должно только после того, как Вы дали понять, что на него среагировали, а уж какяя там Ваша реакция должна быть -
читать буфер, не читать буфер, читать, но в следующий понедельник - не его дело.

Что же тут странного? Или есть другой способ дать понять что среагировали на прерывание по приему УАРТа и сбросить его кроме как прочитать данные из RBR?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- dmyl   Проблема LPC2214 UART+T0 IRQ   Nov 22 2006, 11:44
- - dmyl   Немного переделал - выкинул Т0, оставил только при...   Nov 22 2006, 12:11
|- - Alex03   Цитата(dmyl @ Nov 22 2006, 14:11) Немного...   Nov 22 2006, 14:32
|- - zltigo   Цитата(Alex03 @ Nov 22 2006, 13:32) А поч...   Nov 22 2006, 18:39
|- - Alex03   Цитата(zltigo @ Nov 22 2006, 20:39) Цитат...   Nov 27 2006, 10:07
|- - zltigo   Цитата(Alex03 @ Nov 27 2006, 09:07) А всё...   Nov 27 2006, 11:39
|- - Alex03   Цитата(zltigo @ Nov 27 2006, 13:39) Цитат...   Nov 27 2006, 15:26
|- - zltigo   Цитата(Alex03 @ Nov 27 2006, 14:26) Если ...   Nov 27 2006, 19:23
|- - Alex03   Уважаемый zltigo! У меня нет желания спорить с...   Nov 28 2006, 12:31
|- - zltigo   Цитата(Alex03 @ Nov 28 2006, 11:31) У мен...   Nov 28 2006, 13:38
|- - Alex03   Цитата(zltigo @ Nov 28 2006, 15:38) По ...   Nov 28 2006, 16:40
|- - zltigo   Цитата(Alex03 @ Nov 28 2006, 15:40) А пер...   Nov 28 2006, 17:11
- - amw   Использую оба указанных прерывания. Никаких пробле...   Nov 22 2006, 17:23
- - Andrew2000   Цитата(dmyl @ Nov 22 2006, 11:44) Прерыва...   Nov 23 2006, 02:29
- - aaarrr   Цитата(Andrew2000 @ Nov 23 2006, 02:29) Т...   Nov 23 2006, 04:22
|- - zltigo   Цитата(aaarrr @ Nov 23 2006, 03:22) К инс...   Nov 23 2006, 10:20
|- - zltigo   Цитата(dmyl @ Nov 24 2006, 09:22) Или ест...   Nov 24 2006, 15:47
|- - dmyl   ЦитатаУж не знаю, как и обьяснить... Вы с железом ...   Nov 24 2006, 15:55
|- - zltigo   Цитата(dmyl @ Nov 24 2006, 14:55) Если вы...   Nov 24 2006, 17:18
|- - dmyl   Цитата(zltigo @ Nov 24 2006, 18:18) Для п...   Nov 24 2006, 20:26
|- - zltigo   Цитата(dmyl @ Nov 24 2006, 19:26) ...там ...   Nov 24 2006, 21:33
|- - dmyl   Цитата(zltigo @ Nov 24 2006, 22:33) Еще р...   Nov 25 2006, 10:23
|- - zltigo   Цитата(dmyl @ Nov 25 2006, 09:23) Это пон...   Nov 25 2006, 11:58
|- - dmyl   Цитата(zltigo @ Nov 25 2006, 12:58) Так в...   Nov 25 2006, 14:03
|- - zltigo   Цитата(dmyl @ Nov 25 2006, 13:03) Со стар...   Nov 25 2006, 15:57
|- - dmyl   Цитата(zltigo @ Nov 25 2006, 16:57) Если ...   Nov 25 2006, 18:02
|- - zltigo   Цитата(dmyl @ Nov 25 2006, 17:02) В каком...   Nov 25 2006, 18:54
- - bombastic   Цитата(dmyl @ Nov 22 2006, 11:44) Если то...   Nov 24 2006, 14:56
|- - Сергей Борщ   Цитата(bombastic @ Nov 24 2006, 13:56) Ци...   Nov 24 2006, 16:59
- - sensor_ua   У меня работает чуток рихтанутый вариант обработчи...   Nov 28 2006, 17:16


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 16:00
Рейтинг@Mail.ru


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