fk0, легенда (24.09.2013 10:43, просмотров: 451) ответил FDA на ХЗ. У меня будет PIC18F46K22 на частоте 64 МГц. Время такта соответственно 62,5 нс. Если вход в прерывание будет осуществлён даже за 20 тактов, то времянки уже на грани.
Выкиньте контроллер проф. уровня и возьмите PIC24 или AVR, например. И всё сразу начнёт успевать. Потому, что в контроллерах проф. уровня прерывания сделаны через ()() -- на всех общий вектор это раз, компилятор вынужден сохранить огромное количество регистров т.к. нет нормального стека -- два. Можно, конечно, выделить прерывание "высокого уровня" для 1-wire, можно весь код упхнуть в один .c модуль, и тогда жить станет несколько легче. Но всё равно вот так выглядит программа-минимум:
movff pclath,saved_regsh+13
goto save
save:
movff fsr0l,saved_regsh+12
movff fsr0h,saved_regsh+11
movff fsr1l,saved_regsh+10
movff fsr1h,saved_regsh+9
movff fsr2l,saved_regsh+8
movff fsr2h,saved_regsh+7
movff btemp+1,saved_regsh+6
movff btemp,saved_regsh+5
movff tblptrh,saved_regsh+4
movff tblptrl,saved_regsh+3
movff tablat,saved_regsh+2
movff prodh,saved_regsh+1
movff prodl,saved_regsh
goto int_func
64 шт. 4-тактных такта на вход (и ещё столько же на выход). На частоте 64МГц в 5мкс едва уложится. Впрочем, если переписать на ассемблере... Боюсь, AVR в данном плане сильно лучше.
На PIC24 немного веселее:
push _RCOUNT
mov.d w0,[w15++]
mov.d w2,[w15++]
mov.d w4,[w15++]
mov.d w6,[w15++]
push _PSVPAG
mov #__const_psvpage,w0
mov w0,_PSVPAG
... код функции ...
pop _PSVPAG
mov.d [--w15],w6
mov.d [--w15],w4
mov.d [--w15],w2
mov.d [--w15],w0
pop _RCOUNT
retfie
8 шт. 2-тактных такта на вход. На частоте 32МГц в микросекунду уже можно пытаться уложиться.
AVR же ещё та любительская поделка:
push __zero_reg__
push __tmp_reg__
in __tmp_reg__,__SREG__
push __tmp_reg__
clr __zero_reg__
push r18
push r19
push r20
push r21
push r22
push r23
push r24
push r25
push r26
push r27
push r28
push r29
push r30
push r31
20 тактов на вход и ещё столько же на выход. Показывает недостатки контроллеров с большим числом регистров (pic18, avr). У pic24 или ARM регистров меньше и сохранять тоже меньше. И недостаток 8-битных контроллеров в целом -- у них всегда будет огромное число регистров (потому, что в 8 и даже 16 бит никакие числа из реального мира не влазят).
[ZX]