Модуль интерфейса внешней шины процессоров Blackfin Печать
Добавил(а) microsin   

В этой статье описан модуль библиотеки SSL (драйвер ADI), работающий с модулем интерфейса внешней шины (external bus interface unit, EBIU) процессора Blackfin (перевод главы 4 документации [1]). EBIU позволяет осуществлять конфигурирование контроллера асинхронной памяти (FLASH) и интерфейса SDRAM или DDR. Он также позволяет автоматически менять настройки в ответ на изменения тактовой частоты системы.

Рассматриваются следующие вопросы:

• Использование модуля EBIU
• Справочник по API EBIU
• Публичные типы данных и перечисления модуля EBIU
• Установка управляющих значений в модуле EBIU

Общее назначение модуля EBIU - позволить модулю управления питанием [2] настраивать контроллер SDRAM или DDR процессора в соответствии с изменениями тактовой частоты системной шины (system clock, SCLK). Вызовы функций API adi_pwr_SetFreq и adi_pwr_SetMaxFreqForVolt настраивают параметры контроллера SDRAM в соответствии с выбранной частотой SCLK, что поддерживается модулем EBIU, когда он инициализирован. Дополнительную информацию по службе управления питанием и её API см. статью [2].

Использование модуля EBIU осуществляется стандартным способом, в соответствии с идеологией библиотек системных служб (SSL) компании Analog Devices (ADI). Функция adi_ebiu_Init вызывается для установки соответствующих значений, перечисленных в даташите на используемую микросхему внешней памяти. После этого скорость обновления (refresh rate) для SDRAM или DDR автоматически подстраивается каждый раз, когда модуль управления питанием [2] тактовую частоту системной шины SCLK. Контроллер асинхронной памяти (память FLASH) не настраивается автоматически, но его можно явно переконфигурировать вызовом функции adi_ebiu_Control. В разделе "Использование модуля EBIU" предоставлено пошаговое описание, как работать с модулем EBIU. Также предоставлен соответствующий пример кода.

Модуль EBIU использует недвусмысленную систему именования функций, констант и определений, что обеспечивает отсутствие конфликтов с другими программными модулями ADI или других компаний. Все значений перечислений (enum) и операторы typedef используют префикс ADI_EBIU_, а функции и глобальные переменные используют эквивалентный префикс в нижнем регистре adi_ebiu_.

Для каждого процессора имеется 2 версии библиотеки, соответствующие конфигурациям Debug и Release системы программирования VisualDSP++. В дополнение к обычным опциям по умолчанию в конфигурации Debug, функции API выполняют проверки переданных в них аргументов, и сообщают об ошибках соответствующими кодами, если это необходимо. В версии Release библиотеки большинство функций вернут только 2 кода результата: ADI_EBIU_RESULT_SUCCESS для успешного завершения вызова, или ADI_EBIU_RESULT_NOT_INITIALIZED, когда модуль EBIU не был инициализирован перед вызовом этой функции.

[Использование модуля EBIU]

Первый шаг в использовании модуля EBIU состоит в установке необходимых параметров для используемых интерфейсов внешней памяти. На этом шаге в функцию adi_ebiu_Init передается список пар команда-значение. Подробно необходимая информация дана во врезке с описанием функции adi_ebiu_Init (см. раздел "Справочник по API EBIU"). Количество строк в таблице и информация, которые должны быть в таблице, зависит от индивидуальной аппаратной конфигурации системы (от типа подключенной внешней памяти).

В следующем примере предполагается, что конфигурируется плата разработчика ADSP-BF533 EZ-KIT Lite (Rev 2.1). Для неё следующим образом указывается таблица пар команда-значение:

/* Поле регистра управления асинхронной памятью, разрешающее тактирование */
ADI_EBIU_ASYNCH_CLKOUT clkout_enable = ADI_EBIU_ASYNCH_CLKOUT_ENABLE;
/* Поле регистра управления асинхронной памятью, выбирающее нужные банки,
   которые должны быть разрешены */
ADI_EBIU_ASYNCH_BANK_ENABLE banks_enable = ADI_EBIU_ASYNCH_BANK0_1_2_3;
/* Параметры времени банков асинхронной памяти, для всех 4 банков
   используются одинаковые значения, задаваемые либо в циклах, либо
   в единицах времени, но не обоими этими способами */
ADI_EBIU_ASYNCH_BANK_TIMING asynch_bank_trans_time =
{
   ADI_EBIU_BANK_ALL,
   {
      ADI_EBIU_ASYNCH_TT_4_CYCLES, { 0, ADI_EBIU_TIMING_UNIT_NANOSEC }
   }
   ADI_EBIU_ASYNCH_BANK_TIMING asynch_bank_setup_time =
   {
      ADI_EBIU_BANK_ALL,
      {
         ADI_EBIU_ASYNCH_ST_3_CYCLES, { 0, ADI_EBIU_TIMING_UNIT_NANOSEC }
      }
   };
   ADI_EBIU_ASYNCH_BANK_TIMING asynch_bank_hold_time =
   {
      ADI_EBIU_BANK_ALL,
      {
         ADI_EBIU_ASYNCH_HT_2_CYCLES, { 0, ADI_EBIU_TIMING_UNIT_NANOSEC }
      }
   };
   ADI_EBIU_ASYNCH_BANK_TIMING asynch_bank_read_access_time =
   {
      ADI_EBIU_BANK_ALL,
      {
         0xB, { 0, ADI_EBIU_TIMING_UNIT_NANOSEC }
      }
   };
   ADI_EBIU_ASYNCH_BANK_TIMING asynch_bank_write_access_time =
   {
      ADI_EBIU_BANK_ALL,
      {
         7, { 0, ADI_EBIU_TIMING_UNIT_NANOSEC }
      }
   };
   ADI_EBIU_ASYNCH_BANK_VALUE asynch_bank_ardy_enable =
   {
      ADI_EBIU_BANK_ALL, { ardy_enable: ADI_EBIU_ASYNCH_ARDY_DISABLE }
   };
   ADI_EBIU_ASYNCH_BANK_VALUE asynch_bank_ardy_polarity =
   {
      ADI_EBIU_BANK_ALL, { ardy_polarity: ADI_EBIU_ASYNCH_ARDY_POLARITY_LOW }
   };
   /* Параметры времени SDRAM, устанавливаемые по её даташиту */
   // Установка min TWR на длительность 1 такт SCLK + 7.5 нс:
   ADI_EBIU_TIMING_VALUE twrmin =
   {
      1,{7500, ADI_EBIU_TIMING_UNIT_PICOSEC}
   };
   // Установка периода обновления 8192 тактов за 64 мс:
   ADI_EBIU_TIMING_VALUE refresh =
   {
      8192,{64, ADI_EBIU_TIMING_UNIT_MILLISEC}
   };
   // Установка min TRAS на 44 нс:
   ADI_EBIU_TIME trasmin = {44, ADI_EBIU_TIMING_UNIT_NANOSEC};
   // Установка min TRP на 20 нс:
   ADI_EBIU_TIME trpmin = {20, ADI_EBIU_TIMING_UNIT_NANOSEC};
   ADI_EBIU_TIME trcdmin = {20, ADI_EBIU_TIMING_UNIT_NANOSEC};
   // Установка min TRCD на 20 нс:
   u32 cl_threshold = 100; /* установка порога cl на 100 МГц */
   // Размер банка 64 MB:
   ADI_EBIU_SDRAM_BANK_VALUE bank_size =
   {
      0, { size: ADI_EBIU_SDRAM_BANK_64MB }
   };
   // Адрес столбца имеет разрядность 10 бит:
   ADI_EBIU_SDRAM_BANK_VALUE bank_width =
   {
      0, { width: ADI_EBIU_SDRAM_BANK_COL_10BIT }
   };
   /* Заполнение таблицы команд с использованием заданных выше значений */
   ADI_EBIU_COMMAND_PAIR ebiu_init_table[] =
   {
      { ADI_EBIU_CMD_SET_SDRAM_BANK_SIZE,               (void*)&bank_size },
      { ADI_EBIU_CMD_SET_SDRAM_BANK_COL_WIDTH,          (void*)&bank_width },
      { ADI_EBIU_CMD_SET_SDRAM_CL_THRESHOLD,            (void*)cl_threshold },
      { ADI_EBIU_CMD_SET_SDRAM_TRASMIN,                 (void*)&trasmin },
      { ADI_EBIU_CMD_SET_SDRAM_TRPMIN,                  (void*)&trpmin },
      { ADI_EBIU_CMD_SET_SDRAM_TRCDMIN,                 (void*)&trcdmin },
      { ADI_EBIU_CMD_SET_SDRAM_TWRMIN,                  (void*)&twrmin },
      { ADI_EBIU_CMD_SET_SDRAM_REFRESH,                 (void*)&refresh },
      { ADI_EBIU_CMD_SET_ASYNCH_CLKOUT_ENABLE,          (void*)&clkout_enable },
      { ADI_EBIU_CMD_SET_ASYNCH_BANK_ENABLE,            (void*)&banks_enable },
      { ADI_EBIU_CMD_SET_ASYNCH_BANK_TRANSITION_TIME,   (void*)&asynch_bank_trans_time },
      { ADI_EBIU_CMD_SET_ASYNCH_BANK_READ_ACCESS_TIME,  (void*)&asynch_bank_read_access_time },
      { ADI_EBIU_CMD_SET_ASYNCH_BANK_WRITE_ACCESS_TIME, (void*)&asynch_bank_write_access_time },
      { ADI_EBIU_CMD_SET_ASYNCH_BANK_SETUP_TIME,        (void*)&asynch_bank_setup_time },
      { ADI_EBIU_CMD_SET_ASYNCH_BANK_HOLD_TIME,         (void*)&asynch_bank_hold_time },
      { ADI_EBIU_CMD_SET_ASYNCH_BANK_ARDY_ENABLE,       (void*)&asynch_bank_ardy_enable },
      { ADI_EBIU_CMD_SET_ASYNCH_BANK_ARDY_POLARITY,     (void*)&asynch_bank_ardy_polarity },
      // Маркер конца таблицы команд:
      { ADI_EBIU_CMD_END, 0 }
   };
};

Второй аргумент в вызове функции adi_ebiu_Init зарезервирован, и должен быть установлен в 0. Модуль EBIU должен быть инициализирован до модуля управления питанием, чтобы последующие вызовы adi_pwr_SetFreq или adi_pwr_SetMaxFreqForVolt модуля управления питанием автоматически настраивали SDRAM или DDR.

Для иллюстрации того, что требуется для процессоров Blackfin, чтобы поддерживать работу памяти DDR, ниже приведена соответствующая таблица команд. Замените параметры SDRAM, показанные в таблице выше, на параметры DDR, показанные ниже, и добавьте команды управления контроллером асинхронной памяти, показанные в примере выше.

   // Количество тактов между одной активной командой и следующей:
   ADI_EBIU_TIMING_VALUE RC =
   {
      8, {60, ADI_EBIU_TIMING_UNIT_NANOSEC }
   };
   // Количество тактов между активной командой и командой precharge:
   ADI_EBIU_TIMING_VALUE RAS =
   {
      6, {42, ADI_EBIU_TIMING_UNIT_NANOSEC }
   };
   // Количество тактов между командой precharge и активной командой:
   ADI_EBIU_TIMING_VALUE RP =
   {
      2, {15, ADI_EBIU_TIMING_UNIT_NANOSEC }
   };
   // Количество тактов для SDRAM, чтобы восстановиться из сигнала REFRESH:
   ADI_EBIU_TIMING_VALUE RFC =
   {
      10, {72, ADI_EBIU_TIMING_UNIT_NANOSEC }
   };
   // Количество тактов между последней записью данных
   // до следующей команды чтения:
   ADI_EBIU_TIMING_VALUE WTR =
   {
      2, {7500, ADI_EBIU_TIMING_UNIT_PICOSEC }
   };
   // Время восстановления записи (write recovery time)
   // составляет 2 или 3 такта:
   ADI_EBIU_TIMING_VALUE tWR =
   {
      2, {15, ADI_EBIU_TIMING_UNIT_NANOSEC }
   };
   // Количество тактов от установки режима:
   ADI_EBIU_TIMING_VALUE tMRD =
   {
      2, {15, ADI_EBIU_TIMING_UNIT_NANOSEC }
   };
   // Количество тактов от активной команды до следующей
   // операции R/W (чтение или запись):
   ADI_EBIU_TIMING_VALUE RCD =
   {
      2, {15, ADI_EBIU_TIMING_UNIT_NANOSEC }
   };
   // Количество тактов от одного сигнала REFRESH
   // до следующего:
   ADI_EBIU_TIMING_VALUE REFI =
   {
      1037, {7777, ADI_EBIU_TIMING_UNIT_NANOSEC }
   };
   ADI_EBIU_COMMAND_PAIR ebiu_init_table[] =
   {
      // Команда для установки интервала обновления (refresh):
      { ADI_EBIU_CMD_SET_DDR_REFI,           (void*)&REFI }, 
      // Команда для установки периода автообновления (auto refresh):
      { ADI_EBIU_CMD_SET_DDR_RFC,            (void*)&RFC },
      // Команда для установки времени precharge - active
      { ADI_EBIU_CMD_SET_DDR_RP,             (void*)&RP }, 
      // Команда для установки времени active - precharge
      { ADI_EBIU_CMD_SET_DDR_RAS,            (void*)&RAS }
      // Команда для установки времени active - active
      { ADI_EBIU_CMD_SET_DDR_RC,             (void*)&RC },
      // Команда для установки времени write - read
      { ADI_EBIU_CMD_SET_DDR_WTR,            (void*)&WTR },
      // Команда для установки размера устройства:
      { ADI_EBIU_CMD_SET_DDR_DEVICE_SIZE,    (void*)0 },
      // Команда для установки количества тактов от выставления R/W
      // до появления первых достоверных данных:
      { ADI_EBIU_CMD_SET_DDR_CAS,            (void*)2 },
      // Команда для установки ширины устройства:
      { ADI_EBIU_CMD_SET_DDR_DEVICE_WIDTH,   (void*)2 },
      // Команда для установки количества внешних банков:
      { ADI_EBIU_CMD_SET_DDR_EXTERNAL_BANKS, (void*)0 },
      // Команда для установки ширины данных:
      { ADI_EBIU_CMD_SET_DDR_DATA_WIDTH,     (void*)2 },
      // Команда для установки времени восстановления записи
      // (write recovery time):
      { ADI_EBIU_CMD_SET_DDR_WR,             (void*)&tWR },
      // Команда для установки количества тактов от установки
      // режима до следующей команды:
      { ADI_EBIU_CMD_SET_DDR_MRD,            (void*)&tMRD },
      // Команда для установки количества тактов от активной
      // команды до выставления read-write:
      { ADI_EBIU_CMD_SET_DDR_RCD,            (void*)&RCD },
      // Маркер конца таблицы команд:
      { ADI_EBIU_CMD_END, 0 }
   };

В приведенном выше примере кода обратите внимание на то, что минимальное значение TWR SDRAM определено как структура ADI_EBIU_TIMING_VALUE, которая состоит из двух главных частей: количество тактов и количество единиц времени, в данном случае пикосекунд. Такое представление отражает определение, которое можно найти в соответствующем даташите на SDRAM, где это значение указано как один такт SCLK плюс 7.5 нс. Для периода восстановления данных SDRAM (refresh) эта структура выражает время, которое берется для указанного количества тактов обновления (refresh cycles). Код примера показывает, что период обновления (refresh period) составляет 64 миллисекунды, которые занимают 8192 такта.

Для аппаратуры, использующей модуль Micron SDRAM, таблица команд может получить аббревиатуру, чтобы просто указать тип модуля и размер банка, как это показано ниже, с добавлением команд настройки контроллера асинхронной памяти, если это необходимо:

ADI_EBIU_SDRAM_BANK_VALUE bank_size;// Установка размера банка 32 MB:
bank_size.value.size = ADI_EBIU_SDRAM_BANK_32MB;
ADI_EBIU_COMMAND_PAIR ebiu_init_table[] =
{
   // Модуль MT48LC16M16-75:
   { ADI_EBIU_CMD_SET_SDRAM_MODULE,    (void*)ADI_EBIU_SDRAM_MODULE_MT48LC16M16A2_75 },
   { ADI_EBIU_CMD_SET_SDRAM_BANK_SIZE, (void*)&bank_size },
   { ADI_EBIU_CMD_END, 0 }
};
adi_ebiu_Init(ebiu_init_table, 0);

Дальнейшие изменения могут быть сделаны в любой момент путем передачи пар команда-значение или таблиц пар команда-значение в функцию adi_ebiu_Control. Например, чтобы передать одну парку команда-значение для разрешения самостоятельного обновления данных в SDRAM во время отсутствия активности (self-refresh), может использоваться следующий код:

adi_ebiu_Control(ADI_EBIU_CMD_SET_SDRAM_SRFS,
                 (void*)ADI_EBIU_SDRAM_SRFS_ENABLE);

Поскольку настройки SDRAM жестко привязаны к частоте системной шины (system clock, SCLK), прямое использование функции adi_ebiu_AdjustSDRAM из приложения пользователя не требуется, потому что это делается автоматически соответствующим кодом модуля управления питанием [2], когда меняется частота SCLK.

[Справочник по API EBIU]

В этой секции приведено подробное описание функций API модуля EBIU.

Для переданной в эту функцию частоты системной шины (system clock, SCLK) вычисляются и устанавливаются следующие параметры для SDRAM: TRAS, TRP, TRCD и TWR в регистре EBIU_SDGCTL, и значение RDIV в регистре EBIU_SDRRC. Эта функция вычисляет и устанавливает следующие параметры для DDR: RAS, RP, RFC, REFI и RC в регистре DDRCTL0, и RCD, MRD и WR в регистре DDRCTL1.

Эта функция используется главным образом модулем управления питанием [2], чтобы гарантировать, что настройки SDRAM оптимальны для текущей частоты SCLK процессора.

Функция adi_ebiu_AdjustSDRAM выполнит возврат, не делая никаких изменений, если SDRAM не была ранее успешно инициализирована вызовом adi_ebiu_Init.

ADI_EBIU_RESULT adi_ebiu_AdjustSDRAM (u32 fsclk);

Аргумент:

fsclk Частота системной шины (SCLK) в Гц.

Возвращаемое значение:

ADI_EBIU_RESULT_SUCCESS Успешное завершение функции.
ADI_EBIU_RESULT_NOT_INITIALIZED SDRAM не была успешно инициализирована, или работа SDRAM не была разрешена.

Функция adi_ebiu_Control() позволяет конфигурировать регистры EBIU SDRAM и EBIU DDR в соответствии с парами команда-значение, которые могут передаваться в эту функцию тремя разными способами (см. также описание типа ADI_EBIU_COMMAND_PAIR).

• Передается одна пара команда-значение:

adi_ebiu_Control (ADI_EBIU_CMD_SET_SDRAM_SRFS,
                  (void*)ADI_EBIU_SDRAM_SRFS_ENABLE);

• Передается структура с одной парой команда-значение:

ADI_EBIU_COMMAND_PAIR cmd =
{
   ADI_EBIU_CMD_SET_SDRAM_SRFS, (void*)ADI_EBIU_SDRAM_SRFS_ENABLE
};
adi_ebiu_Control (ADI_EBIU_CMD_PAIR, (void*)&cmd);

• Передается таблица структур ADI_EBIU_COMMAND_PAIR. Последняя запись в этой таблице должна быть {ADI_EBIU_CMD_END, 0}.

ADI_EBIU_COMMAND_PAIR table[] =
{
   { ADI_EBIU_CMD_SET_SDRAM_FBBRW, (void*)ADI_EBIU_SDRAM_FBBRW_ENABLE },
   { ADI_EBIU_CMD_SET_SDRAM_CDDBG, (void*)ADI_EBIU_CDDBG_ENABLE },
   { ADI_EBIU_CMD_END, 0 }
};
adi_ebiu_Control (ADI_EBIU_CMD_TABLE, (void*)table);

См. также описание ADI_EBIU_COMMAND и раздел "Перечисления для параметра Value команд" для получения полного списка команд и связанных с ними значений для обоих типов интерфейсов, SDRAM и DDR, и для интерфейса асинхронной памяти (FLASH).

Прототип функции:

ADI_EBIU_RESULT adi_ebiu_Control (ADI_EBIU_COMMAND Command,
                                  void *Value);

Аргументы:

Command Значение из перечисления ADI_EBIU_COMMAND, которое определяет команду и назначение связанного аргумента Value.
Value Значение, требуемое для определенной команды.

Возвращаемое значение:

ADI_EBIU_RESULT_SUCCESS Успешное завершение функции.
ADI_EBIU_RESULT_BAD_COMMAND Команда не распознана.
ADI_EBIU_RESULT_NOT_INITIALIZED Модуль EBIU не был инициализирован.
ADI_EBIU_RESULT_INVALID_SDRAM_SRFS Задано недопустимое значение для самообновления данных динамической памяти (self-refresh SDRAM). См. описание ADI_EBIU_SDRAM_SRFS.
ADI_EBIU_RESULT_INVALID_SDRAM_PUPSD Задано недопустимое значение для задержки запуска при включении (power-up start delay). См. описание ADI_EBIU_SDRAM_EBUFE.
ADI_EBIU_RESULT_INVALID_SDRAM_PSM Задано недопустимое значение для настройки последовательности включения динамической памяти (SDRAM power-up sequence). См. описание ADI_EBIU_SDRAM_PUPSD.
ADI_EBIU_RESULT_INVALID_SDRAM_EBUFE Задано недопустимое значение для настройки внешней буферизации. См. описание ADI_EBIU_SDRAM_SRFS.
ADI_EBIU_RESULT_INVALID_SDRAM_FBBRW Задано недопустимое значение для параметра back-to-back, read-to-write. См. описание ADI_EBIU_SDRAM_FBBRW.
ADI_EBIU_RESULT_INVALID_SDRAM_CDDBG Задано недопустимое значение для запрета управления при предоставлении шины (control disable during bus grant). См. описание ADI_EBIU_SDRAM_CDDBG.
ADI_EBIU_RESULT_INVALID_SDRAM_EBE Недопустимый выбор разрешения SDRAM. См. описание ADI_EBIU_SDRAM_ENABLE.
ADI_EBIU_RESULT_INVALID_ASYNCH_BANK_ READ_ACCESS_TIME Недопустимое время доступа для времени чтения из асинхронной памяти.
ADI_EBIU_RESULT_INVALID_ASYNCH_BANK_ WRITE_ACCESS_TIME Недопустимое время доступа для времени записи в асинхронную память.
ADI_EBIU_RESULT_INVALID_ASYNCH_BANK_ SETUP_TIME Недопустимое время установки банка асинхронной памяти (bank setup time).
ADI_EBIU_RESULT_INVALID_ASYNCH_BANK_ HOLD_TIME Недопустимое время удержания банка асинхронной памяти (bank hold time).

Функция adi_ebiu_GetConfigSize() вернет количество байт, требуемое для сохранения данных текущей конфигурации. Это значение также доступно через макрос ADI_EBIU_SIZEOF_CONFIG.

size_t adi_ebiu_GetConfigSize (void);

Возвращаемое значение: размер структуры данных конфигурации.

Функция adi_ebiu_Init инициализирует модуль EBIU. В настоящее время модуль конфигурируется для поддержки либо контроллера DDR, либо контроллера SDRAM, плюс для поддержки контроллера асинхронной памяти. Для службы EBIU, которая поддерживает SRDRAM, функция adi_ebiu_Init устанавливает значения регистров EBIU_SDGCTL, EBIU_SDBCTL и EBIU_SDRRC, чтобы их содержимое отражало корректную конфигурацию памяти SDRAM, подключенной к процессору. Для службы EBIU, которая поддерживает DDR, функция adi_ebiu_Init настраивает регистры управления контроллера DDR: DDRCTL0, DDRCTL1 и DDRCTL2. Для успешной инициализации контроллера SDRAM или DDR в функцию adi_ebiu_Init должен быть передан определенный набор значений, как это обозначено таблицами 4-1 (для SDRAM) и 4-2 (для DDR).

Таблица 4-1. Значения для инициализации SDRAM.

Описание Команда Тип Value
Размер банка ADI_EBIU_CMD_SET_SDRAM_BANK_SIZE ADI_EBIU_SDRAM_BANK_VALUE
Ширина адреса столбца банка ADI_EBIU_CMD_SET_SDRAM_BANK_COLUMN_WIDTH ADI_EBIU_SDRAM_BANK_VALUE
Порог латентности CAS1 (МГц) ADI_EBIU_CMD_SET_SDRAM_CL_THRESHOLD u32
Минимальное значение TRAS2 (нс) ADI_EBIU_CMD_SET_SDRAM_TRASMIN ADI_EBIU_TIME
Минимальное значение TRP3 (нс) ADI_EBIU_EBIU_CMD_SET_SDRAM_TRPMIN ADI_EBIU_TIME
Минимальное значение TRCD4 (нс) ADI_EBIU_CMD_SET_SDRAM_TRCDMIN ADI_EBIU_TIME
Минимальное значение TWR5 (такты, нс)  ADI_EBIU_CMD_SET_SDRAM_TWRMIN ADI_EBIU_TIMING_VALUE
Период обновления данных (такты, мс) ADI_EBIU_CMD_SET_SDRAM_REFRESH ADI_EBIU_TIMING_VALUE

Примечания к таблице 4-1:

1 Строб адреса столбца (Column address strobe).
2 Требуемая задержка между выдачей команды Bank Activate и команды Precharge, и между командой Self-Refresh и командой выхода из состояния самообновления данных (self-refresh).
3 Требуемая задержка между выдачей команды Precharge и командами Bank Activate, Auto-Refresh или Self-Refresh.
4 Требуемая задержка между выдачей команды Bank Activate и началом первой команды чтения/записи.
5 Требуемая задержка между командой Write и командой Precharge.

Таблица 4-2. Значения для инициализации DDR.

Описание Команда Тип Value
Ширина данных ADI_EBIU_CMD_SET_DDR_DATA_WIDTH u32
Количество внешних банков ADI_EBIU_CMD_SET_DDR_EXTERNAL_BANKS u32
Ширина устройства ADI_EBIU_CMD_SET_DDR_DEVICE_WIDTH u32
Размер устройства ADI_EBIU_CMD_SET_DDR_DEVICE_SIZE u32
Интервал автообновления ADI_EBIU_CMD_SET_DDR_REFI ADI_EBIU_TIMING_VALUE
Период команды автообновления ADI_EBIU_CMD_SET_DDR_RFC ADI_EBIU_TIMING_VALUE
Интервал между командой R/W и достоверными данными ADI_EBIU_CMD_SET_DDR_CAS u32
Интервал между активной командой и командой R/W ADI_EBIU_CMD_SET_DDR_RCD ADI_EBIU_TIMING_VALUE
Интервал между активными командами ADI_EBIU_CMD_SET_DDR_RC ADI_EBIU_TIMING_VALUE
Интервал между активной командой и командой Precharge ADI_EBIU_CMD_SET_DDR_RAS ADI_EBIU_TIMING_VALUE
Интервал между командой Precharge и активной командой ADI_EBIU_CMD_SET_DDR_RP ADI_EBIU_TIMING_VALUE
Интервал между установкой регистра режима и следующей командой ADI_EBIU_CMD_SET_DDR_MRD ADI_EBIU_TIMING_VALUE
Интервал между записью и чтением ADI_EBIU_CMD_SET_DDR_WTR ADI_EBIU_TIMING_VALUE
Время восстановления записи ADI_EBIU_CMD_SET_DDR_WR ADI_EBIU_TIMING_VALUE

При успешной инициализации модуля EBIU последующие вызовы adi_ebiu_AdjustSDRAM подстраивают скорость обновления данных SDRAM (refresh rate) в регистрах EBIU_SDRRC или DDRCTL0, чтобы они соответствовали указанной частоте системной шины SCLK. Когда используется несколько банков памяти, для каждого банка должны быть указаны соответствующие пары команда-значение ADI_EBIU_CMD_SET_SDRAM_BANK_SIZE и ADI_EBIU_CMD_SET_SDRAM_BANK_COL_WIDTH.

Если конфигурация системы использует SDRAM с низким потреблением энергии (low power 2.5V), то должны быть инициализированы следующие значения:

Описание Команда Тип Value
Регистр разрешения расширенного режима ADI_EBIU_CMD_SET_SDRAM_EMREN ADI_EBIU_SDRAM_EMREN
Самообновление частичного массива ADI_EBIU_CMD_SET_SDRAM_PASR ADI_EBIU_PASR
Самообновление с температурной компенсацией ADI_EBIU_CMD_SET_SDRAM_TCSR ADI_EBIU_SDRAM_TCSR

В функцию adi_ebiu_Init могут быть переданы дополнительные пары команда-значение, которые могут быть переданы впоследствии в функцию adi_ebiu_Control. См. описание функции adi_ebiu_Control для получения описания этих пар команда-значение.

Функция adi_ebiu_Init должна быть вызвана только 1 раз, но вызовов настроек службы управления питанием, чтобы SDRAM была настроена в соответствии с изменениями SCLK. Последующие вызовы функции adi_ebiu_Init игнорируются.

Прототип функции:

ADI_EBIU_RESULT adi_ebiu_Init (const ADI_EBIU_COMMAND_PAIR *ConfigData,
                               const u16 Reserved);

Аргументы:

ConfigData Адрес таблицы пар команда-значение, как это определено в описании ADI_EBIU_COMMAND, и разделе "Перечисления для параметра Value команд". Последней командой в таблице должна быть команда ADI_EBIU_CMD_END.
Reserved Значение u16, зарезервированное для будущего использования.

В режиме отладки при инициализации SDRAM функция adi_ebiu_Init возвращает следующие значения:

ADI_EBIU_RESULT_SUCCESS Успешное завершение функции.
ADI_EBIU_RESULT_FAILED Обычная ошибка.
ADI_EBIU_RESULT_BAD_COMMAND Недопустимая пара команда-значение.
ADI_EBIU_RESULT_ALREADY_INITIALIZED Модуль EBIU уже был инициализирован.
ADI_EBIU_RESULT_INVALID_SDRAM_SCTLE Указано недопустимое значение SCTLE.
ADI_EBIU_RESULT_INVALID_SDRAM_MODULE Указан недопустимый тип модуля памяти.
ADI_EBIU_RESULT_INVALID_SDRAM_BANK_SIZE Указан недопустимый размер банка.
ADI_EBIU_RESULT_INVALID_SDRAM_COL_WIDTH Указана недопустимая ширина адреса столбца.
ADI_EBIU_RESULT_INVALID_SDRAM_TWRMIN Указано недопустимое значение TWRMIN.
ADI_EBIU_RESULT_INVALID_SDRAM_EMREN Указано недопустимое значение EMREN.
ADI_EBIU_RESULT_INVALID_SDRAM_PASR Указано недопустимое значение PASR.
ADI_EBIU_RESULT_INVALID_SDRAM_TCSR Указано недопустимое значение TCSR.

В режиме отладки при инициализации DDR функция adi_ebiu_Init возвращает следующие значения:

ADI_EBIU_RESULT_SUCCESS Успешное завершение функции.
ADI_EBIU_RESULT_FAILED Обычная ошибка.
ADI_EBIU_RESULT_BAD_COMMAND Недопустимая управляющая команда.
ADI_EBIU_RESULT_INVALID_DDR_MODULE Указан недопустимый тип модуля памяти.
ADI_EBIU_RESULT_INVALID_DDR_REFI Указан недопустимый интервал автообновления.
ADI_EBIU_RESULT_INVALID_DDR_RFC Указан недопустимый период команды автообновления.
ADI_EBIU_RESULT_INVALID_DDR_RP Указан недопустимый интервал Precharge - Active.
ADI_EBIU_RESULT_INVALID_DDR_RAS Указан недопустимый интервал Active - Precharge.
ADI_EBIU_RESULT_INVALID_DDR_RC Указан недопустимый интервал Active - Active.
ADI_EBIU_RESULT_INVALID_DDR_WTR Указан недопустимый интервал запись - чтение.
ADI_EBIU_RESULT_INVALID_DDR_DEVICE_SIZE Недопустимый размер устройства.
ADI_EBIU_RESULT_INVALID_DDR_DEVICE_WIDTH Недопустимая ширина устройства.
ADI_EBIU_RESULT_INVALID_DDR_EXTERNAL_BANKS Недопустимое количество внешних банков.
ADI_EBIU_RESULT_INVALID_DDR_DATA_WIDTH Недопустимая ширина данных.
ADI_EBIU_RESULT_INVALID_DDR_WR Недопустимое время восстановления записи.
ADI_EBIU_RESULT_INVALID_DDR_MRD Недопустимый выбор регистра режима.
ADI_EBIU_RESULT_INVALID_DDR_RCD Недопустимый интервал Active - R/W.
ADI_EBIU_RESULT_INVALID_DDR_CAS Недопустимая задержка R/W - достоверные данные.
ADI_EBIU_RESULT_INVALID_DDR_PASR Недопустимый запрос на частичное самообновление массива.
ADI_EBIU_RESULT_INVALID_DDR_SOFT_RESET Недопустимый запрос мягкого сброса.
ADI_EBIU_RESULT_INVALID_DDR_SELF_REFRESH_REQUEST Недопустимый запрос самообновления.
ADI_EBIU_RESULT_INVALID_DDR_MOBILE_DDR_ENABLE Недопустимый запрос mobile DDR enable.
ADI_EBIU_RESULT_ALREADY_INITIALIZED Служба EBIU уже была инициализирована.

В режиме отладки при инициализации контроллера асинхронной памяти (FLASH) функция adi_ebiu_Init возвращает следующие значения:

ADI_EBIU_RESULT_SUCCESS Успешное завершение функции.
ADI_EBIU_RESULT_FAILED Обычная ошибка.
ADI_EBIU_RESULT_INVALID_ASYNCH_CLKOUT_ENABLE Недопустимый выбор для разрешения CLKOUT.
ADI_EBIU_RESULT_INVALID_ASYNCH_BANK_ENABLE Недопустимый выбор для разрешения банка.
ADI_EBIU_RESULT_INVALID_ASYNCH_BANK_NUMBER В аргументе команды указан недопустимый номер банка.
ADI_EBIU_RESULT_INVALID_ASYNCH_BANK_16_BIT_PACKING_ENABLE Это возвращаемое значение используется только для процессора ADSP-BF561. Недопустимая спецификация для разрешения 16-битной упаковки.
ADI_EBIU_RESULT_INVALID_ASYNCH_BANK_TRANSITION_TIME Недопустимое время перехода.
ADI_EBIU_RESULT_INVALID_ASYNCH_BANK_READ_ACCESS_TIME Недопустимое время доступа на чтение.
ADI_EBIU_RESULT_INVALID_ASYNCH_BANK_WRITE_ACCESS_TIME Недопустимое время доступа на запись.
ADI_EBIU_RESULT_INVALID_ASYNCH_BANK_SETUP_TIME Недопустимое время установки.
ADI_EBIU_RESULT_INVALID_ASYNCH_BANK_HOLD_TIME Недопустимое время удержания.
ADI_EBIU_RESULT_INVALID_ASYNCH_BANK_ARDY_ENABLE Недопустимый выбор для разрешения ARDY.
ADI_EBIU_RESULT_INVALID_ASYNCH_BANK_ARDY_POLARITY Недопустимый выбор для полярности ARDY.
ADI_EBIU_RESULT_ALREADY_INITIALIZED Служба EBIU уже была инициализирована.

Функция adi_ebiu_LoadConfig восстанавливает значения текущей конфигурации из области памяти, на которую указывает аргумент hConfig. Контроллер SDRAM сбрасывается.

ADI_EBIU_RESULT adi_ebiu_LoadConfig (ADI_EBIU_CONFIG_HANDLE hConfig,
                                     size_t szConfig);

Аргументы:

hConfig Адрес области памяти, где сохранена конфигурация.
szConfig Количество байт по указанному адресу. Должно быть не меньше, чем значение, возвращаемое adi_ebiu_GetConfigSize().

Возвращаемое значение:

ADI_EBIU_RESULT_SUCCESS Успешное завершение функции.
ADI_EBIU_RESULT_NO_MEMORY Значение, указанное в szConfig, слишком маленькое.
ADI_EBIU_RESULT_NOT_INITIALIZED SDRAM не была успешно инициализирована.

Функция adi_ebiu_SaveConfig() сохраняет значения текущей конфигурации в область памяти, на которую указывает аргумент hConfig. В настоящее время сохраняется только конфигурация SDRAM.

ADI_EBIU_RESULT adi_ebiu_SaveConfig (ADI_EBIU_CONFIG_HANDLE hConfig,
                                     size_t szConfig);

Аргументы:

hConfig Адрес области памяти, куда будет сохранена конфигурация.
szConfig Количество байт, доступное по указанному адресу. Должно быть не меньше, чем значение, возвращаемое adi_ebiu_GetConfigSize().

Возвращаемое значение:

ADI_EBIU_RESULT_SUCCESS Успешное завершение функции.
ADI_EBIU_RESULT_NO_MEMORY Значение, указанное в szConfig, слишком маленькое.
ADI_EBIU_RESULT_NOT_INITIALIZED SDRAM не была успешно инициализирована.

Функция adi_ebiu_Terminate() завершает использование модуля EBIU.

ADI_EBIU_RESULT adi_ebiu_Terminate (void);

Возвращаемое значение:

ADI_EBIU_RESULT_SUCCESS Успешное завершение функции.

[Публичные типы данных и перечисления модуля EBIU]

В этом разделе дано описание публичных типов данных и перечислений.

Все публичные функции модуля EBIU возвращают код из перечисляемого типа ADI_EBIU_RESULT. Обратите внимание, что коды возврата, относящиеся к SDRAM, обычно начинаются с текста ADI_EBIU_RESULT_INVALID_SDRAM, в то время как коды возврата, относящиеся к DDR, начинаются с текста ADI_EBIU_RESULT_INVALID_DDR. В таблице 4-3 перечислены возможные значения кодов возврата модуля EBIU.

Таблица 4-3. Значения перечисления ADI_EBIU_RESULT.

Код возврата Описание
ADI_EBIU_RESULT_SUCCESS Успешное завершение функции.
ADI_EBIU_RESULT_FAILED Обычная ошибка.
ADI_EBIU_RESULT_BAD_COMMAND Указана недопустимая управляющая команда.
ADI_EBIU_RESULT_NOT_INITIALIZED Вызов функции был проигнорирован и не было выполнено никаких действий, потому что модуль EBIU не был инициализирован.
ADI_EBIU_RESULT_INVALID_SDRAM_EBE Указано недопустимое значение для поля EBE регистра EBIU_SDBCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_BANK_SIZE Указано недопустимое значение для поля EBSZ регистра EBIU_SDBCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_COL_WIDTH Указано недопустимое значение для поля EBCAW регистра EBIU_SDBCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_CDDBG Указано недопустимое значение для поля CDDBG регистра EBIU_SDBCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_EBUFE Указано недопустимое значение для поля EBUFE регистра EBIU_SDGCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_EMREN Указано недопустимое значение для поля EMREN регистра EBIU_SDGCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_FBBRW Указано недопустимое значение для поля FBBRW регистра EBIU_SDGCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_PASR Указано недопустимое значение для поля PASR регистра EBIU_SDGCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_PSM Указано недопустимое значение для поля PSM регистра EBIU_SDGCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_PUPSD Указано недопустимое значение для поля PUPSD регистра EBIU_SDGCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_SRFS Указано недопустимое значение для поля SRFS регистра EBIU_SDGCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_TCSR Указано недопустимое значение для поля TCSR регистра EBIU_SDGCTL.
ADI_EBIU_RESULT_INVALID_SDRAM_TWRMIN Указано недопустимое значение для TWRMIN, проводящее к тому, что TWR больше 3.
ADI_EBIU_RESULT_NO_MEMORY Недостаточно памяти для загрузки/сохранения конфигурации.
ADI_EBIU_RESULT_INVALID_EZKIT Недопустимая ревизия платы разработчика EZ-KIT.
ADI_EBIU_RESULT_INVALID_SDRAM_SCTLE Недопустимое значение SCTLE.
ADI_EBIU_RESULT_INVALID_SDRAM_MODULE Недопустимый тип модуля SDRAM.
ADI_EBIU_RESULT_INVALID_IVG Недопустимый уровень IVG (приоритет) для поддерживающего прерывания (только для двухядерных процессоров).
ADI_EBIU_RESULT_INVALID_SDRAM_BANK Указан недопустимый номер банка.
ADI_EBIU_RESULT_INVALID_SDRAM_SCK1E Недопустимое значение SCK1E.
ADI_EBIU_RESULT_INVALID_DDR_MODULE Недопустимый тип модуля SDRAM (DDR).
ADI_EBIU_RESULT_INVALID_DDR_REFI Недопустимый интервал обновления данных динамической памяти.
ADI_EBIU_RESULT_INVALID_DDR_RFC Недопустимый интервал автообновления данных динамической памяти.
ADI_EBIU_RESULT_INVALID_DDR_RP Недопустимый интервал Precharge - Active.
ADI_EBIU_RESULT_INVALID_DDR_RAS Недопустимый интервал Active - Precharge.
ADI_EBIU_RESULT_INVALID_DDR_RC Недопустимый интервал Active - Active.
ADI_EBIU_RESULT_INVALID_DDR_WTR Недопустимый интервал запись - чтение.
ADI_EBIU_RESULT_INVALID_DDR_DEVICE_SIZE Недопустимый размер устройства.
ADI_EBIU_RESULT_INVALID_DDR_DEVICE_WIDTH Недопустимая ширина устройства.
ADI_EBIU_RESULT_INVALID_DDR_EXTERNAL_BANKS Недопустимое количество внешних банков.
ADI_EBIU_RESULT_INVALID_DDR_DATA_WIDTH Недопустимая ширина данных.
ADI_EBIU_RESULT_INVALID_DDR_WR Недопустимое время восстановления данных.
ADI_EBIU_RESULT_INVALID_DDR_MRD Недопустимый выбор регистра режима.
ADI_EBIU_RESULT_INVALID_DDR_RCD Недопустимый интервал Active - R/W.
ADI_EBIU_RESULT_INVALID_DDR_CAS Недопустимый интервал R/W - достоверные данные.
ADI_EBIU_RESULT_INVALID_DDR_PASR Недопустимый запрос частичного обновления массива.
ADI_EBIU_RESULT_INVALID_DDR_SOFT_RESET Недопустимый запрос на мягкий сброс.
ADI_EBIU_RESULT_INVALID_DDR_MOBILE_ENABLE Недопустимый запрос mobile DDR enable.
ADI_EBIU_RESULT_INVALID_DDR_SELF_REFRESH_REQUEST Недопустимый запрос самообновления данных динамической памяти.

Структура ADI_EBIU_SDRAM_BANK_VALUE определяет настройки, которые применяются для определенного банка.

typedef struct ADI_EBIU_SDRAM_BANK_VALUE
{
   u16 bank;
   Union
   {
      ADI_EBIU_SDRAM_BANK_SIZE size;
      ADI_EBIU_SDRAM_BANK_COL_WIDTH width;
   } value;
} ADI_EBIU_SDRAM_BANK_VALUE;

См. описание ADI_EBIU_SDRAM_BANK_SIZE и ADI_EBIU_SDRAM_BANK_COL_WIDTH для получения подробной информации о полях size и width.

Примечание: поле bank предназначено для использования только с теми процессорами Blackfin, у которых есть несколько банков SDRAM.

Структура ADI_EBIU_TIME разрешает пользователям указывать значение времени как интегральное число в указанных единицах units.

typedef struct ADI_EBIU_TIME
{
   u32 value;
   ADI_EBIU_TIMING_UNIT units;
} ADI_EBIU_TIME;

Здесь тип ADI_EBIU_TIMING_UNIT это перечисление, значения которого определены в таблице ниже.

ADI_EBIU_TIMING_UNIT_MILLISEC Поле value в структуре ADI_EBIU_TIME указано в миллисекундах (мс, ms).
ADI_EBIU_TIMING_UNIT_MICROSEC Поле value в структуре ADI_EBIU_TIME указано в микросекундах (мкс, mks).
ADI_EBIU_TIMING_UNIT_NANOSEC Поле value в структуре ADI_EBIU_TIME указано в наносекундах (нс, ns).
ADI_EBIU_TIMING_UNIT_PICOSEC Поле value в структуре ADI_EBIU_TIME указано в пикосекундах (пс, ps).
ADI_EBIU_TIMING_UNIT_FEMTOSEC Поле value в структуре ADI_EBIU_TIME указано в фемтосекундах (фс, fs).

Действительные значения в этом перечислении используются как множители в целочисленной арифметике модуля. Для значения в миллисекундах, которое используется как значение управления логикой, здесь имеется исключение, потому что в данном случае значение перечисления не используется как множитель.

Разработчики могут использовать полный диапазон единиц, чтобы указывать значения интервалов времени как беззнаковое 32-битное целое число. Например, SDRAM на плате разработчика ADSP-BF533 EZ-KIT Lite имеет минимальное значение TWR, равное 1 такт SCLK и 7.5 нс. Передаваемое значение времени должно быть указано как 7500 пс. Таким образом, значение ADI_EBIU_TIME должно быть указано следующим образом:

ADI_EBIU_TIME time = {7500, ADI_EBIU_TIMING_UNIT_PICOSEC};

Определенные значения времени требуются для корректной установки регистров управления SDRAM в соответствии с подходящим даташитом на процессор. Время указывается как количество тактов SCLK в комбинации со значением времени, указанном в одной из возможных единиц (например, в наносекундах или миллисекундах).

Чтобы упростить передачу таких значений в функцию adi_ebiu_Init, определена структура ADI_EBIU_TIMING_VALUE:

typedef struct ADI_EBIU_TIMING_VALUE
{
   u32 cycles;
   ADI_EBIU_TIME time;
} ADI_EBIU_TIMING_VALUE;

Здесь ADI_EBIU_TIME определено так, как показано в предыдущей врезке. Например, SDRAM на плате разработчика ADSP-BF533 EZ-KIT Lite имеет минимальное значение TWR, равное 1 такт SCLK и 7.5 нс. С использованием структуры ADI_EBIU_TIMING_VALUE это значение времени может быть передано следующим образом:

ADI_EBIU_TIMING_VALUE twrmin = {1, {7500, ADI_EBIU_TIMING_UNIT_PICOSEC}};

Контроллер асинхронной памяти поддерживает несколько разных интерфейсов, так что предоставляется структура, которая позволяет задавать параметры времени либо в тактах, либо в единицах времени, однако нельзя использовать одновременно оба вида единиц времени.

Если параметр указывается в тактах, то значение напрямую записывается в регистр. Если значение указывается в единицах времени, то они преобразуются в такты на базе системной частоты 133 МГц, и преобразованное значение записывается в регистр.

Значения времени для настройки регистров управления асинхронной памятью, должны быть вычислены на основе даташита на используемое устройство памяти.

Эта структура используется для указания параметров времени интерфейса асинхронной памяти, как это показано ниже. Она содержит другие 2 структуры ADI_EBIU_BANK_NUMBER и ADI_EBIU_TIMING_VALUE (см. их описание в соответствующих врезках).

typedef struct ADI_EBIU_ASYNCH_BANK_TIMING
{
   ADI_EBIU_BANK_NUMBER  bank_number;
   ADI_EBIU_TIMING_VALUE bank_time;
} ADI_EBIU_ASYNCH_BANK_TIMING;

Из-за того, что многие параметры EBIU привязаны к определенному банку памяти, и указывают двоичное значение наподобие разрешено и запрещено (enabled, disabled), предоставляется структура, которая содержит номер банка вместе с объединением (union) трех различных перечислений, которые имеют два возможных значения.

Структура ADI_EBIU_ASYNCH_BANK_VALUE, показанная ниже, используется для полярности ARDY, которая может быть либо low, либо high (см. описание ADI_EBIU_ASYNCH_BANK_ARDY_POLARITY). Она же используется для разрешения функции ARDY, которая может быть либо разрешена, либо запрещена (см. описание ADI_EBIU_ASYNCH_BANK_ARDY_ENABLE). Также она используется для поля разрешения 16-битной упаковки (относится только к процессорам ADSP-BF561), когда может быть либо разрешена 16-битная упаковка, либо запрещена (32-битная упаковка), см. описание ADI_EBIU_ASYNCH_BANK_DATA_PATH.

typedef struct ADI_EBIU_ASYNCH_BANK_VALUE
{
   u32 bank_number;
   union
   {
      ADI_EBIU_ASYNCH_BANK_ARDY_POLARITY ardy_polarity;
      ADI_EBIU_ASYNCH_BANK_ARDY_ENABLE ardy_enable;#if defined(__ADSP_TETON__)
      ADI_EBIU_ASYNCH_BANK_DATA_PATH data_path;#endif
   } value;
} ADI_EBIU_ASYNCH_BANK_VALUE;

[Установка управляющих значений в модуле EBIU]

Чтобы установить управляющие значения в модуле EBIU, пользователь передает пары команда-значение (пары типа ADI_EBIU_COMMAND_PAIR) в функции adi_ebiu_Init и adi_ebiu_Control (либо по отдельности каждая пара, либо пары в виде таблицы). Обратите внимание, что функция adi_ebiu_Init позволяет передавать только таблицу пар команда-значение. В этой секции описана структура пары команда-значение и допустимые команды.

The ADI_EBIU_COMMAND is used to control/access the configuration of the EBIU module. It is used in an ADI_EBIU_COMMAND_PAIR couplet to set a configuration value in calls to adi_ebiu_Init and adi_ebiu_Control. Note that SDRAM-related commands typically begin with the text ADI_EBIU_CMD_SET_SDRAM while DDR-related commands typically begin with the text ADI_EBIU_CMD_SET_DDR.

Таблица 4-4. Команды EBIU (Command) и связанные с ними значения (Value).

Command Value
Общие команды, которые используются в обоих функциях adi_ebiu_Control и adi_ebiu_Init.
ADI_EBIU_CMD_END Определяет конец таблицы команда-значение.
ADI_EBIU_CMD_SET_SDRAM_EBUFE Значение ADI_EBIU_SDRAM_FBBRW, которая разрешает или запрещает быстрые операции back-to-back чтения/записи. См. описание ADI_EBIU_SDRAM_FBBRW.
ADI_EBIU_CMD_SET_SDRAM_CDDBG Значение ADI_EBIU_SDRAM_CDDBG, которое указывает разрешить или запретить сигналы управления SDRAM, когда внешнему контроллеру предоставлен интерфейс управления памятью. См. описание ADI_EBIU_SDRAM_CDDBG.
ADI_EBIU_CMD_SET_SDRAM_PUPSD Значение ADI_EBIU_SDRAM_PUPSD, которое указывает, должна ли быть последовательность запуска (power-up start sequence) задержана на 15 тактов SCLK. См. описание ADI_EBIU_SDRAM_PUPSD.
ADI_EBIU_CMD_SET_SDRAM_PSM Значение ADI_EBIU_SDRAM_PSM, которое задает порядок событий в последовательности запуска. См. описание ADI_EBIU_SDRAM_PSM.
ADI_EBIU_CMD_SET_ASYNCH_BANK_TRANSITION_TIME Значение ADI_EBIU_ASYNCH_BANK_TIMING, которое указывает ADI_EBIU_BANK_NUMBER и ADI_EBIU_TIMING_VALUE для времени перехода либо в тактах, либо в единицах времени. См. описание ADI_EBIU_ASYNCH_BANK_TIMING.
ADI_EBIU_CMD_SET_ASYNCH_BANK_READ_ACCESS_TIME Значение ADI_EBIU_ASYNCH_BANK_TIMING, которое указывает ADI_EBIU_BANK_NUMBER и ADI_EBIU_TIMING_VALUE для времени доступа на чтение либо в тактах, либо в единицах времени. См. описание ADI_EBIU_ASYNCH_BANK_TIMING.
ADI_EBIU_CMD_SET_ASYNCH_BANK_WRITE_ACCESS_TIME Значение ADI_EBIU_ASYNCH_BANK_TIMING, которое указывает ADI_EBIU_BANK_NUMBER и ADI_EBIU_TIMING_VALUE для времени доступа на запись либо в тактах, либо в единицах времени. См. описание ADI_EBIU_ASYNCH_BANK_TIMING.
ADI_EBIU_CMD_SET_ASYNCH_BANK_SETUP_TIME Значение ADI_EBIU_ASYNCH_BANK_TIMING, которое указывает ADI_EBIU_BANK_NUMBER и ADI_EBIU_TIMING_VALUE для времени установки (setup time) либо в тактах, либо в единицах времени. См. описание ADI_EBIU_ASYNCH_BANK_TIMING.
ADI_EBIU_CMD_SET_ASYNCH_BANK_HOLD_TIME Значение ADI_EBIU_ASYNCH_BANK_TIMING, которое указывает ADI_EBIU_BANK_NUMBER и ADI_EBIU_TIMING_VALUE для времени удержания либо в тактах, либо в единицах времени. См. описание ADI_EBIU_ASYNCH_BANK_TIMING.
Ниже даны команды, которые передаются только в функцию adi_ebiu_Init.
ADI_EBIU_CMD_SET_SDRAM_MODULE Значение ADI_EBIU_SDRAM_MODULE_TYPE, содержащее сконфигурированный модуль компании Micron. Это значение при использовании применяется ко всем банкам. См. описание ADI_EBIU_SDRAM_MODULE_TYPE.
ADI_EBIU_CMD_SET_SDRAM_BANK_SIZE Адрес структуры ADI_EBIU_SDRAM_BANK_VALUE, содержащей номер внешнего банка и его размер. См. описание ADI_EBIU_SDRAM_BANK_VALUE и ADI_EBIU_SDRAM_BANK_SIZE.
ADI_EBIU_CMD_SET_SDRAM_BANK_COL_WIDTH Адрес структуры ADI_EBIU_SDRAM_BANK_VALUE, содержащей номер внешнего банка и ширину его адреса. См. описание ADI_EBIU_SDRAM_BANK_VALUE и ADI_EBIU_SDRAM_BANK_COL_WIDTH.
ADI_EBIU_CMD_SET_SDRAM_CL_THRESHOLD Значение u32, указывающее порок частоты SCLK, который определяет используемое значение латентности CAS.
ADI_EBIU_CMD_SET_SDRAM_TRASMIN Значение ADI_EBIU_TIME, устанавливающее минимальное значение TRAS в соответствии с даташитом на используемый процессор Blackfin и даташитом на используемую память SDRAM. См. описание ADI_EBIU_TIME.
ADI_EBIU_CMD_SET_SDRAM_TRPMIN Значение ADI_EBIU_TIME, устанавливающее минимальное значение TRP в соответствии с даташитом на используемый процессор Blackfin и даташитом на используемую память SDRAM. См. описание ADI_EBIU_TIME.
ADI_EBIU_CMD_SET_SDRAM_TRCDMIN Значение ADI_EBIU_TIME, устанавливающее минимальное значение TRCD в соответствии с даташитом на используемый процессор Blackfin и даташитом на используемую память SDRAM. См. описание ADI_EBIU_TIME.
ADI_EBIU_CMD_SET_SDRAM_TWRMIN Значение ADI_EBIU_TIMING_VALUE, устанавливающее минимальное значение TWR в соответствии с даташитом на используемый процессор Blackfin и даташитом на используемую память SDRAM. См. описание ADI_EBIU_TIMING_VALUE.
ADI_EBIU_CMD_SET_SDRAM_REFRESH Значение ADI_EBIU_TIMING_VALUE, устанавливающее максимальное значение tREF в соответствии с даташитом на используемый процессор Blackfin и даташитом на используемую память SDRAM. См. описание ADI_EBIU_TIMING_VALUE.
ADI_EBIU_CMD_SET_SDGCTL_REG Слово u32, содержащее значение регистра EBIU_SDGCTL целиком.
ADI_EBIU_CMD_SET_SDBCTL_REG Слово u16, содержащее значение регистра EBIU_SDBCTL целиком.
ADI_EBIU_CMD_SET_SDRAM_EMREN Значение ADI_EBIU_SDRAM_EMREN, указывающее, используется ли SDRAM с малым потреблением энергии (low power 2.5V). См. описание ADI_EBIU_SDRAM_MODULE_TYPE.
ADI_EBIU_CMD_SET_SDRAM_PASR Значение ADI_EBIU_SDRAM_PASR, указывающее, какой из банков обновляется. Применимо только к low power SDRAM. См. описание ADI_EBIU_CMD_SET_SDRAM_PASR.
ADI_EBIU_CMD_SET_SDRAM_TCSR Значение ADI_EBIU_SDRAM_TCSR, указывающее температурно компенсированное значение самообновления. Эта команда может использоваться только для low power SDRAM. См. описание ADI_EBIU_SDRAM_TCSR.
ADI_EBIU_CMD_SET_SDRAM_SCTLE Значение ADI_EBIU_SDRAM_SCTLE, указывающее, должен ли быть разрешен SDC (контроллер SDRAM). См. описание ADI_EBIU_CMD_SET_SDRAM_SCTLE.
ADI_EBIU_CMD_SET_DDR_DATA_WIDTH Устанавливает ширину данных DDR.
ADI_EBIU_CMD_SET_DDR_EXTERNAL_BANKS Устанавливает количество внешних банков DDR.
ADI_EBIU_CMD_SET_DDR_DEVICE_WIDTH Устанавливает ширину устройства памяти DDR.
ADI_EBIU_CMD_SET_DDR_DEVICE_SIZE Устанавливает размер устройства памяти.
ADI_EBIU_CMD_SET_DDR_REFI Устанавливает интервал автообновления динамической памяти DDR.
ADI_EBIU_CMD_SET_DDR_RFC Устанавливает период команды автообновления.
ADI_EBIU_CMD_SET_DDR_CAS Устанавливает латентность CAS DDR: количество тактов от R/W до первых достоверных данных.
ADI_EBIU_CMD_SET_DDR_RCD Устанавливает интервал между активной командой и выставлением R/W.
ADI_EBIU_CMD_SET_DDR_RC Устанавливает интервал между следующими друг за другом командами активации DDR.
ADI_EBIU_CMD_SET_DDR_RAS Устанавливает интервал DDR Active - Precharge.
ADI_EBIU_CMD_SET_DDR_RP Устанавливает интервал DDR Precharge - Active.
ADI_EBIU_CMD_SET_DDR_MRD Устанавливает интервал DDR между установкой регистра режима и следующей командой.
ADI_EBIU_CMD_SET_DDR_WTR Устанавливает интервал DDR между командами записи и чтения.
ADI_EBIU_CMD_SET_DDR_WR Устанавливает время восстановления DDR.
ADI_EBIU_CMD_SET_DDR_PASR Устанавливает частичное восстановление массива DDR, используется только для mobile DDR. См. описание ADI_EBIU_DDR_PASR.
ADI_EBIU_CMD_SET_DDR_SOFT_RESET Выдача мягкого сброса DDR.
ADI_EBIU_CMD_MOBILE_DDR_ENABLE Разрешает mobile DDR.
ADI_EBIU_CMD_SET_FREQ_AS_MHZ Устанавливает частоту DDR в мегагерцах.
ADI_EBIU_CMD_SET_ASYNCH_BANK_ARDY_ENABLE Значение ADI_EBIU_ASYNCH_BANK_VALUE, указывающее номер банка и ADI_EBIU_ASYNCH_BANK_ARDY_ENABLE, задающее, должен ли оцифровываться вход ARDY для этого банка. См. описание ADI_EBIU_ASYNCH_BANK_ARDY_ENABLE.
ADI_EBIU_CMD_SET_ASYNCH_BANK_ARDY_POLARITY Значение ADI_EBIU_ASYNCH_BANK_VALUE, указывающее номер банка и ADI_EBIU_ASYNCH_BANK_ARDY_POLARITY, задающее полярность входа ARDY для этого банка. ARDY показывает завершение времени доступа. См. описание ADI_EBIU_ASYNCH_BANK_ARDY_POLARITY.
ADI_EBIU_CMD_SET_ASYNCH_BANK_16_BIT_ PACKING_ENABLE Эта команда используется только для процессоров ADSP-BF561. Значение ADI_EBIU_ASYNCH_BANK_VALUE, указывающее номер банка и ADI_EBIU_ASYNCH_BANK_DATA_PATH, задающее, разрешена ли 16-битная упаковка для этого банка. См. описание ADI_EBIU_ASYNCH_BANK_DATA_PATH.
ADI_EBIU_CMD_SET_ASYNCH_BANK_ENABLE Значение ADI_EBIU_ASYNCH_BANK_ENABLE, указывающее, какой банк должен быть разрешен. См. описание ADI_EBIU_ASYNCH_BANK_ENABLE.
ADI_EBIU_CMD_SET_ASYNCH_CLKOUT_ENABLE Значение ADI_EBIU_ASYNCH_CLKOUT, указывающее, должен ли быть разрешен или запрещен CLKOUT в глобальном регистре управления асинхронной памятью. См. описание ADI_EBIU_ASYNCH_CLKOUT.
ADI_EBIU_CMD_SET_ASYNCH_AMGCTL 16-битное числовое значение, использующееся для одновременной установки всех полей глобального регистра управления асинхронной памятью.
ADI_EBIU_CMD_SET_ASYNCH_AMBCTL0 32-битное числовое значение, использующееся для одновременной установки всех полей регистра 0 управления асинхронным банком памяти.
ADI_EBIU_CMD_SET_ASYNCH_AMBCTL1 32-битное числовое значение, использующееся для одновременной установки всех полей регистра 1 управления асинхронным банком памяти.
Команды, которые передаются только в функцию adi_ebiu_Control.
ADI_EBIU_CMD_PAIR Используется, чтобы указать функции adi_ebiu_Control, что передается одна пара команда-значение.
ADI_EBIU_CMD_TABLE Используется, чтобы указать функции adi_ebiu_Control, что передается таблица пар команда-значение.
ADI_EBIU_CMD_SET_SDRAM_ENABLE Значение ADI_EBIU_SDRAM_ENABLE разрешает/запрещает внешнюю SDRAM. См. описание ADI_EBIU_SDRAM_ENABLE.
ADI_EBIU_CMD_SET_SDRAM_SRFS Значение ADI_EBIU_SDRAM_SRFS, разрешающее/запрещающее самообновление SDRAM при отсутствии активности. См. описание ADI_EBIU_SDRAM_SRFS.
ADI_EBIU_CMD_DDR_SELF_REFRESH_REQUEST Запрос на самообновление DDR.

Тип данных ADI_EBIU_COMMAND_PAIR позволяет разработчикам генерировать таблицу команд управления для передачи в модуль EBIU с помощью функций adi_ebiu_Init и adi_ebiu_Control:

typedef struct ADI_EBIU_COMMAND_PAIR
{
   ADI_EBIU_COMMAND kind;
   void *value;
} ADI_EBIU_COMMAND_PAIR;

[Перечисления для параметра Value команд]

Следующие перечисления используются для указания информации, необходимой для настройки контроллера SDRAM. Также см. описание значений в Engineer-to-Engineer Note EE-2101 [3].

Это перечисление указывает, что нужно разрешить или запретить SDRAM. Это перечисление соответствует биту EBE в регистре EBIU_SDBCTL.

ADI_EBIU_SDRAM_EBE_DISABLE Запрещает SDRAM.
ADI_EBIU_SDRAM_EBE_ENABLE Разрешает SDRAM.

Значение по умолчанию задается следующим макросом:

#define ADI_EBIU_SDRAM_EBE_DEFAULT ADI_EBIU_SDRAM_EBE_DISABLE

Это перечисление указывает размер банка внешнего SDRAM. Это перечисление соответствует битам EBSZ в регистре EBIU_SDBCTL.

ADI_EBIU_SDRAM_BANK_16MB SDRAM 16 MB.
ADI_EBIU_SDRAM_BANK_32MB SDRAM 32 MB.
ADI_EBIU_SDRAM_BANK_64MB SDRAM 64 MB.
ADI_EBIU_SDRAM_BANK_128MB SDRAM 128 MB.

Значение по умолчанию задается следующим макросом:

#define ADI_EBIU_SDRAM_BANK_SIZE_DEFAULT ADI_EBIU_SDRAM_BANK_32MB

Это перечисление указывает размер ширину адреса столбца банка внешнего SDRAM. Это перечисление соответствует битам EBCAW в регистре EBIU_SDBCTL.

ADI_EBIU_SDRAM_BANK_COL_8BIT 8 бит
ADI_EBIU_SDRAM_BANK_COL_9BIT 9 бит
ADI_EBIU_SDRAM_BANK_COL_10BIT 10 бит
ADI_EBIU_SDRAM_BANK_COL_11BIT 11 бит

Значение по умолчанию задается следующим макросом:

#define ADI_EBIU_SDRAM_BANK_COL_WIDTH_DEFAULT ADI_EBIU_SDRAM_BANK_COL_9BIT

Это перечисление указывает тип модуля SDRAM, когда для инициализации контроллера SDRAM используется команда ADI_EBIU_CMD_SET_SDRAM_MODULE. Значение перечисления содержат относящуюся к модулю информацию, такую как скорость (speed grade) и настройки конфигурации. Размер банка внешней памяти также должен быть указан с помощью команды ADI_EBIU_CMD_SET_SDRAM_BANK_SIZE. Из-за того, что платы разработчика EZ-KIT Lite компании Analog Devices содержат SDRAM компании Micron, эта информация относится только к микросхемам памяти Micron. Список допустимых значений этого перечисления находится в заголовочном файле API adi_pwr.h.

Это перечисление указывает, что нужно разрешить или запретить контроллер SDRAM. Это перечисление соответствует биту SCTLE в регистре EBIU_SDGCTL.

ADI_EBIU_SDRAM_SCTLE_DISABLE Запрещает контроллер SDRAM.
ADI_EBIU_SDRAM_SCTLE_ENABLE Разрешает контроллер SDRAM.

Это перечисление указывает, что используется ли SDRAM с пониженным энергопотреблением (low power 2.5V). Это перечисление соответствует биту EMREN в регистре EBIU_SDGCTL.

ADI_EBIU_SDRAM_EMREN_DISABLE Mobile low power SDRAM отсутствует.
ADI_EBIU_SDRAM_EMREN_ENABLE Mobile low power SDRAM присутствует.

Значение по умолчанию задается следующим макросом:

#define ADI_EBIU_SDRAM_EMREN_DEFAULT ADI_EBIU_SDRAM_EMREN_DISABLE

Когда используется SDRAM с пониженным энергопотреблением (low power 2.5V), это перечисление задает банк для обновления. Перечисление соответствует битам PASR в регистре EBIU_SDGCTL.

ADI_EBIU_SDRAM_PASR_ALL Обновить все 4 банка SDRAM.
ADI_EBIU_SDRAM_PASR_INT01 Обновляются внутренние банки 0 и 1 SDRAM.
ADI_EBIU_PASR_INT0_ONLY Обновляется только внутренний банк 0.

Значение по умолчанию задается следующим макросом:

#define ADI_EBIU_SDRAM_PASR_DEFAULT ADI_EBIU_SDRAM_PASR_ALL

Когда используется SDRAM с пониженным энергопотреблением (low power 2.5V), это перечисление задает температурно-компенсированное значение для самообновления. Перечисление соответствует битам TCSR в регистре EBIU_SDGCTL.

ADI_EBIU_SDRAM_TCSR_45DEG Банки SDRAM обновляются, если температура превышает 45°С.
ADI_EBIU_SDRAM_TCSR_85DEG Банки SDRAM обновляются, если температура превышает 85°С.

Значение по умолчанию задается следующим макросом:

#define ADI_EBIU_SDRAM_TCSR_DEFAULT ADI_EBIU_SDRAM_TCSR_45DEG

Это перечисление указывает, нужно ли разрешить или запретить для EBIU выполнять самообновление SDRAM во время периодов отсутствия активности. Это перечисление соответствует биту SRFS в регистре EBIU_SDGCTL.

ADI_EBIU_SDRAM_SRFS_DISABLE Запрещает самообновление SDRAM во время отсутствия активности.
ADI_EBIU_SDRAM_SRFS_ENABLE Разрешает самообновление SDRAM во время отсутствия активности.

Значение по умолчанию задается следующим макросом:

#define ADI_EBIU_SDRAM_SRFS_DEFAULT ADI_EBIU_SDRAM_SRFS_DISABLE

Это перечисление указывает, нужно ли для EBIU использовать внешние буферы, когда несколько устройств SDRAM подключены к внешней шине параллельно. Это перечисление соответствует биту EBUFE в регистре EBIU_SDGCTL.

ADI_EBIU_SDRAM_EBUFE_DISABLE Запрещает использование внешних буферов.
ADI_EBIU_SDRAM_EBUFE_ENABLE Разрешает использование внешних буферов.

Значение по умолчанию задается следующим макросом:

#define ADI_EBIU_SDRAM_EBUFE_DEFAULT ADI_EBIU_SDRAM_EBUFE_DISABLE

Это перечисление указывает, должна ли быть задержана на 15 тактов SCLK последовательность старта при включении питания power-up start sequence. Это перечисление соответствует биту PUPSD в регистре EBIU_SDGCTL.

ADI_EBIU_SDRAM_PUPSD_NODELAY Отсутствие задержки.
ADI_EBIU_SDRAM_EBUFE_ENABLE Действует задержка 15 тактов SCLK.

Значение по умолчанию задается следующим макросом:

#define ADI_EBIU_SDRAM_PUPSD_DEFAULT ADI_EBIU_SDRAM_PUPSD_NODELAY

Это перечисление задает последовательность включения SDRAM (power-up sequence). Это перечисление соответствует биту PSM в регистре EBIU_SDGCTL.

ADI_EBIU_SDRAM_PSM_REFRESH_FIRST SDC (контроллер SDRAM) выполняет команду Precharge All, за которой идет 8 циклов автообновления, и затем команда загрузки регистра режима (Load Mode Register).
ADI_EBIU_SDRAM_PSM_REFRESH_LAST SDC (контроллер SDRAM) выполняет команду Precharge All, за которой идет команда загрузки регистра режима (Load Mode Register), и затем следует 8 циклов автообновления.

Значение по умолчанию задается следующим макросом:

#define ADI_EBIU_SDRAM_PSM_DEFAULT ADI_EBIU_SDRAM_PSM_REFRESH_FIRST

Это перечисление задает, использует ли EBIU быстрый доступ back-to-back read-write, чтобы позволить операции чтения и записи SDRAM в следующих друг за другом циклах. Это перечисление соответствует биту FBBRW в регистре EBIU_SDGCTL.

ADI_EBIU_SDRAM_FBBRW_DISABLE Режим доступа fast back-to-back read-write запрещен.
ADI_EBIU_SDRAM_FBBRW_ENABLE Режим доступа fast back-to-back read-write разрешен.

Значение по умолчанию задается следующим макросом:

#define ADI_EBIU_SDRAM_FBBRW_DEFAULT ADI_EBIU_SDRAM_FBBRW_DISABLE

Это перечисление разрешает или запрещает сигналы управления SDRAM, когда к интерфейсу внешней памяти параллельно подключен внешний контроллер SDRAM. Это перечисление соответствует биту CDDBG в регистре EBIU_SDGCTL.

ADI_EBIU_SDRAM_CDDBG_DISABLE Запрещает сигналы управления микросхемами памяти SDRAM, когда внешний интерфейс памяти предоставляется внешнему контроллеру.
ADI_EBIU_SDRAM_CDDBG_ENABLE Разрешает сигналы управления микросхемами памяти SDRAM.

Значение по умолчанию задается следующим макросом:

#define ADI_EBIU_SDRAM_CDDBG_DEFAULT ADI_EBIU_SDRAM_CDDBG_DISABLE

Это перечисление используется, чтобы указать номер банка 0, 1, 2 или 3 для тех команд, в которых указывается номер банка. Это перечисление также можно использовать, чтобы указать все банки.

ADI_EBIU_BANK_0 Команда предназначена для банка 0.
ADI_EBIU_BANK_1 Команда предназначена для банка 1.
ADI_EBIU_BANK_2 Команда предназначена для банка 2.
ADI_EBIU_BANK_3 Команда предназначена для банка 3.
ADI_EBIU_BANK_ALL Команда предназначена для всех банков.

Это перечисление используется, чтобы указать, какие банки разрешены. Перечисление соответствует битам AMBEN в глобальном регистре управления асинхронной памятью.

ADI_EBIU_ASYNCH_DISBALE_ALL Запрещены все банки.
ADI_EBIU_ASYNCH_BANK0 Разрешен банк 0.
ADI_EBIU_ASYNCH_BANK0_1 Разрешены банки 0 и 1.
ADI_EBIU_ASYNCH_BANK0_1_2 Разрешены банки 0, 1 и 2.
ADI_EBIU_ASYNCH_BANK0_1_2_3 Разрешены все банки.

Это перечисление задает, разрешен CLKOUT для доступа к внешней памяти. Перечисление соответствует битам AMCKEN в глобальном регистре управления асинхронной памятью.

ADI_EBIU_ASYNCH_CLKOUT_DISABLE CLKOUT запрещен.
ADI_EBIU_ASYNCH_CLKOUT_ENABLE CLKOUT разрешен.

Это перечисление относится только к процессору ADSP-BF561. Оно задает, разрешена ли 16-битная упаковка на шине асинхронной памяти. Перечисление соответствует битам BXPEN в глобальном регистре управления асинхронной памятью, где X это номер банка.

ADI_EBIU_ASYNCH_BANK_DATA_PATH_32 16-битная упаковка не разрешена.
ADI_EBIU_ASYNCH_BANK_DATA_PATH_16 16-битная упаковка разрешена.

Каждый асинхронный банк может быть запрограммирован для оцифровки входа ARDY, что позволяет расширить время доступа к банку. Анализ уровня на выводе ARDY определяет, насколько долго должно быть увеличено время доступа. Это перечисление указывает, должен или нет анализироваться сигнал ARDY. Оно соответствует биту BXRDYEN (где X это номер банка) в регистре 0 управления банком асинхронной памяти (для банков 0 и 1), или в регистре 1 управления банком асинхронной памяти (для банков 2 и 3).

ADI_EBIU_ASYNCH_ARDY_DISABLE Оцифровка ARDY запрещена.
ADI_EBIU_ASYNCH_BANK_DATA_PATH_16 Оцифровка ARDY разрешена.

Если анализ сигнала ARDY разрешен (см. предыдущую врезку), то это перечисление определяет, по какому уровню должен анализироваться сигнал ARDY (т. е. полярность ARDY). Перечисление соответствует биту BXRDYPOL (где X это номер банка) в регистре 0 управления банком асинхронной памяти (для банков 0 и 1), или в регистре 1 управления банком асинхронной памяти (для банков 2 и 3).

ADI_EBIU_ASYNCH_ARDY_POLARITY_LOW Транзакция завершена, когда на входе ARDY лог. 0.
ADI_EBIU_ASYNCH_ARDY_POLARITY_HIGH Транзакция завершена, когда на входе ARDY лог. 1.

Время удержания для контроллера асинхронной памяти указывается в поле bank_time структуры ADI_EBIU_ASYNCH_BANK_TIMING. Это поле имеет тип ADI_EBIU_TIMING_VALUE, которое в данном случае может указывать либо количество тактов, либо значение ADI_EBIU_TIME, но одновременно оба способа указания времени использовать нельзя.

Когда используются такты, перечисление ADI_EBIU_ASYNCH_HOLD_TIME задает количество тактов времени удержания. Оно соответствует биту BXHT (где X это номер банка) в регистре 0 управления банком асинхронной памяти (для банков 0 и 1), или в регистре 1 управления банком асинхронной памяти (для банков 2 и 3).

ADI_EBIU_ASYNCH_HT_0_CYCLES Время удержания 0 тактов.
ADI_EBIU_ASYNCH_HT_1_CYCLES Время удержания 1 такт.
ADI_EBIU_ASYNCH_HT_2_CYCLES Время удержания 2 такта.
ADI_EBIU_ASYNCH_HT_3_CYCLES Время удержания 3 такта.

Время установки для контроллера асинхронной памяти указывается в поле bank_time структуры ADI_EBIU_ASYNCH_BANK_TIMING. Это поле имеет тип ADI_EBIU_TIMING_VALUE, которое в данном случае может указывать либо количество тактов, либо значение ADI_EBIU_TIME, но одновременно оба способа указания времени использовать нельзя.

Когда используются такты, перечисление ADI_EBIU_ASYNCH_SETUP_TIME задает количество тактов времени установки. Оно соответствует биту BXST (где X это номер банка) в регистре 0 управления банком асинхронной памяти (для банков 0 и 1), или в регистре 1 управления банком асинхронной памяти (для банков 2 и 3).

ADI_EBIU_ASYNCH_ST_4_CYCLES Время установки 4 такта.
ADI_EBIU_ASYNCH_ST_1_CYCLES Время установки 1 такт.
ADI_EBIU_ASYNCH_ST_2_CYCLES Время установки 2 такта.
ADI_EBIU_ASYNCH_ST_3_CYCLES Время установки 3 такта.

Время перехода для контроллера асинхронной памяти указывается в поле bank_time структуры ADI_EBIU_ASYNCH_BANK_TIMING. Это поле имеет тип ADI_EBIU_TIMING_VALUE, которое в данном случае может указывать либо количество тактов, либо значение ADI_EBIU_TIME, но одновременно оба способа указания времени использовать нельзя.

Когда используются такты, перечисление ADI_EBIU_ASYNCH_TRANSITION_TIME задает количество тактов времени перехода. Оно соответствует биту BXTT (где X это номер банка) в регистре 0 управления банком асинхронной памяти (для банков 0 и 1), или в регистре 1 управления банком асинхронной памяти (для банков 2 и 3).

ADI_EBIU_ASYNCH_TT_4_CYCLES Время перехода 4 такта.
ADI_EBIU_ASYNCH_TT_1_CYCLES Время перехода 1 такт.
ADI_EBIU_ASYNCH_TT_2_CYCLES Время перехода 2 такта.
ADI_EBIU_ASYNCH_TT_3_CYCLES Время перехода 3 такта.

Это перечисление задает нагрузочную способность шины (drive strength) для устройства памяти. Это значение записывается в поле DS регистра EBIU_DDRCTL3. Перечисление ADI_EBIU_DDR_MOBILE_DS используется только для микросхем mobile DDR. Для не мобильных DDR см. ADI_EBIU_DDR_DS. Возможные значения перечисления ADI_EBIU_DDR_MOBILE_DS перечислены в таблице ниже.

ADI_EBIU_DDR_DS_1 00: полная нагрузочная способность.
ADI_EBIU_DDR_DS_2 01: половинная нагрузочная способность.
ADI_EBIU_DDR_DS_4 10: 1/4 от полной нагрузочной способности.
ADI_EBIU_DDR_DS_8 11: 1/8 от полной нагрузочной способности.

Это перечисление задает нагрузочную способность шины (drive strength) для устройства памяти. Это значение записывается в поле DS регистра EBIU_DDRCTL3. Перечисление ADI_EBIU_DDR_DS используется только для микросхем не мобильных DDR. Для мобильных DDR см. ADI_EBIU_DDR_MOBILE_DS. Возможные значения перечисления ADI_EBIU_DDR_DS перечислены в таблице ниже.

ADI_EBIU_DDR_DS_FULL 00: полная нагрузочная способность.
ADI_EBIU_DDR_DS_REDUCED 01: сниженная нагрузочная способность (по умолчанию).

Это перечисление задает значение для частичного самообновления массива (partial array self-refresh), которое записывается в поле PASR регистра EBIU_DDRCTL3. Это поле доступно только для микросхем мобильных DDR. Возможные значения перечисления ADI_EBIU_DDR_PASR перечислены в таблице ниже.

ADI_EBIU_DDR_PASR_1 0: полный массив (все банки).
ADI_EBIU_DDR_PASR_2 1: половина массива.
ADI_EBIU_DDR_PASR_4 2: четверть массива.
ADI_EBIU_DDR_PASR_RESERVED3 3: зарезервированное значение.
ADI_EBIU_DDR_PASR_RESERVED4 4: зарезервированное значение.
ADI_EBIU_DDR_PASR_8 5: 1/8 массива.
ADI_EBIU_DDR_PASR_16 6: 1/16 массива.

[Ссылки]

1. VisualDSP++ 5.0 Device Drivers and System Services Manual for Blackfin® Processors site:analog.com.
2. Служба управления питанием процессоров Blackfin.
3. Selection Guidelines and Configuration for ADI Processors, EE-210, Rev 2, August 2004 site:analog.com.
4. ADSP-BF538: блок интерфейса внешней шины.