Критическое время в драйвере ядра ARM Linux

Я использую Linux на MX28 (ARMv5) и использую линию GPIO для связи с устройством. К сожалению, к устройству предъявляются особые временные требования. Минимум на линии GPIO не может длиться дольше 7 мкс, максимумы не требуют особых временных требований. Код реализован как драйвер устройства ядра и переключает GPIO с прямой записью в регистр, а не через API GPIO ядра. Для тестирования я просто генерирую 3 импульса. Процесс выглядит следующим образом, все в одной функции, поэтому он должен помещаться в кэш инструкций:

установить gpio высокоСохранить флаги и отключить прерываниягипо низкийПаузагипо высокийповторить еще 2 разаВосстановить флаги / прерывистые прерывания

Вот вывод логического анализатора, привязанного к GPIO.

Большую часть времени он работает просто замечательно, а импульсы длятся чуть менее 1 мкс. Тем не менее, около 10% минимумов длится в течение многих, многих микросекунд. Даже если прерывания отключены, что-то вызывает прерывание потока кода.

Я в растерянности. RT Linux, скорее всего, здесь не поможет, потому что проблема не в задержке, а в том, что происходит во время низкого уровня, что-то происходит, хотя ничто не должно прерывать его с отключенными IRQ. Любые предложения будут очень, с благодарностью.

Ответы на вопрос(2)

Ваш ответ на вопрос