ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
16600 Топик полностью
ShiphT (12.11.2004 13:50, просмотров: 1) ответил ChumA на По просьбам трудящихся...
Ответ: Если ты вообще не прыгаешь даже на 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) в соответствии с привязкой источников прерываний к каналам ВИКа. Они не имею ничего общего. А вот заполнять их лучше с нулевого и без "дырок". Ибо придется перед каждой заливкой проги клацать питанием (в случае если возишься с прерываниями). А так-же нехорошо как-то сначала разрешать прерывание, а потом его настраивать. =)))