Ответ: Если ты вообще не прыгаешь даже на irq_handler() ни разу, то попробуй функцию
void Intr_Setup()
{
VICIntSelect = 0; // нет прерываний назначенных на FIQ
// прерывание от SPI разрешено (оно жестко приписано к VIC Chanel .10)
VICIntEnable |= (1 << VIC_SPI);
VICVectAddr10 = (unsigned int)&SPI0_handler; // на Addr14 записываем адрес обработчика прерывания SPI0
VICVectCntl10 = 0x20 | VIC_SPI; // обработчик по Addr0 разрешен и назначен на VIC Chanel №10 (т.е. SPI0)
}
заменить на функцию
void Intr_Setup()
{
VICProtection = 0; // На всякий разрешим и для User mode
VICIntEnClr = 0xffffffff;
VICIntSelect &= ~(1 << VIC_SPI);
VICVectAddr0 = (unsigned int)&SPI0_handler;
VICVectCntl0 = 0x20 | VIC_SPI;
VICIntEnable |= (1 << VIC_SPI);
}
Обращу внимание, что ненадо прописывать регистры ВИКа (VICVectAddrXX, VICVectCntlXX) в соответствии с привязкой источников прерываний к каналам ВИКа. Они не имею ничего общего. А вот заполнять их лучше с нулевого и без "дырок". Ибо придется перед каждой заливкой проги клацать питанием (в случае если возишься с прерываниями). А так-же нехорошо как-то сначала разрешать прерывание, а потом его настраивать. =)))