Руководство пользователя по сигнальным процессорам Sharc
.pdfЛинк-порты 9
♦5 канал DMA предназначен для буфера 3 линк портов (LBUF3).
♦6 канал DMA совместно используется для буфера 0 внешнего порта (EPB0) и буфера 4 линк портов (LBUF4).
♦7 канал DMA совместно используется для буфера 1 внешнего порта (EPB1) и буфера 5 линк портов (LBUF5).
1 и 3 каналы DMA совместно используются буферами 0 и 1 линк портов соответственно и последовательным портом (SPORT1). Эти каналы назначаются SPORT1 или буферам линк портов в соответствии со следующими правилами:
♦Если биты, разрешающие прием по DMA или цепочку операций DMA через SPORT1, установлены, то 1 канал DMA назначен SPORT1.
♦Если бит, разрешающий DMA через LBUF0, установлен, то этот канал DMA назначен буферу 0 линк портов.
♦Если установлены оба бита, то выбирается SPORT1.
♦Если ни один бит не установлен, то прерывания для обоих буферов объединяются по схеме «ИЛИ».
Совместное использование SPORT1 (при передаче) и LBUF1 определяется таким же образом.
6 канал DMA совместно используется буфером внешнего порта EPB0 и буфером 4 линк портов (LBUF4). Канал 6 назначается буферу 0 внешнего порта или буферу 4 линк портов в соответствии со следующими правилами:
♦Если биты, разрешающие DMA или цепочку операций DMA через EPB0, установлены, то 6 канал DMA назначен EPB0.
♦Если бит, разрешающий DMA через LBUF4 установлен, то этот канал назначен буферу 4 линк портов.
♦Если установлены оба бита, то выбирается EPB0.
♦Если ни один бит не установлен, то прерывания обоих для буферов объединяются по схеме «ИЛИ».
Совместное использование 7 канала DMA между EPB1 и LBUF5 определяется таким же образом.
Когда передача блока по DMA завершена, генерируется маскируемое прерывание. Подробнее о прерываниях см. в разделе «Прерывания линк порта» этой главы.
Если DMA через буфер запрещен, то буфер может считываться или записываться ядром процессора как отображенная в памяти ячейка. Если DMA запрещен, то маскируемое прерывание генерируется, когда приемный буфер не пустой или передающий буфер не полный.
321
9 Линк-порты
9.5.1. Цепочка операций DMA через линк-порты
При цепочке операций DMA ADSP 2106x автоматически начинает следующую передачу по DMA, когда содержимое текущего буфера передано (или принято). Регистр указателя цепочки (CPx) используется для указания следующего набора параметров буфера, хранящихся во внутренней памяти. Контроллер DMA ADSP 2106x автоматически загружает эти параметры буфера, чтобы начать следующую последовательность DMA. Подробнее о настройке цепочки операций DMA см. в главе DMA данного руководства.
Цепочка операций DMA разрешается для каждого линк порта путем установки бита LxCHEN в LCTL. Когда цепочка операций разрешена, передача по DMA начинается, когда адрес памяти записывается в регистр CP.
Регистры параметров DMA инициализируются для цепочки операций в следующем порядке:
IIx |
Индексный регистр (начальный адрес буфера памяти) |
IMx |
Регистр модификации (приращение) |
Cx |
Регистр счетчика |
CPx |
Регистр указателя цепочки |
9.6. Прерывания линк-порта
Линк порты имеют прерывания трех типов:
1.Прерывание при приеме и передаче данных, когда ядро процессора ADSP 2106x прямо обращается к буферам и когда DMA запрещен.
2.Прерывание, генерируемое после завершении цикла DMA.
3.Прерывание при попытке внешнего доступа к линк порту, которому не назначен буфер или которому назначен заблокированный буфер.
Прерывания 1 и 2 – взаимоисключающие, они используют одно и то же прерывание. Прерывание 3 не зависит от 1 го и 2 го и использует другой вектор прерывания. Прерывания всех типов подробно описаны ниже.
9.6.1. Прерывания линк-порта при запрещенном DMA
Если DMA через буфер линк портов запрещен, то буфер может записываться или считываться ядром процессора ADSP 2106x как отображенный в памяти регистр IOP.
322
Линк-порты 9
Если DMA запрещен, но соответствующий буфер линк портов активизирован, то генерируется маскируемое прерывание, когда приемный буфер не пустой или когда передающий буфер не полный.
Бит фиксирования прерывания в IRPTL может маскироваться соответствующим битом регистра IMASK. Когда прерывание разрешается битом в IMASK, соответствующий бит в IRPTL должен сначала обнуляться, чтобы очистить любой запрос прерывания, который мог быть ранее зафиксирован.
Программа обработки прерывания должна проверять состояние буфера после каждого чтения или записи, чтобы определить, полный буфер или пустой. Это нужно для определения момента выхода из прерывания. Такой подход снижает количество прерываний, которые программа должна обработать.
9.6.2. Прерывание линк-порта при разрешенном DMA
Прерывание линк порта генерируется после завершения операции DMA, т. е. когда выполнена передача блока данных и содержимое регистра счетчика DMA равно нулю.
Существует возможность посылки дополнительной управляющей информации в конце передачи блока. Из за того, что приемный буфер DMA после завершения передачи блока пустой, внешний ведущий может послать два дополнительных слова в буфер ведомого ADSP 2106x, в котором есть место для двух слов. Выполняемая в ведомом программа обработки прерывания DMA считает буфер и использует эти управляющие слова для определения дальнейших действий.
9.6.3. Прерывание запроса обслуживания линк&порта (LSRQ)
Запрос обслуживания линк порта дает возможность заблокированному линк порту (для которого не назначен буфер или назначен заблокированный буфер) генерировать прерывание при попытке внешнего доступа. Биты состояния запроса приема и передачи в регистре LSRQ (биты 20 31) позволяют процессору ADSP 2106x определить, пытается ли другой процессор ADSP 2106x послать или принять данные через соответствующий линк порт. Это дает возможность двум процессорам связываться без предварительного информирования о направлении передачи, номере линк порта или без точных сведений о том, когда будет произведена передача.
Когда LxACK или LxCLK выставляются внешним устройством, генерируется запрос обслуживания линк порта (LSR – Link Service Request) в заблокированном линк порту (для которого не назначен буфер или назначен заблокированный буфер). LSR не генерируется для линк порта, который заблокирован из за работы в циклическом режиме. Каждый LSR маскируется
323
9 Линк-порты
битами маски до его фиксации в регистре LSRQ. Шесть возможных LSR для приема и шесть возможных LSR для передачи объединяются по схеме «монтажное ИЛИ» для генерации прерывания запроса обслуживания линк порта. Запрос прерывания LSRQ может быть маскирован битом маски LSRQI в регистре IMASK. Когда бит маски установлен, прерывания могут проходить в устройство определения приоритета прерывания. Блок схема этой логики показана на рис. 9.5а.
Программа обработки прерывания должна считывать регистр LSRQ для определения номера линк порта, который надо обслужить, и типа запроса – передача или прием.
Прерывания LSR имеют задержку два цикла. Заметим, что прерывание запроса обслуживания линк порта отличается от прерываний приема и передачи линк порта.
32 разрядный регистр LSRQ содержит маскируемые биты состояния запроса приема или передачи для каждого линк порта и соответствующие биты маски прерывания. Бит состояния линк порта устанавливается, когда порт заблокирован и выставлен (высокий уровень) один из сигналов LxACK или LxCLK. Биты состояния LSRQ только для чтения. В табл. 9.5 и на рис. 9.6 показаны биты регистра LSRQ.
Чтобы определить, какой линк порт надо обслужить, передайте содержимое регистра LSRQ в регистр Rx (в регистровый файл), используя команду обнаружения начальных нулей (Rn=LEFTZ Rx). Rn укажет активизированные линк порты в порядке приоритета.
Если используются запросы обслуживания линк порта, то они должны маскироваться при активизации и блокировании буферов, назначенных линк порту, или при блокировании линк порта в регистре LAR, в противном случае могут генерироваться ложные запросы обслуживания.
Рис. 9.5а. Логическая схема для прерываний линк-порта
324
Линк-порты 9
Необходимость этого маскирования возникает из за задержки «подтягивания» к земле (если оно разрешено) сигналов LxCLK или LxACK (если они были выставлены) или из за задержки при выполнении сброса этих сигналов внешним устройством ниже логического порога (если «подтягивание» запрещено). При опросе этих сигналов в течение этой задержки определяется, что они выставлены, в результате чего генерируется LSRQ.
Чтобы устранить возможность возникновения ложных прерываний, маскируйте прерывание LSRQ или соответствующий бит запроса в регистре LSRQ и обеспечьте соответствующую задержку перед демаскированием этого прерывания. С другой стороны, маскируйте прерывание LSRQ и опрашивайте соответствующий бит состояния запроса до тех пор, пока он не будет очищен, а затем демаскируйте прерывание.
Бит |
Имя |
Описание |
0 3 |
|
Зарезервированы |
4 |
L0TM |
Маска передачи линк порта 0 |
5 |
L0RM |
Маска приема линк порта 0 |
6 |
L1TM |
Маска передачи линк порта 1 |
7 |
L1RM |
Маска приема линк порта 1 |
8 |
L2TM |
Маска передачи линк порта 2 |
9 |
L2RM |
Маска приема линк порта 2 |
10 |
L3TM |
Маска передачи линк порта 3 |
11 |
L3RM |
Маска приема линк порта 3 |
12 |
L4TM |
Маска передачи линк порта 4 |
13 |
L4RM |
Маска приема линк порта 4 |
14 |
L5TM |
Маска передачи линк порта 5 |
15 |
L5RM |
Маска приема линк порта 5 |
16 19 |
|
Зарезервированы |
20 |
L0TRQ |
Состояние запроса передачи линк порта 0 (только для чтения) |
21 |
L0RRQ |
Состояние запроса приема линк порта 0 (только для чтения) |
22 |
L1TRQ |
Состояние запроса передачи линк порта 1 (только для чтения) |
23 |
L1RRQ |
Состояние запроса приема линк порта 1 (только для чтения) |
24 |
L2TRQ |
Состояние запроса передачи линк порта 2 (только для чтения) |
25 |
L2RRQ |
Состояние запроса приема линк порта 2 (только для чтения) |
26 |
L3TRQ |
Состояние запроса передачи линк порта 3 (только для чтения) |
27 |
L3RRQ |
Состояние запроса приема линк порта 3 (только для чтения) |
28 |
L4TRQ |
Состояние запроса передачи линк порта 4 (только для чтения) |
29 |
L4RRQ |
Состояние запроса приема линк порта 4 (только для чтения) |
30 |
L5TRQ |
Состояние запроса передачи линк порта 5 (только для чтения) |
31 |
L5RRQ |
Состояние запроса приема линк порта 5 (только для чтения) |
Таблица 9.5. Регистр запроса обслуживания линк-порта (LSRQ)
Для битов состояния запроса передачи LxTRQ=1 означает, что LxACK=1, LxTM=1 и LxEN=0. Для битов состояния запроса приема LxRRQ=1 означает, что LxCLK=1, LxRM=1 и LxEN=0.
325
9 Линк-порты
Рис. 9.6. Регистр LSRQ
9.7. Обнаружение ошибок при передаче
Ошибки при передаче через линк порты могут быть определены путем считывания битов LRERRx в регистре LCOM. Эти биты отражают состояние каждого счетчика полубайтов. Бит LRERRx будет равен 0, если содержимое счетчика упаковки соответствующего буфера линк портов равно 0 (т. е. последовательность из 8 или 12 полубайтов была принята). Если бит LRERRx равен 1 после выполнения передачи, то это означает, что в течение передачи произошла ошибка (заметим, что счетчик слов DMA обеспечивает точное количество слов, которое должно быть передано).
326
Линк-порты 9
Для проверки этого состояния передатчик и приемник должны следовать одному из описанных ниже протоколов:
Протокол передатчика – для использования состояния LRERRx в конце передачи каждого блока должно всегда передаваться одно дополнительное фиктивное слово. Затем передатчик должен перевыбрать линк порт, чтобы позволить приемнику послать соответствующее сообщение назад в передатчик.
Протокол приемника – когда приемник принял блок данных, указав на это прерыванием DMA выполнен, он проверяет, принял ли он дополнительное слово в буфер линк портов, а затем считывает бит LRERRx. Далее приемник может очистить буфер линк портов (LxEN=0) и передать соответствующее сообщение назад в передатчик по тому же или другому линк порту.
9.8. Передача маркера
Если два процессора связываются через линк порт, то необходимо определить передатчик и приемник. В противном случае возможна попытка одновременной передачи. Передача маркера – это способ решения этой проблемы. На рис. 9.7 показана диаграмма процесса передачи маркера.
Передача маркера – это способ определения текущего передатчика в системе из двух ADSP 2106x. Маркер – это программный флаг, похожий на семафор, который передается между процессорами. После сброса маркер (флаг) принадлежит одному из устройств, что делает его ведущим и передатчиком. Когда линк порт приемника (ведомого) хочет стать ведущим, он может выставить сигнал на линии LxACK (запрос данных), чтобы привлечь внимание ведущего. В соответствии с программным протоколом ведущий определит, нужно ли ему отвечать на сигнал передачей данных или у него запрашивают маркер.
Если ведущий желает отдать маркер, он может послать назад определяемое пользователем слово освобождения маркера и впоследствии сбросить свой флаг маркера. Одновременно ведомый проверяет посланные назад данные, и, если они являются словом освобождения маркера, он устанавливает свой маркер и после этого начинает передачу. Если принятые данные не являются словом освобождения маркера, ведомый должен предположить, что ведущий начал новую передачу.
Ведущий может также запросить прием данных согласно программному протоколу, посылая слово освобождения маркера вместо того, чтобы сначала сбросить LxACK (запрос данных).
327
9 Линк-порты
Рис. 9.7. Диаграмма передачи маркера
Замечания:
Слово освобождения маркера (TRW – Token Release Word) может быть любым значением, определяемым пользователем. Так как и приемник, и передатчик ожидают кодового слова, нет необходимости, чтобы оно было исключением из обычно передаваемых данных.
328
Линк-порты 9
Пример программного протокола для передачи маркера через линк порты приведен в конце этой главы. На рис. 9.7 приведена диаграмма кода примера, а далее идет описание процесса:
Код примера загружается и в первоначально ведущего, и в первоначально ведомого. Код идентификатора (ID) является значимым в многопроцессорной системе: ID1 – это первоначально ведущий (передатчик), ID2 – первоначально ведомый (приемник). Ведущий передает данные из буфера по DMA через LPORT0, используя LBUF3, а ведомый принимает через LPORT0, используя LBUF2. Затем ведомый запрашивает маркер, генерируя прерывание LSRQ в заблокированном линк порте ведущего (LPORT0). Ведущий посылает слово освобождения маркера и ждет, пока оно не будет принято. Ведомый проверяет, является ли оно словом освобождения маркера, и принимает маркер, освобождая FIFO буфера линк портов ведущего в течение предопределенного времени. Если маркер принят, ведомый становится ведущим и передает данные из буфера новому ведомому. Если маркер возвращен, первоначальный ведущий будет передавать данные из второго буфера. После окончания передачи первоначальный ведущий настраивает LBUF2 на прием без DMA, первоначальный ведомый настраивает LBUF3 на передачу без DMA.
Далее описаны несколько основных важных моментов, требующих особого внимания при реализации программного протокола передачи маркера.
♦Необходимо, чтобы оба буфера линк портов не были настроены на передачу в одно время. Если это случилось, то данные могут быть переданы и потеряны из за того, что ни один линк порт не будет управлять LxACK. В примере, приведенном в конце главы, опрашиваются биты регистра состояния LSRQ, чтобы гарантировать, что ведущий становится ведомым до того, как ведомый становится ведущим. Т. о., предотвращается конфликт двух передатчиков.
♦Необходимо, чтобы выбор прерывания линк порта соответствовал приложению. Если используется схема определения состояния, проверяющая биты состояния регистра LSRQ, важно следующее: если настроенный на прием линк порт блокируется в то время, как LxACK выставлен, то будет возникать определяемая RC задержка перед тем, как резистор номиналом
50 КОм на LxACK (если подключен) сможет понизить уровень сигнала ниже логического порога. Аналогично, если настроенный на передачу линк порт блокируется в то время, как LxCLK выставлен, тогда будет возникать определяемая RC задержка перед тем, как резистор номиналом 50 КОм на LxCLK (если подключен) сможет понизить уровень сигнала ниже логического порога. Если в этот момент соответствующий бит состояния запроса в регистре LSRQ не маскирован, то будет зафиксирован LSR – и прерывание LSRQ может обслуживаться, даже если его генерация не планировалась.
329
9 Линк-порты
♦Необходимо, чтобы синхронизация двух параллельно выполняющихся кодов (в передатчике и приемнике) не нарушалась из за помех. Запрещение вложенных прерываний – один из методов, используемых в примере, чтобы реализовать это.
9.9. Линии передачи линк-порта
Линк порты разработаны для обеспечения связи между управляющим устройством и приемником на больших расстояниях. Это реализуется тем, что линк порты синхронизируются самостоятельно, т. е. сигнал тактовой синхронизации и данные передаются вместе. Важной является не абсолютная, а только относительная задержка между сигналом тактовой синхронизации и данными.
Кроме того, сигнал LACK может запрещать передачу следующего слова, но не текущего полубайта (т. е. текущее слово всегда будет передано или принято). Это позволяет сигналу LxACK достигать передатчика с задержкой в 2 или 3 цикла.
Линк порты спроектированы для передачи данных по линиям с характеристическим сопротивлением 50 Ом и выше. Более высокое сопротивление линии передачи снижает эффект изменения сопротивления драйвера для расстояний больше шести дюймов. Рекомендуется использовать внешние наборы нагрузочных резисторов на каждом выводе линк порта, чтобы исключить отражения от открытого конца линии в адресате. Внешний резистор должен выбираться таким образом, чтобы его величина плюс внутреннее сопротивление драйвера равнялась характеристическому сопротивлению линии передачи.
Таким образом, если обычное внутреннее сопротивление драйвера 10 Ом, а характеристическое сопротивление 50 Ом, то резистор на выводе линк порта должен быть 40 Ом.
9.10. Пример проектирования системы: интерфейс с локальной DRAM
На рис. 9.8 изображен пример многопроцессорной системы, в которой линк порты используются для подсоединения локальной памяти и устройств ввода вывода. Специализированная интегральная схема (ASIC) выполняет роль интерфейса между линк портом и DRAM или IOP. Такое аппаратное решение освобождает внешнюю шину ADSP 2106x для обеспечения других соединений в схеме с общей шиной. DRAM и ASIC могут реализовываться в едином модуле SIMM с 10 выводами.
330
