Здравствуйте господа!
На шине один передающий контроллер (PIC18F252, 10MHz+PLL), один принимающий (ATmega168, 20MHz). Установлен режим мультипроцессорный:
Должно быть:
мега принимает свой адрес, распознает его, выставляет прием данных (lds rh_ucsra, UCSR0A; andi rh_ucsra, ~(1 << MPCM0); sts UCSR0A, rh_ucsra) и далее принимает блок данных длиной 256 байт, после приема запрещает прием данных.
Что выходит:
мега распознает адрес... принимает данные, причем принимает только первых 89 (!) байт и далее перестает принимать данные, затем опять принимает свой адрес, причем у него установлен (!) бит MPCM0. Распознает адрес, сбрасывает MPCM0, и т.д.
Бит MPCM0 я не выставляю, т.к. выставляется он только при условии приема 256-ти байт.
Скорости обмена выставлял в разных диапазонах - от 19.2К до 1.25М.
Пробовал и по UARTу непосредственно и по RS485.
Данные при приеме не искажаются (проверяю цифровым осциллографом 100MHz), в контроллере 89 принятых байт верные.
Алгоритм передачи-приема работает в симуляторе при любых скоростях...