URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5635
[ Назад ]

Исходное сообщение
"обработка прерывания в модуле ядра"

Отправлено realsystem , 14-Авг-06 08:42 
насколько быстрое прерывание возможно обработать в модуле ядра?(интересует 2мсек прерывание с шины PCI, возможно?)

Содержание

Сообщения в этом обсуждении
"обработка прерывания в модуле ядра"
Отправлено int_0d , 14-Авг-06 09:16 
>насколько быстрое прерывание возможно обработать в модуле ядра?(интересует 2мсек прерывание с шины
>PCI, возможно?)


да, вполне возможно даже на ядре без RT патчей. хотя, конечно, многое зависит от того,
что вы делаете в обработчике.


"обработка прерывания в модуле ядра"
Отправлено realsystem , 14-Авг-06 09:18 
>>насколько быстрое прерывание возможно обработать в модуле ядра?(интересует 2мсек прерывание с шины
>>PCI, возможно?)
>
>
>да, вполне возможно даже на ядре без RT патчей. хотя, конечно, многое
>зависит от того,
>что вы делаете в обработчике.

ну просто чтение/запись в регистры PCI железки.
кстати можешь дать рабочие ссылки на RT-патчи? хочется потестить


"обработка прерывания в модуле ядра"
Отправлено int_0d , 14-Авг-06 10:07 

>ну просто чтение/запись в регистры PCI железки.
>кстати можешь дать рабочие ссылки на RT-патчи? хочется потестить

к сожалению не могу по причине отсутствия потребности в таковых
(в нашей конторе кошерна только montavista и использование всяких левых патчей
отнюдь не приветствуется)



"обработка прерывания в модуле ядра"
Отправлено realsystem , 14-Авг-06 10:15 
>
>>ну просто чтение/запись в регистры PCI железки.
>>кстати можешь дать рабочие ссылки на RT-патчи? хочется потестить
>
>к сожалению не могу по причине отсутствия потребности в таковых
>(в нашей конторе кошерна только montavista и использование всяких левых патчей
>отнюдь не приветствуется)

понятно, есть какой нить скелетик как обработать 2мсек прерывание в модуле? я делаю как в книжках - по ioctl запросу от приложения делаю request_irq(с флагом SA_INTERRUPT), в обработчике читаю из регистра (при этом происходит аппаратный сброс прерывания), смотрю на осциллограф, виже сброс происходит только через раз, в чем дело?


"обработка прерывания в модуле ядра"
Отправлено int_0d , 14-Авг-06 10:26 
вы уверены, что запись в регистр не кешируется?
можно Ваш код в студию?



"обработка прерывания в модуле ядра"
Отправлено realsystem , 14-Авг-06 10:47 
> вы уверены, что запись в регистр не кешируется?
> можно Ваш код в студию?


//        задание интревала 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);


"обработка прерывания в модуле ядра"
Отправлено int_0d , 14-Авг-06 11:01 
гм, не пробовали выводить count_real_irq хотя бы раз в секунду?
Ваша затея с циклом доверия как-то не внушает

Вопросы не по делу:

1) Вы повесили Altera на PCI?
2) делаете SHDSL модем или что-то вроде?



"обработка прерывания в модуле ядра"
Отправлено realsystem , 14-Авг-06 11:03 
>гм, не пробовали выводить count_real_irq хотя бы раз в секунду?
выводили, не всегда совпадает с осцилограммой
>Ваша затея с циклом доверия как-то не внушает
а как можно проверить? что посоветуете?
>
>Вопросы не по делу:
>
>1) Вы повесили Altera на PCI?
>2) делаете SHDSL модем или что-то вроде?

всё правильно ;)


"обработка прерывания в модуле ядра"
Отправлено int_0d , 14-Авг-06 11:11 
не совсем понял, что значит не всегда совпадает - есть правильное число прерываний
или нет?


2) Вы случайно не в Питере?


"обработка прерывания в модуле ядра"
Отправлено realsystem , 14-Авг-06 11:14 
>не совсем понял, что значит не всегда совпадает - есть правильное число
>прерываний
>или нет?
самих прерываний - есть, а вот их обработок меньше ;)

>
>2) Вы случайно не в Питере?

в Саратове ;)


"обработка прерывания в модуле ядра"
Отправлено int_0d , 14-Авг-06 11:22 
у меня был похожий проект - 8 линейный SHDSL модем (правда на основе собственной
платы - клона IXDP425 с небольшими ништяками)

Если будут интересные вопросы - добро пожаловать в аську 273-083-900