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

 
 
> ISR & VIC мутная документация +, LPC2292
Ken@t
сообщение Aug 24 2005, 06:18
Сообщение #1


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

Группа: Свой
Сообщений: 144
Регистрация: 5-08-05
Пользователь №: 7 382



sad.gif Кто так пишет юзер мануал... Конечно за пару часиков, разобрался с программированием VIC и перываниями , но.. остался осадок... blush.gif
И так, уарт подключен к каналу 6 ВИКа . я так понимаю , что

VICIntSelect_bit.INT6 &=~1;
// Тип вектора прерывания для слота 6 (UART) IRQ !
VICVectAddr0 = (unsigned int)&UART0Interrupt;
// Адрес процедуры обработки прерывания, так как пишем в 0 вектор - имеем самый высокий приоритет.
//
VICVectCntl0_bit.NUMBER = VIC_UART0;
// Вот здесь /\ на 0 вектрое имеем прерывание от канала 6 ?
VICVectCntl0_bit.ENABLED = 1;
// Прерывание разрешено. канал 6 за UART 0
VICIntEnable_bit.INT6 = 1;
// Прерывание разрешено

В результате мы имеем 15 векторов от вика и 27 различных прерываний от перефирии, то есть одновременно только половину можем поиметь реальных , а как же тогда остальные ? причём часть из них под ФИК...

Далее совсем мутно для меня, есть прерывание SWI и в тоже время от вика SWI ( Канал 1 )
Какие комманды отвечают за их генерацию ?

Вектор по умолчанию
VICDefVectAddr = (unsigned int)&DefDummyInterrupt;
В каких случаях вызывается ? в тех, когда произошло прерывание и нет вектора закреплённого за каналом ? В таком случае это программная ошибка или намеренно обработка разных прерываний в одной функции , тогда мне не понятно как это запрограммировать...

вот обработка irq
{
void (*interrupt_function)();
unsigned int vector;

vector = VICVectAddr; // Получить адрес вектора прерывания
interrupt_function = (void(*)())vector; // преобразовать в функцию
(*interrupt_function)(); // Вызвать функцию векторного прерывания

VICVectAddr = 0; // Очистить вектор прерывания в VIC.

}

а как сделать реентерабельность прерываний?

сенькс за ответы..


--------------------
Свет мой зеркальце, скажи, да всю правду расскажи я ль на свете всех тупее, бесполезней и пьянее?
Ты - придурок. Спору нет! Но живет на белом свете вот ТАКИХ еще две трети!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DASM
сообщение Aug 25 2005, 06:05
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



ну да, явные вектора можно только 16-ти источникам задать
Остальные станут (если использованы) non-vectored. В этом случае в ISR в VicVectAdrr прочтем значение из VICDefVectAddr. Ну а там поллингом. Хотя ни разу не видел, чтобы кто-то 16 прерываний умудрился забить. Да, кстати не забываем, что IRQ вектор у АРМа все таки один, и уже через него прыгаем по VICVectAddr
Реентерабельность - сразу очищаем VICVectAddr и разрешаем прерывания заново, что тут сложного..
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Jan 24 2011, 16:25
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Правильно ли я понимаю назначение регистров VICDefVectAddr и VICVectAddr в LPC2148 ? ?

VICDefVectAddr :
Если прерывание разрешено везде но не включен ни один VICVectCntl0-15 , то управление передаётся функции , адрес которой записан в VICDefVectAddr . так ?


VICVectAddr :
После возникновения прерывания обработчик должен прочитать из VICVectAddr адрес , на который следует передти ? В кейле под отладкой , как только программа попадает в
обработчик смотрю значение VICVectAddr , там всё время 0 . Почему ? Потому что это значение уже где-то прочиталось в каком-то ассемблерном коде и только после этого программа
попала в мой обработчик, написанный на С ? Так ?


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post



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

 


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


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