как заблокировать все IRQ при передаче коротких (5 мс) кадров - PullRequest
2 голосов
/ 02 июля 2010

Я старожил с драйверами оборудования и устройств и использовал гораздо более ранние версии Linux для управления оборудованием.Недавно я вернулся к игре Linux и управлению устройствами с использованием встроенной обработки и обнаружил, что многое изменилось в мире Linux (в лучшую сторону).Однако я борюсь с проблемой аппаратного контроля, связанной с очень быстрым модулем ядра передачи данных на основе SPI, который должен выключать все прерывания в течение короткого временного интервала (5 мсек), чтобы обеспечить правильную синхронизацию передачи данных для кадра данных.В «старые времена» Linux можно было использовать среду save_flags - cli () - sti () для отключения прерываний для критической секции.Какой самый простой способ сделать это в новой (2.6.33 и более новой) среде управления IRQ Linux.

Скотт

1 Ответ

1 голос
/ 04 июля 2010

Современные эквиваленты local_irq_disable(), local_irq_enable(), local_irq_save() и local_irq_restore().Тем не менее, делать это в течение такого длительного периода времени (и не сомневайтесь в том, что при современных скоростях процессора 5 мс это длительное время) считается довольно антисоциальным.

Также следует учитывать, что современные машины имеют SMI (прерывания управления системой), который не может быть замаскирован и который может занять центральный процессор на удручающем отрезке времени, поэтому вашему коду, возможно, придется справиться с этим случаем.

Ядро в наши дни является приоритетным и имеет таймеры высокого разрешения длякод ядра - ваш код может использовать их вместо этого (см. include/linux/hrtimer.h).

...