Передача маркера

Если два процессора связываются через линк_порт, то необходимо определить передатчик и приемник. В противном случае возможна попытка одновременной передачи. Передача маркера – это способ решения этой проблемы. На рис. 9.7 показана диаграмма процесса передачи маркера.

Передача маркера – это способ определения текущего передатчика в системе из вух ADSP_2106x. Маркер – это программный флаг, похожий на семафор, который передается между процессорами. После сброса маркер (флаг) принадлежит одному из устройств, что делает его ведущим и передатчиком.

Когда линк_порт приемника (ведомого) хочет стать ведущим, он может выставить сигнал на линии LxACK (запрос данных), чтобы привлечь внимание ведущего. В соответствии с программным протоколом ведущий определит, нужно ли ему отвечать на сигнал передачей данных или у него запрашивают маркер.

Если ведущий желает отдать маркер, он может послать назад определяемое пользователем слово освобождения маркера и впоследствии сбросить свой флаг маркера. Одновременно ведомый проверяет посланные назад данные, и, если они являются словом освобождения маркера, он устанавливает свой маркер и после этого начинает передачу. Если принятые данные не являются словом освобождения маркера, ведомый должен предположить, что ведущий начал

новую передачу.

Ведущий может также запросить прием данных согласно программному протоколу, посылая слово освобождения маркера вместо того, чтобы сначала сбросить LxACK (запрос данных).

Далее описаны несколько основных важных моментов, требующих особого внимания при реализации программного протокола передачи маркера.

1. необходимо, чтобы оба буфера линк_портов не были настроены на передачу в одно время. Если это случилось, то данные могут быть переданы и потеряны из_за того, что ни один линк_порт не будет управлять LxACK. В примере, приведенном в конце главы, опрашиваются биты регистра состояния LSRQ, чтобы гарантировать, что ведущий становится ведомым до того, как ведомый

становится ведущим. Т. о., предотвращается конфликт двух передатчиков.

2. Необходимо, чтобы выбор прерывания линк_порта соответствовал приложению. Если используется схема определения состояния, проверяющая биты состояния регистра LSRQ, важно следующее: если настроенный на прием линк_порт блокируется в то время, как LxACK выставлен, то будет возникать определяемая RC задержка перед тем, как резистор номиналом 50 КОм на LxACK (если подключен) сможет понизить уровень сигнала ниже логического порога. Аналогично, если настроенный на передачу линк_порт блокируется в то время, как LxCLK выставлен, тогда будет возникать определяемая RC задержка перед тем, как резистор номиналом 50 КОм на

LxCLK (если подключен) сможет понизить уровень сигнала ниже логического порога. Если в этот момент соответствующий бит состояния запроса в регистре LSRQ не маскирован, то будет зафиксирован LSR – и прерывание LSRQ может обслуживаться, даже если его генерация не

планировалась.

3. Необходимо, чтобы синхронизация двух параллельно выполняющихся кодов (в передатчике и приемнике) не нарушалась из_за помех. Запрещение вложенных прерываний – один из методов, используемых в примере, чтобы реализовать это.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: