> вы уверены, что запись в регистр не кешируется?
> можно Ваш код в студию?
// задание интревала 2 мсек срабатывания прерывания
writeb(0x2, chip_cyclone_addr + 0x11);
// включение генерирования прерывания
writeb(0x1, chip_cyclone_addr + 0x10);
iRet = request_irq(5, altera_interrupt, SA_INTERRUPT, "altera", (void *)altera_interrupt);
теперь обработчк:
int tmp = 0, i, handled = 0;
count_irq++;
//считывание - для определение срабатывания прерывания, т.е. если 1-ый бит 10-го регистра равен "1", то прерывание сработало
tmp = readb(chip_cyclone_addr + 0x10);
if (tmp & _B_01)
{
count_real_irq++;
//крутим цикл, чтобы просто потянуть время после обнаружения срабатывания прерывания, этот цикл чётко видно на осцилографе, при увеличении длительности цикла, там верхняя черта растёт ;), но она обрабатывается не всегда, а как то через раз по моему
for (i = 0; i < 1000; i++) tmp = readb(chip_cyclone_addr + 0x11);
//чтение - это сброс прерывания
tmp = readb(chip_cyclone_addr + 0xCB420);
handled = 1;
}
return IRQ_RETVAL(handled);