ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
446284 Топик полностью
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]