Здравствуйте господа!
На шине один передающий контроллер (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 принятых байт верные. Алгоритм передачи-приема работает в симуляторе при любых скоростях...
|