Читайте также:
|
|
Программа обработки прерывания должна считывать регистр LSRQ для определения номера линк-порта, который надо обслужить, и типа запроса – передача или прием. Прерывания LSR имеют задержку два цикла. Заметим, что прерывание запроса обслуживания линк-порта отличается от прерываний приема и передачи линк-порта. 32_разрядный регистр LSRQ содержит маскируемые биты состояния запроса приема или передачи для каждого линк_порта и соответствующие биты маски прерывания. Бит состояния линк_порта устанавливается, когда порт заблокирован и выставлен (высокий уровень) один из сигналов LxACK или LxCLK. Биты состояния LSRQ только для чтения. В табл. 9.5 показаны биты регистра LSRQ.
Чтобы определить, какой линк_порт надо обслужить, передайте содержимое регистра LSRQ в регистр Rx (в регистровый файл), используя команду обнаружения начальных нулей (Rn=LEFTZ Rx). Rn укажет активизированные линк-порты в порядке приоритета. Если используются запросы обслуживания линк-порта, то они должны маскироваться при активизации и блокировании буферов, назначенных линк-порту, или при блокировании линк-порта в регистре LAR, в противном случае могут генерироваться ложные запросы обслуживания. Необходимость этого маскирования возникает из-за задержки «подтягивания» к земле (если оно разрешено) сигналов LxCLK или LxACK (если они были выставлены) или из-за задержки при выполнении сброса этих сигналов внешним устройством ниже логического порога (если «подтягивание» запрещено). При опросе этих сигналов в течение этой задержки определяется, что они выставлены, в результате чего генерируется LSRQ.
Чтобы устранить возможность возникновения ложных прерываний, маскируйте прерывание LSRQ или соответствующий бит запроса в регистре LSRQ и обеспечьте соответствующую задержку перед демаскированием этого прерывания. С другой стороны, маскируйте прерывание LSRQ и опрашивайте соответствующий бит состояния запроса до тех пор, пока он не будет очищен, а затем демаскируйте прерывание.
Идея алгоритма "передачи маркера"
Если два процессора связываются через линк_порт, то необходимо определить передатчик и приемник. В противном случае возможна попытка одновременной передачи. Передача маркера – это способ решения этой проблемы.
Передача маркера – это способ определения текущего передатчика в системе из двух ADSP_2106x. Маркер – это программный флаг, похожий на семафор, который передается между процессорами. После сброса маркер (флаг) принадлежит одному из устройств, что делает его ведущим и передатчиком. Когда линк-порт приемника (ведомого) хочет стать ведущим, он может выставить сигнал на линии LxACK (запрос данных), чтобы привлечь внимание ведущего. В соответствии с программным протоколом ведущий определит, нужно ли ему отвечать на сигнал передачей данных или у него запрашивают маркер.
Если ведущий желает отдать маркер, он может послать назад определяемое пользователем слово освобождения маркера и впоследствии сбросить свой флаг маркера. Одновременно ведомый проверяет посланные назад данные, и, если они являются словом освобождения маркера, он устанавливает свой маркер и после этого начинает передачу. Если принятые данные не являются словом освобождения маркера, ведомый должен предположить, что ведущий начал новую передачу.
Ведущий может также запросить прием данных согласно программному протоколу, посылая слово освобождения маркера вместо того, чтобы сначала сбросить LxACK (запрос данных).
Замечания:
Слово освобождения маркера (TRW – Token Release Word) может быть любым значением, определяемым пользователем. Так как и приемник, и передатчик ожидают кодового слова, нет необходимости, чтобы оно было исключением из обычно передаваемых данных.
Далее описаны несколько основных важных моментов, требующих особого внимания при реализации программного протокола передачи маркера.
● Необходимо, чтобы оба буфера линк-портов не были настроены на передачу в одно время. Если это случилось, то данные могут быть переданы и потеряны из-за того, что ни один линк-порт не будет управлять LxACK. В примере, приведенном в конце главы, опрашиваются биты регистра состояния LSRQ, чтобы гарантировать, что ведущий становится ведомым до того, как ведомый становится ведущим. Т. о., предотвращается конфликт двух передатчиков.
● Необходимо, чтобы выбор прерывания линк-порта соответствовал приложению. Если используется схема определения состояния, проверяющая биты состояния регистра LSRQ, важно следующее: если настроенный на прием линк-порт блокируется в то время, как LxACK выставлен, то будет возникать определяемая RC задержка перед тем, как резистор номиналом 50 КОм на LxACK (если подключен) сможет понизить уровень сигнала ниже логического порога. Аналогично, если настроенный на передачу линк-порт блокируется в то время, как LxCLK выставлен, тогда будет возникать определяемая RC задержка перед тем, как резистор номиналом 50 КОм на LxCLK (если подключен) сможет понизить уровень сигнала ниже логического порога. Если в этот момент соответствующий бит состояния запроса в регистре LSRQ не маскирован, то будет зафиксирован LSR – и прерывание LSRQ может обслуживаться, даже если его генерация не планировалась.
● Необходимо, чтобы синхронизация двух параллельно выполняющихся кодов (в передатчике и приемнике) не нарушалась из-за помех. Запрещение вложенных прерываний – один из методов, используемых в примере, чтобы реализовать это.
31. Механизм арбитража внешней шины. Схемы приоритетов. Приоритетный доступ процессорного ядра.
Дата добавления: 2015-11-16; просмотров: 59 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Регистры управления работой линк-портов ADSP-2106x | | | Механизм арбитража общей внешней шины |