Есть софтверный mdio драйвер под линукс ядро 2.6.20 (один gpio пин на клок, второй на данные). Пытаюсь подсчитать количество тактов, расходуемое процессором на операцию выставления бита на ноге, но что-то мои расчетные данные не сходятся с показаниями осциллографа.
Исходные данные: процессор на ядре mips74K, частота 300mhz, т.е. длина такта 3.3ns, обрабатывает 2 инструкции за такт (судя по документу с mips.com). Дизассемблировал объектный модуль драйвера, нашел ф-цию дергания пином, число инструкций 72, соответственно занимает 36 тактов или 118нс чтобы выставить единицу и столько же чтобы выставить ноль; никаких задержек (udelay) между этими операциями в драйвере нет.
Т.е. получается 118нс * 2=236нс длина фронта, правильно? Осциллограф же показывает 2.6мкс. Откуда еще добавляются такты??