[an error occurred while processing this directive] [an error occurred while processing this directive]
Для таких и подобных вещей применяю прерывание по Compare Match
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено BLACKEAGLE 13 марта 2002 г. 12:54
В ответ на: Как сделать контроль линии RS-485 отправлено Maniac 13 марта 2002 г. 08:23

В процедуры обработки прерываний приема и передачи вставляю перезагрузку регистра Compare и разрешаю прерывание от отловленного таймаута. МК разные, даже на С куски будут выглядеть по-разному, поэтому привожу пример на квазиязыке:

UARTINT:
ClearTimeoutFlag ;0 - идет обмен
ReadTimerToReg ;Читаю текущее значение таймера
AddTimeoutValueToReg ;TimeoutValue выбираю не менее 4-х межбайтовых интервалов
MoveRegToCompareReg ;Через TimeoutValue сработает Compare Match
EnableCompareMatchInterrupt
ProcessUARTByte
ReturnFromInterrupt

COMPAREINT:
SetTimeoutFlag ;1 - обмен закончен
DisableCompareMatchInterrupt ;До следующего прерывания UART
ReturnFromInterrupt

В этой реализации плохо то, что TimeoutFlag сбрасывается не сразу, как пошла передача/прием, а по окончанию байта, но зато не тратятся лишние ноги. Когда ног не жалко, TxD и RxD заводятся на свободные входы прерываний (или через "или" на один вход), тогда TimeoutFlag переключается уже в самом начале приема/передачи. Этот TimeoutFlag удобно назначить на ногу порта для мониторинга/управления обменом, а если немного усложнить его обработку (по-разному обработать ReceiveUART и TransmitUART), то можно получить полноценные сигналы арбитража RS485.

В том или ином виде использую этот подход в множестве изделий, результаты безукоризненные. А идея, собственно, та же, что и озвучена ув. AlexD и ZAlex - перезапускаемый одновибратор. Жаль только, что у автора вопроса нет свободных прерываний :(((

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru