Grand master gm s205 professional купить seven-shop.ru. День рождения ребенка в армавире детский день рождения армавир.
Контроллер OHC обеспечивает возможность идентификации со стороны хоста двояко:
Идентифицировать себя со стороны шины IEEE 1394 контроллер позволяет, обеспечивая доступ к своей памяти конфигурации.
На шине PCI контроллер IEEE 1394 с интерфейсом OHCI представляется устройством (функцией) с кодом класса 0Ch (контроллеры последовательных шин), кодом подкласса 00h кодом и интерфейса 10h.
Версия и функциональность OHCI определяются регистром Version (000h, рис. 1, а). Поля version и revision определяют старшую и младшую части номера версии, бит GUID_ROM указывает на реализацию одноименного регистра и автоматическую загрузку уникального идентификатора.
Уникальный идентификатор хранится в энергонезависимой памяти (ПЗУ). В этом ПЗУ содержится описание контроллера в формате, определенном разработчиком. Там же может присутствовать область miniROM со структурами данных, похожими на память конфигурации узла IEEE 1394. Доступ к ПЗУ идентификатора обеспечивает регистр GUID_ROM (004h, рис. 1, б). К данным ПЗУ идентификатора возможен только последовательный доступ. Для получения данных из ПЗУ программа первым делом должна обнулить адрес считывания, установив бит addr-Reset. Сбросом этого бита контроллер сигнализирует о выполнении данной операции. Далее, установкой бита rdStart хост инициирует чтение байта; по завершении чтения бит сбрасывается контроллером и программа может считать данные из поля rdData. Очередная операция чтения инкрементирует внутренний счетчик адреса данных ПЗУ, что позволяет последовательно считать все данные. Поле miniROM определяет положение одноименной области в ПЗУ, нулевое значение поля означает отсутствие структуры MiniROM.
Память конфигурации реализуется отображением ее адресов на блок в памяти хоста; начальная область памяти конфигурации отображается регистрами контроллера. Запросы со стороны шины на чтение памяти конфигурации отрабатываются аппаратно. К памяти конфигурации узла относятся следующие регистры:
Общее управление контроллером обеспечивает регистр HCControl (рис. 2). Отдельные биты регистра устанавливаются и сбрасываются установкой соответствующих бит в регистрах HCControlSet (050h) и HCControlClear (054h). Назначение битов:
Прерывания для процессора хоста вызываются по событиям каналов DMA (асинхронных и изохронных), событиям LINK-уровня и по ошибкам. Для наблюдения и управления источниками прерываний в контроллере имеется регистр запросов и регистр масок прерываний. События, вызывающие аппаратное прерывание процессора хоста, отражаются в регистре IntEvent. Этот регистр считывается через регистр IntEventSet (080h), биты запросов сбрасываются при записи единиц в соответствующие биты регистра IntEventClear (084h). Чтение регистра IntEvent-Clear показывает незамаскированные запросы — результат функции И (IntEvent & IntMask). Маски событий задаются регистром IntMask, установка — через регистр IntMaskSet (088h), сброс — через IntMaskClear (08Ch). Назначение бит регистров запросов и масок раскрыто в таблице.
Бит | Назначение |
0 | reqTxComplete, передача пакета запроса с командой OUTPUT_LAST* |
1 | respTxComplete, передача пакета ответа с командой OUTPUT_LAST* |
2 | ARRQ, завершение команды из контекста AR_Request |
3 | ARRS, завершение команды из контекста AR_Response |
4 | RQPkt, прием пакета в контекст AR_Request |
5 | RSPkt, прием пакета в контекст AR_Response |
6 | isochTx, признак запроса прерываний от какого-либо контекста изохронной передачи |
7 | isochRx, признак запроса прерываний от какого-либо контекста изохронного приема |
8 | postedWriteErr, ошибка отправленной записи |
9 | lockRespErr, невозможность отправки результата блокированной транзакции из-за превышения допустимого числа повторов |
10–14 | Резерв |
15 | selfIDcomplete2, завершение фазы самоидентификации (не обнуляется по сбросу шины) |
16 | selfIDcomplete, завершение фазы самоидентификации (обнуляется по сбросу шины) |
17 | busReset, индикация состояния сброса PHY, при этом запись в регистры фильтров и управляющий регистр контроллера не вызывает никаких эффектов |
18 | regAccessFail, отказ операции обращения к регистрам PHY из-за отсутствия сигнала синхронизации SCLK |
19 | Phy, запрос прерывания от PHY |
20 | cycleSynch, начало нового изохронного цикла (по внутреннему таймеру) |
21 | cycle64Seconds, признак изменения бита 7 счетчика секунд |
22 | cycleLost, признак потери пакета начала цикла (он не принят между двумя событиями cycleSynch) |
23 | cycleInconsistent, признак приема пакета начала цикла, в котором значения полей счетчиков не соответствуют внутреннему таймеру |
24 | unrecoverableError, признак неисправимой ошибки какого-либо блока (например, состояние dead для какого-либо контекста) |
25 | cycleTooLong, слишком длинный изохронный цикл (через 115–120 мкс после начала цикла не встретился зазор для асинхронного арбитража) |
26 | phyRegRcvd, прием байта данных регистра PHY |
27 | ack_tardy, при установленном бите ackTardyEnable регистра HCControl имеет место одно из условий: в приемном FIFO имеются данные для доставки хосту; блок аппаратного ответа занят обслуживанием запроса или посылкой ответа; хост-контроллер послал пакет квитирования ack_tardy |
28 | Резерв |
29 | softInterrupt, программно вызываемое прерывание |
30 | vendorSpecific, специфическое прерывание |
31 | Резерв |
Идентификацию и маскирование контекстов изохронной передачи, вызывающих прерывания, обеспечивают регистры IsoXmitIntEvent и IsoXmitIntMask. Каждый бит этих регистров соответствует событию прерывания и маске для своего контекста изохронной передачи. Все запросы считываются через регистр IsoXmit-IntEventSet (090h); биты запросов сбрасываются при записи единиц в соответствующие биты регистра IsoXmitIntEventClear (094h). Чтение регистра Iso-XmitIntEventClear показывает запросы незамаскированных контекстов. Маски контекстов устанавливаются через регистр IsoXmitIntMaskSet (098h), сбрасываются — через IsoXmitIntMaskClear (09Ch).
Идентификацию и маскирование контекстов изохронного приема, вызывающих прерывания, аналогичным образом обеспечивают регистры IsoRecvIntEvent и IsoRecvIntMask. Эти регистры доступны через IsoRecvIntEventSet (0A0h), IsoRecvIntEventClear (0A4h), IsoRecvIntMaskSet (0A8h) и IsoRecvIntMaskClear (0ACh). Каждый бит этих регистров соответствует событию прерывания и маске для своего контекста изохронного приема.
Для поддержки изохронного режима шины контроллер имеет специальные регистры:
CSR-архитектура допускает модификацию автономных регистров только через блокированные транзакции compare_swap. Контроллер OHC аппаратно реализует эти блокированные транзакции по запросам от других узлов шины. Со стороны хоста выполнить блокированные транзакции compare_swap позволяют специальные регистры доступа к автономным ресурсам. Для этих транзакций данных записи помещаются в регистр CSRData (00Ch), данные сравнения — в регистр CSRCompareData (010h). Записью в регистр CSRControl (014h, рис. 3) выбирается автономный ресурс и инициируется операция. Признаком завершения операции является бит csrDone (при записи в регистр CSRControl он должен обнуляться). Ресурс выбирается полем csrSel: 0 — BUS_MANAGER_ID, 1 — BANDWIDTH_AVAILABLE, 2 — CHANNELS_AVAILABLE_HI, 3 — CHANNELS_AVAILABLE_LO. После выполнения операции регистр CSRData содержит данные, которые были в выбранном регистре до начала операции. Таким образом обеспечивается чтение автономных регистров. Об успешности выполнения операции можно судить по совпадению этих считанных данных с данными, записанными в регистр CSRCompareData. Чтение автономных регистров возможно и по их прямым адресам в пространстве регистров хоста: InitialBandwidthAvailable (0B0h) и InitialChannelsAvailableHi , InitialChannelsAvailableLo (0B4h, 0B8h). Регистр BUS_MANAGER_ID не имеет прямого отображения.
Управления LINKуровнем обеспечивает регистр LinkControl (рис. 4, а), биты которого могут устанавливаться и сбрасываться через регистры LinkControlSet (0E0h) и LinkControlClear (0E8h). Регистр содержит следующие биты:
Для управления приоритетным арбитражем (1394a) служит регистр Fairness-Control (0DCh, необязательный). Его поле pri_req (биты [7:0]) задает число приоритетных запросов, которые LINK-уровень имеет право послать за один интервал справедливости.
Физический идентификатор и состояние узла определяются по регистру NodeID (0E8h, рис. 4, б):
Программный доступ к регистрам PHY предоставляется через регистр PhyControl (0ECh, рис. 4, в). Для чтения адрес регистра указывается в поле rdAddr и устанавливается признак rdReg. Завершение чтения определяется по биту rdDone (установится контроллером), считанные данные будут в поле rdData. Для записи адрес и данные задаются в полях regAddr и wrData, признак операции — бит wrReg. К PHY-регистру с номером 0 следует обращаться только через регистр NodeID.