
Кто так пишет юзер мануал... Конечно за пару часиков, разобрался с программированием VIC и перываниями , но.. остался осадок...
И так, уарт подключен к каналу 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.
}
а как сделать реентерабельность прерываний?
сенькс за ответы..
Свет мой зеркальце, скажи, да всю правду расскажи я ль на свете всех тупее, бесполезней и пьянее?
Ты - придурок. Спору нет! Но живет на белом свете вот ТАКИХ еще две трети!