Архитектура и принципы функционирования линк-портов (звеньевых портов) ADSP-2106x. Регистры управления работой линк-портов ADSP-2106x. Связь между линк-буферами и линк-портами.
Архитектура и принципы функционирования линк-портов и линк-буферов
Каждый линк-порт состоит из четырех двунаправленных линий данных LxDAT3-0 и двух линий взаимодействия: тактирования (LxCLK) и подтверждения (LxACK). Линии LxCLK и LxACK позволяют осуществлять асинхронную передачу данных. Когда порт сконфигурирован на передачу, он управляет линиями данных и линией LxCLK. Если порт настроен на прием, он управляет только линией LxACK (рис. 4).
Рис.4
Посредством регистра LAR с каждым из шести линк-портов может быть связан один из шести линк-буферов (LBUF0-LBUF5)[12]. Линк-буфер включает в себя два регистра (рис. 5).
При передаче данных внутренний регистр используется для получения из внутренней памяти слова данных либо при выполнении DMA-пересылки, либо при непосредственной записи слова в буферный регистр инструкцией процессорного ядра. Внешний регистр выполняет передачу слов через линк-порт группами по 4 бита, начиная со старших битов. Таким образом, эти два регистра образуют двухуровневую FIFO-структуру. Когда передача слова завершена, выполняется сдвиг следующего слова из внутреннего регистра во внешний, устанавливается состояние "буфер неполон" в поле статуса линк-буфера LxSTAT в регистре LCOM и генерируется либо запрос на DMA-пересылку очередного слова (если DMA-пересылка для данного линк-буфера включена), либо маскируемое прерывание от линк-буфера. Если передающий регистр пуст (следующее слово не готово для передачи), то линк-порт снимает свой сигнал LxCLK и приостанавливает передачу данных.
Рис. 5
Во время приема внешний регистр используется для упаковки получаемых данных в 32- или 48-разрядные слова, начиная со старшей 4-битовой группы (разрядность передаваемых/принимаемых слов определяется полем LEXT в регистре управления LCTL). По окончании формирования слово передается во внутренний регистр для передачи его во внутреннюю память посредством DMA-пересылки или чтения процессорным ядром. Если данные не были вовремя прочитаны и двухуровневый FIFO-буфер оказался заполненным, линк-порт снимает свой сигнал подтверждения приема LxACK приостанавливает прием данных.
Передаваемое/принимаемое линк-портом слово состоит из 8 или 12 полубайтов (соответственно для 32- и 48-разрядных слов). Передающий линк-порт устанавливает активный уровень сигнала тактовой синхронизации LxCLK при передаче каждого полубайта. Задний фронт сигнала LxCLK используется приемником для защелкивания, полученного полубайта. Приемник выставляет активный уровень на линию LxACK, когда он готов для приема очередного слова (т.е. после приема каждых 8 или 12 полубайтов). Передающий порт проверяет состояние линии LxACK только в начале передачи каждого слова данных. Если в этот момент сигнал LxACK имеет неактивный уровень, передающий порт не начинает передачу следующего слова, а продолжает удерживать высокий уровень на линии LxCLK и первую 4-битовую группу данных на линии данных. После получения сигнала подтверждения LxACK процессор периодически чередует на линии LxCLK низкий и высокий уровень и выполняет передачу очередного слова. Если передающий буфер пуст, сигнал LxCLK имеет низкий уровень независимо от состояния линии LxACK.
Приемный буфер может заполниться вследствие того, что DMA-каналы, связанные с линк-буферами, могут иметь более низкий приоритет по сравнению, например, с DMA-каналами последовательных портов или операцией цепочечной загрузки DMA. Поэтому для предотвращения переполнения буфера приемный линк-порт может снять свой сигнал LxACK. Естественно, что как только линк-буфер получает право использования шины ввода/вывода, происходит пересылка принятого слова внутреннюю память (и, таким образом, освобождение места в приемном буфере), и приемник вновь выставляет высокий уровень на линию LxACK.
Следует обратить внимание на то, что сигнал LxACK влияет только на то, когда передающая сторона начнет передавать следующее слово. Полубайты текущего слова будут продолжать защелкиваться приемной стороной независимо от уровня сигнала LxACK.
Поскольку данные защелкиваются приемником по заднему фронту сигнала LxCLK, то операция приема является по сути своей асинхронной и может происходить на любой частоте вплоть до удвоенной частоты процессора. Если частота приема меньше тактовой частоты процессора CLKIN, то бит LCLKX2x в регистре управления LCOM для соответствующего линк-буфера должен быть сброшен. Если же частота приема лежит в интервале от CLKIN до 2*CLKIN, то бит LCLKX2x должен быть установлен. Это вызовет изменение поля состояния буфера (и генерацию соответствующего DMA-запроса на предоставление шины) не после 8-го/12-го, а после приема 6-го/10-го полубайта. Переключение бита LCLKX2x во время передачи слова может привести к непредсказуемым последствиям.
Примечание. Когда линк-порт запрещен, линии LxDAT3-0, LxCLK, LxACK находятся в неопределенном состоянии. Когда разрешена передача через порт, то линк-порт управляет линиями данных LxDAT3-0, на линии LxCLK удерживается высокий уровень, а LxACK находится в третьем состоянии. Если порт разрешен для приема данных, то линии данных и LxCLK находятся в третьем состоянии, а на линии LxACK удерживается высокий уровень.