Руководство пользователя по сигнальным процессорам Sharc
.pdfХост-интерфейс 8
Когда выполняется цикл записи во внутреннюю память, данные предыдущей записи пересылаются из FIFO в память, а новые данные загружаются в FIFO. Эта операция обычно никак себя не проявляет, т. к. любое чтение последних двух записей прерывается и выполняется не из памяти , а из FIFO. Есть только один случай, когда вам нужно принимать во внимание FIFO теневой записи – при обращении к смешанным 48 разрядным и 32 разрядным словам по одинаковому адресу.
FIFO теневой записи не может различать между отображением в память 48 разрядных и 32 разрядных слов (см. рис. 5.8 и рис. 5.9 в главе Память). Т. о., если вы записываете 48 разрядное слово в память, а затем делаете попытку прочитать данные, как при обращении к 32 разрядному слову, FIFO теневой записи не прервет чтение и будут возвращены неправильные данные.
Если 48 разрядная запись и 32 разрядное чтение одного и того же участка памяти непременно должны следовать друг за другом именно в таком порядке, то перед попыткой считывания данных вы должны очистить FIFO теневой записи с помощью двух фиктивных записей.
8.4. Передача данных через буферы EPBx
Хост процессор, помимо прямых чтения и записи, может осуществлять обмен данными с ADSP 2106х через буферы FIFO внешнего порта – EPB0, EPB1, EPB2 и EPB3. Каждый из этих буферов, входящих в набор регистров IOP, представляет собой 6 уровневый буфер FIFO. Через буферы EPBx могут выполняться передачи одного слова и передачи по DMA. Передачи по DMA обрабатываются контроллером DMA ADSP 2106х, тогда как передачи по словам должны обрабатываться ядром ADSP 2106х.
Все буферы EPBx имеют порт чтения и порт записи, каждый из которых может подключаться внутри к шине данных внешнего порта (EPD – External Port Data) или к локальной шине, которая по очереди может соединяться с шиной данных ввода вывода (IOD – Input/Output Data), шиной данных PM или шиной данных DM. Это показано на рис. 8.1. Заметим, что прямые чтение и запись минуют буферы EPBx и обращаются непосредственно к внутренней памяти.
8.4.1. Передача одного слова данных
Когда хост процессор записывает одно слово данных в буферы EPBx, программа ядра процессора ADSP 2106х должна считать данные. И наоборот, когда ядро процессора ADSP 2106х записывает одиночный фрагмент данных в один из буферов EPBx, хост процессор должен выполнить цикл внешнего чтения.
281
8 Хост-интерфейс
Поскольку буферы EPBx состоят из шести ячеек FIFO (в обоих направлениях), хост процессор и ядро процессора ADSP 2106х получают дополнительное время для чтения данных. Таким образом, эффективные непрерывные передачи данных по словам могут выполняться в реальном времени с малыми временными задержками и без использования DMA.
Если хост процессор попытается считать данные из пустого буфера EPBx, обращение будет задержано сигналом ACK (для синхронного чтения) или REDY (для асинхронного) до тех пор, пока ядро процессора ADSP 2106х не поместит данные в буфер. Если ядро процессора ADSP 2106х попытается записать данные в заполненный буфер EPBx, обращение также будет отложено и ядро процессора «зависнет» на время, пока хост процессор не считает данные из буфера. Для предотвращения подобных ситуаций следует установить в 1 бит BHD (Buffer Hang Disable, запрет «зависания» буфера) в регистре SYSCON. Состояние каждого буфера EPBx (полный или пустой) может быть определено чтением соответствующего регистра управления/состояния DMACx.
Аналогично, если хост процессор предпримет попытку записи в полный буфер EPBx, обращение будет отложено сигналом ACK (или REDY) до тех пор, пока ядро процессора ADSP 2106х не начнет считывать данные из буфера. Если ядро процессора попытается считать данные из пустого буфера, обращение также будет отложено и процессор «зависнет» на время, пока хост процессор не запишет данные в буфер. Бит BHD и в этом случае может использоваться для предотвращения условий, приводящих к зависанию.
Каждый буфер EPBx может быть очищен записью 1 в бит FLSH соответствующего регистра управления DMACx. Этот бит не фиксируется и будет всегда считываться как 0. Состояние буфера может измениться в следующем цикле. Буфер EPBx нельзя разрешать и обнулять в одном цикле.
При необходимости использования упаковки и распаковки одиночных слов данных следует задать режим упаковки, определяемый битами PMODE в регистрах управления буферами EPBx (DMAC6, DMAC7, DMAC8, и DMAC9). Может быть выбран любой из следующих режимов упаковки/распаковки: 16→32, 16→48 или 32→48 бит. Разрядность внешней шины хост процессора, определяемая битами режима упаковки передач хост процессора (HPM, Host Packing Mode) в SYSCON, должна соответствовать разрядности внешнего слова, определяемой битами PMODE.
Если для передачи одного слова данных используется любой из трех режимов упаковки, следует также соответствующим образом установить бит TRAN в регистрах управления DMACx. Для чтения хост процессором из буфера EPBx следует устанавливать TRAN = 1, для записи хост процессором в буфер EPBx – TRAN = 0.
282
Хост-интерфейс 8
Замечание: Для выполнения передачи одного слова данных через буферы EPBx без использования DMA следует обнулить бит DEN (DMA Enable, Разрешение DMA) в соответствующем регистре управления DMACx.
8.4.1.1. Прерывания при передаче одного слова данных
Для управления передачей одного слова данных между хост процессором и ядром процессора ADSP 2106х могут использоваться прерывания четырех каналов DMA внешнего порта. Для этого в соответствующем регистре управления DMACx следует установить DEN=0 и INTIO=1. Это запрещает передачу DMA (DEN=0) и разрешает управляемый прерываниями ввод вывод (INTIO=1). Полное описание регистров управления DMACx см. в главе DMA или в приложении Регистры управления/состояния данного руководства.
В этом случае прерывание генерируется всякий раз, когда становятся доступными данные в порту чтения буфера EPBx, или всякий раз, когда порт записи не имеет данных для передачи. Буфер EPBx затем может быть считан или заполнен либо ядром процессора ADSP 2106х, либо внешним устройством, таким как хост процессор. Подобная генерация прерываний используется для осуществляемого ядром процессора ADSP 2106х управляемого прерываниями ввода вывода.
Это прерывание может маскироваться (т. е. запрещаться) в регистре IMASK. Если прерывание позже демаскируется в IMASK, соответствующий бит фиксации в регистре IRPTL должен быть сброшен, чтобы очистить любой запрос прерывания, который мог произойти ранее.
8.4.2. Передачи по DMA
Хост процессор может также настраивать режим передачи по DMA в ADSP 2106х и из него. Получив контроль над ADSP 2106x, хост процессор может обращаться к регистрам управления и регистрам параметров DMA для установки режима передач по DMA через внешний порт. Это наиболее эффективный способ передачи блоков данных.
♦Передачи DMA во внутреннюю память. Хост процессор может настраивать каналы DMA внешнего порта на передачу данных во внутреннюю память ADSP 2106х и из нее.
♦Передачи DMA во внешнюю память. Хост процессор может настраивать каналы DMA внешнего порта на передачу данных непосредственно во внешнюю память, используя линии запроса и предоставления DMA
(
и
).
Подробнее о настройке операций DMA см. в главе DMA этого руководства.
283
8 Хост-интерфейс
8.4.2.1. Передачи DMA во внутреннюю память
Хост процессор может настраивать каналы DMA внешнего порта для передачи блоков данных во внутреннюю память ADSP 2106x и из нее. Для настройки передач по DMA хост процессор должен инициализировать регистры управления и параметров этого канала. Как только параметры канала DMA заданы, хост процессор может просто считывать (записывать) данные из соответствующего буфера EPBx. Если буфер пуст (полон), обращение продлевается до тех пор, пока данные не появятся (не сохранятся). Этот метод обеспечивает быструю и эффективную передачу данных.
При необходимости использования упаковки и распаковки одиночных слов данных следует задать режим упаковки, определяемый битами PMODE в регистрах управления буферами EPBx (DMAC6, DMAC7, DMAC8 и DMAC9). Может быть выбран любой из следующих режимов упаковки/распаковки: 16→32, 16→48 или 32→48 бит. Разрядность внешней шины хост процессора, которую определяют биты режима упаковки хост процессора (HPM, Host Packing Mode) в SYSCON, должна соответствовать разрядности внешнего слова, определяемой битами PMODE.
Хост процессор может также использовать для передач по DMA сигналы квитирования
/
, но только не в том случае, когда
использовался для получения контроля над шиной.
8.4.2.2. Передачи по DMA во внешнюю память
Контроллер DMA ADSP 2106х может также использоваться для передачи данных от хост процессора непосредственно во внешнюю память. Внешний режим с квитированием для каналов 7 или 8 DMA внешнего порта обеспечивает
сигналы квитирования
/
для этого типа передачи. Как и для
передач во внутреннюю память,
не должен использоваться для получения
контроля над шиной. При передачах этого типа не может осуществляться упаковка данных, т. к. данные минуют ADSP 2106x.
8.5. Упаковка данных
Хост интерфейс имеет логическую схему упаковки данных, позволяющую упаковывать 16 или 32 разрядные слова внешней шины хост процессора в 32 х или 48 разрядные внутренние слова. Логика упаковки полностью обратима, так что 32 и 48 разрядные внутренние данные могут быть распакованы в 16 и 32 разрядные внешние слова. Для выбора режима упаковки при синхронной и асинхронной передачах хост процессора используется регистр SYSCON.
284
Хост-интерфейс 8
8.5.1. Биты управления упаковкой в регистре SYSCON
В табл. 8.3 приведены биты регистра SYSCON, управляющие режимом упаковки хост процессора и разрядностью слов памяти. После сброса регистр SYSCON инициализируется числом 0x0000 0010, поэтому ADSP 2106х присваивает хост процессору 16 разрядную шину. Для изменения этой установки в SYSCON должны быть записаны два 16 разрядных слова (в биты HPM), даже если шина хост процессора имеет 32 разряда.
Имя бита |
Определение |
IWT |
Передача командного слова (1=48 разрядная команда, 0=32 разрядные |
|
данные) |
HPM* |
Режим упаковки при передачах хост процессора |
|
(00=нет упаковки, 01=16→32, 10=16→48, 11=32→48) |
HMSWF |
Порядок упаковки, MSW упаковывается первым |
|
(1=первым упаковывается MSW, 0=первым упаковывается LSW) |
HPFLSH |
Сброс режима упаковки при передачах хост процессора |
IMDW0 |
Разрядность данных блока 0 внутренней памяти (0=32, 1=40) |
IMDW1 |
Разрядность данных блока 1 внутренней памяти (0=32, 1=40) |
Таблица 8.3. Биты управления упаковкой в SYSCON при передачах хост-процессора
* Если хост процессор производит чтение или запись буферов данных внешнего порта (EPB0, EPB1, EPB2 или EPB3), разрядность внешней шины хост процессора, выбранная в HPM, должна соответствовать разрядности внешнего слова, определяемой битами PMODE в регистрах управления DMACx (DMAC6, DMAC7, DMAC8 и DMAC9).
IWT |
Передача командного слова (Instruction Word Transfer). Определяет |
|
разрядность слова при прямых обращениях к внутренней памяти |
|
ADSP 2106х (другими ADSP 2106х или хост процессором). IWT=1 |
|
отменяет действие битов IMDW (см. ниже) и принудительно задает 48 |
|
разрядную (в 3 столбца) передачу данных. При IWT=0 конфигурация |
|
слова данных определяется битами IMDW в регистре SYSCON. IWT |
|
должен устанавливаться всякий раз, когда ведущий ADSP 2106х или |
|
хост процессор читает или записывает команды из (этого) ADSP |
|
2106х. |
|
1 = 48 разрядные слова при прямом чтении/записи |
|
0 = 32 разрядные слова при прямом чтении/записи |
HPM |
Режим упаковки при передачах хост&процессора (Host Packing Mode). |
|
Определяет разрядность внутреннего слова и внешней шины хост |
|
процессора для выполнения передач хост процессора во внутреннюю |
|
память ADSP 2106х или регистры IOP. Если хост процессор производит |
285
8 Хост-интерфейс
Рис. 8.4. Регистр SYSCON
чтение или запись любого регистра IOP, кроме буферов FIFO внешнего порта (EPB0 EPB3) или буферов линк портов (LBUF0 LBUF5), разрядность слова всегда будет 32 бита независимо от того, какова разрядность шины хост процессора. Если хост процессор осуществляет чтение или запись буферов линк портов, разрядность слова определяется только HPM, а не битом LEXT в регистре LCTL.
00 = нет упаковки. Максимальная разрядность шины – 32 бита для асинхронных передач. Младшие 16 бит 48 разрядной шины данных будут записываться и считываться как нулевые, даже при чтении 48 разрядных слов. Для синхронных передач шина хост процессора должна быть 32 бита при передаче данных или 48 бит при передаче командных слов. Примечание: для чтения и записи 48 разрядных слов из внутренней памяти следует установить в 1 бит IWT или бит IMDW для того блока памяти, к которому осуществляется обращение.
по умолчанию после сброса:
01 = 16&разрядная шина хост&процессора, 32&разрядные слова. Шина хост процессора будет 16 бит, любое обращение к памяти – как к 32 разрядному слову. Замечание: Если происходит обращение к блоку
286
Хост-интерфейс 8
внутренней памяти ADSP 2106х, для которого бит IMDW установлен в 1, будут читаться или записываться старшие 32 бита 48 разрядного слова.
10 = 16&разрядная шина хост&процессора, 48&разрядные слова. Шина хост процессора будет 16 бит, любое обращение к памяти – как к 48 разрядному слову.
11 = 32&разрядная шина хост&процессора, 48&разрядные слова. Шина хост процессора будет 32 бита; любое обращение к памяти – как к 48 разрядному слову.
HMSWF Порядок упаковки при передачах хост&процессора (Host Packing Order). Определяет порядок упаковки слов, с которыми работает хост процессор, для режимов упаковки 16®32 и 16®48. При упаковке 32®48 HMSWF игнорируется. Если HMSWF = 1, первым упаковывается MSW (старшее 16 разрядное слово). Если HMSWF = 0, первым упаковывается LSW (младшее 16 разрядное слово).
1 = первым упаковывается MSW
0 = первым упаковывается LSW
HPFLSH Сброс состояния упаковки при передачах хост&процессора (Host Packing Status Flush). Сбрасывает состояние упаковки при передачах хост процессора. Пока происходит запись бита HPFLSH ядром процессора ADSP 2106х, обращения хост процессора происходить не должны. Существует время срабатывания два цикла, прежде чем сброс даст эффект, после чего хост процессор может возобновить нормальную работу. Примечание: HPFLSH всегда читается как 0.
1 = Сброс состояния упаковки хост процессора
IMDWx Разрядность блоков данных внутренней памяти (Internal Memory Block Data Width). Устанавливает разрядность слова данных для каждого из блоков внутренней памяти. Для 32 разрядных слов данных установите IMDWx в 0. Для 40 разрядных данных (пересылаемых внутри 48 разрядного слова) установите IMDWx в 1. IMDW0 (бит 8 в SYSCON) задает разрядность слова данных для блока 0 памяти, IMDW1 (бит 9) для блока 1. Примечание: 48 разрядные команды могут храниться в блоке памяти независимо от установки бита IMDW. Более полно этот вопрос рассматривается в разделе «Конфигурирование памяти для 32 или 40 разрядных данных» главы Память данного руководства.
0 = 32 разрядные данные
1 = 40 разрядные данные
287
8 Хост-интерфейс
Помимо битов HPM, на режим упаковки также влияет установка битов PMODE в регистрах управления DMACx каждого буфера внешнего порта (регистры DMAC6, DMAC7, DMAC8 и DMAC9, соответствующие буферам EPB0, EPB1, EPB2 и EPB3):
PMODE |
Режим упаковки |
00 |
нет упаковки/распаковки |
01упаковка 16 разрядных слов внешней шины в\из 32 разрядные слова внутренней шины
10упаковка 16 разрядных слов внешней шины в\из 48 разрядные слова внутренней шины
11упаковка 32 разрядных слов внешней шины в\из 48 разрядные слова внутренней шины
HPM и PMODE должны устанавливать одну и ту же разрядность внешней шины для обмена данными хост процессора с ADSP 2106х!
Например, если HPM=11, что соответствует 32 разрядной шине хост процессора, то PMODE также следует установить в 11. Если HPM установлен 01 или 10, что соответствует 16 разрядной шине хост процессора, то PMODE может быть 01 или 10.
Если при передаче одного слова данных без DMA через буфер EPBx используется любой из трех режимов упаковки, то в регистре управления DMACx должен быть соответствующим образом установлен бит TRAN. Установите TRAN=1 для чтения хост процессором из буфера EPBx, TRAN=0 – для записи хост процессором в буфер.
Для изменения режима упаковки при передачах хост процессора необходимо:
1.Записать в регистр SYSCON требуемое значение HPM.
2.Считать SYSCON, чтобы убедиться в завершении записи.
3.Повторно записать данные в SYSCON (чтобы очистить чтение, так как оно может происходить еще при прежнем режиме упаковки).
4.Подождать 4 цикла.
Во время обмена упакованными данными между ADSP 2106x и медленным хост процессором последний может оставить управление шиной до окончания упаковки текущего слова – в этом случае шина высвобождается после записи
первой части слова и затем, некоторое время спустя, снова выставляется
и
происходит запись второй части слова. Такой подход, например, может позволить другому процессору записывать в данный ADSP 2106х без выполнения операций упаковки данных.
288
Хост-интерфейс 8
8.5.2. Линии шины данных, используемые при различных режимах упаковки
В табл. 8.4 показано, какие линии шины данных используются при различных разрядности шины хост процессора и режимах упаковки. Если разрядность шины 32 бита и при выполнении асинхронных передач выбран режим нет упаковки, ADSP 2106х при вводе данных будет игнорировать младшие 16 бит 48 разрядной внешней шины данных; обратите внимание, что это справедливо только для асинхронных передач, но не для синхронных. При выводе данных на 32 разрядную шину хост процессора с распаковкой 48→32 ADSP 2106х обнуляет младшие 16 бит; это справедливо как для асинхронных, так и для синхронных обращений. При выводе данных без упаковки ADSP 2106х сохраняет младшие 16 бит данных без изменений; это верно и для асинхронных, и для синхронных обращений.
Если при 16 разрядной шине хост процессора выбрана упаковка 16→32 или 16→48, ADSP 2106х при вводе данных будет игнорировать младшие и старшие 16 бит 48 разрядной внешней шины данных (как при асинхронных, так и при синхронных передачах). При выводе данных эти биты обнуляются.
Режим |
|
|
упаковки* |
Бит НРМ |
Эффект |
нет упаковки |
00 |
Входные данные: ADSP 2106х игнорирует младшие 16 |
|
|
бит внешней шины (DATA15 0) при 32 разрядной шине |
|
|
хост процессора (только для асинхронных передач). |
|
|
Выходные данные: ADSP 2106х выводит на внешнюю |
|
|
шину (DATA47 0) те же самые слова, что находятся в |
16 → 32 |
|
памяти. |
01 |
Входные данные: ADSP 2106х игнорирует старшие и |
|
|
|
младшие 16 бит внешней шины. |
|
|
Выходные данные: ADSP 2106х обнуляет старшие и |
16 → 48 |
|
младшие 16 бит внешней шины. |
10 |
Аналогично упаковке 16®32. |
|
32 → 48 |
11 |
Входные данные: ADSP 2106х игнорирует младшие 16 |
бит внешней шины (DATA15 0).
Выходные данные: ADSP 2106х обнуляет младшие 16 бит внешней шины.
Таблица 8.4. Линии шины данных, используемые при различных режимах упаковки при передачах хост-процессора
*16 → 32: 16 разрядная шина хост процессора, 32 разрядные слова памяти в ADSP 2106х. 16 → 48: 16 разрядная шина хост процессора, 48 разрядные слова памяти в ADSP 2106х. 32 → 48: 32 разрядная шина хост процессора, 48 разрядные слова памяти в ADSP 2106х.
289
8 Хост-интерфейс
На рис. 8.а показано, как слова данных различных размеров пересылаются через внешний порт.
Рис. 8.а. Выравнивание данных при пересылке через внешний порт
8.5.3. Упаковка 32-разрядных данных
При 16 разрядной шине хост процессора входные данные фиксируются в DATA31 16. Аналогично данные выводятся по DATA31 16 c обнулением остальных линий. Последовательность действий при 32 разрядной упаковке/распаковке для записи и чтения различается, что описывается ниже. При 16 разрядной шине хост процессора конечный формат данных при передаче определяется битом HMSWF регистра SYSCON. Если HMSWF=0, первым будет упаковываться младшее 16 разрядное слово. Если HMSWF=1, первым будет упаковываться старшее 16 разрядное слово.
Когда хост процессор читает 32 разрядное слово при 16 разрядной распаковке, используя стандартные аппаратные средства интерфейса шины, показанные на рис.8.8 в конце этой главы, происходит такая последовательность событий (см. рис. 8.5):
♦Хост процессор инициирует цикл чтения, выводя адрес, выставляя
(если чтение асинхронное) и
(низкий уровень).
♦Выбранный ADSP 2106х сбрасывает REDY, фиксирует адрес и выполняет внутреннее прямое чтение для получения данных.
♦Когда ADSP 2106х получает данные, он выставляет REDY и выводит первое 16 разрядное слово.
♦Хост процессор фиксирует данные и сбрасывает
(высокий уровень).
♦Хост процессор инициирует следующий цикл чтения, выводя адрес данных, к которым обращается, и затем выставляет
.
♦ADSP 2106х передает второе 16 разрядное слово.
290
