USART (PIC): о чистке приемного буфера EUSART
Здравствуйте!
На днях я столкнулся с интересной проблемкой на USART для PIC18F6527. Организовал обмен между двумя контроллерами (второй контроллер PIC18F2860). Сначала 6527-й получает некоторую информацию, например: 0хA1, 0x00, 0x01, и байт контрольной суммы. Потом выдает свою посылку, один из байтов - содержимое RCREG2. Затем обмен повторяется, на этот раз 6527-й получает 0хA1, 0x00, 0x02, и байт контрольной суммы, снова отвечает в той же манере. Я наблюдаю все это на ПК, подключившись через преобразователь интерфейсов, в своей терминалке.
Наблюдаю следующую картину. В ячейке содержимого RCREG2 (от 6527) оказывается число 0х01, 0х02 и так далее, то есть то, что было не в последнем принятом байте, а в предпоследнем! (контрольная сумма точно не совпадает с этими числами, я проверял) Я раньше думал, что после считывания RCREG приемный буфер как-то очищается, может быть сдвигается на уровень вверх, но не предполагал, что там может оставаться мусор.
Обмен я организовал таким образом, что прием и передача разнесены во времени, а после сеанса обмена происходит переинициализация USART-ов. То есть никаких наложений байтов быть не может. Но при этом изредка появляются ошибки кадра, не может ли это быть связано с приемным буфером, который, по моему мнению, не очистился?
|