Программирование DSP ADSP-BF538: рекомендации по разработке системы Sat, April 20 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

ADSP-BF538: рекомендации по разработке системы Печать
Добавил(а) microsin   

В этом разделе документации (перевод главы "21 SYSTEM DESIGN" даташита [1]) дана информация по аппаратным, программным и системным аспектам разработки, которые должны помочь инженерам создавать системы на основе процессора Blackfin. Опции дизайна, выбранные при разработке, влияют на стоимость, производительность (соотношение скорости работы и энергопотребления) и системные требования. Во многих случаях решения проблем разработки, упомянутые здесь, в подробном рассмотрении можно найти в других разделах руководства [1]. В подобных случаях будет дана ссылка на соответствующие секции текста оригинального руководства или другие ссылки, вместо повторения одного и того же материала.

Описание выводов. Обратитесь к документу "ADSP-BF538/ADSP-BF538F Embedded Processor Data Sheet", который можно найти на сайте analog.com, или также см. [2].

Рекомендации по не используемым выводам. Иногда не используемые выводы требуют специального терминирования. Соответствующую информацию см. "ADSP-BF538/ADSP-BF538F Embedded Processor Data Sheet", также см. [2].

[Сброс процессора]

В дополнение к режиму аппаратного сброса, предоставляемого выводом ~RESET, процессор поддерживает несколько программных режимов сброса (software reset). Подробное описание этих возможностей см. в секции "System Reset and Power-up", состояние процессора после сброса описано в секции "Reset State" [1] (также см. врезку "Состояние сброса" статьи [3]).

[Загрузка процессора (boot)]

Программа (и данные) могут быть загружены для выполнения в память системы с помощью различных методов загрузки [4]. Эти методы включают загрузку из внешней 16-битной памяти, из ROM (ПЗУ с кодом загрузки, встроенное в ядро), сконфигурированного для загрузки кода из 8-битной памяти flash, или загрузки из последовательной микросхемы ROM (с 8-битным, 16-битным или 24-битным диапазоном адресов). Подробно про режимы загрузки (boot modes), см. раздел "Booting Methods" [1], также см. статью [4].

На рис. 21-1 и 21-2 показаны соединения, требуемые для 8-битной и 16-битной загрузки соответственно. Обратите внимание, что подключение адресов сделано одинаковым способом как для 8-битного, так и 16-битного периферийных устройств. Используется только младший байт каждого 16-битного слова, когда осуществляется доступ к памяти с шириной слова в 1 байт.

Например, при чтениях ядра в форме:

R0 = W[P0] (Z);   //P0 указывает на выровненную по 16 битам ячейку
                  // асинхронной памяти

Только младшие 8 бит R0 содержат действительное значение, прочитанное из 8-битного устройства памяти.

Для записей ядра в форме:

W[P0] = R0.L;     //P0 указывает на выровненную по 16 битам ячейку
                  // асинхронной памяти

8-битное значение, предназначенное для записи в 8-битное устройство памяти, должно быть сначала загружено в младший байт регистра R0.

Подробнее про систему команд ассемблера Blackfin можно почитать в [5].

ADSP BF538 Interface 8 bit SRAM or FLASH fig21 1

Рис. 21-1. Подключение загрузочной 8-битной памяти SRAM или FLASH.

ADSP BF538 Interface 16 bit SRAM or FLASH fig21 2

Рис. 21-2. Подключение загрузочной 16-битной памяти SRAM или FLASH.

[Управление тактированием]

Системы могут подавать тактовую частота на тактовые входы с помощью подключения кварцевого резонатора (кварц подключается к выводам CLKIN и XTAL), либо на вход CLKIN может подаваться частота с выхода буфера внешнего тактового генератора. Во время нормального функционирования нельзя приостанавливать, менять, или манипулировать сигналом на CLKIN ниже указанной частоты. Процессор использует тактовый вход CLKIN, чтобы генерировать внутренние сигналы тактирования. Это сигналы тактирования ядра (CCLK) и тактирования периферийных устройств и внешней синхронной динамической памяти (SCLK).

Примечание: также иногда применяется еще один кварц на частоту 32768 Гц, предназначенный для часов реального времени (RTC).

Управление частотами CCLK и SCLK. Процессор делает умножение (на программно выбранный коэффициент) частоты на входе CLKIN, и генерирует из неё с помощью петли PLL внутреннюю частоту VCO, которая напрямую нигде не используется. Эта частота VCO делится (на другой программно выбранный коэффициент), чтобы получить тактовую частоту ядра (core clock, CCLK) и тактовую частоту системной шины (system clock, SCLK). Частота ядра базируется на коэффициенте деления, программируемом полем бит CSEL регистра PLL_DIV. Частота системной шины базируется на коэффициенте деления, программируемом полем бит SSEL регистра PLL_DIV. Подробную информацию о том, как устанавливать и менять частоты CCLK и SCLK, см. Главу 8 "Dynamic Power Management" даташита [1]. Также см. перевод этой главы и онлайн-калькулятор частот в статье [6]. Имеется также библиотека ADI (Analog Devices) adi_pwr, предоставляющая функции по управлению питанием, есть описание этой библиотеки и примеры использования в составе IDE VisualDSP++ (см. [7]).

[Конфигурирование и обслуживание прерываний]

Имеется множество аппаратных источников, которые могут генерировать прерывания. Это включает как прерывания от ядра, так и прерывания от периферийных устройств. Процессор назначает приоритеты ядра по умолчанию (core priorities) для прерываний системного уровня (system-level interrupts). Однако программист может переназначить эти системные прерывания (приоритеты) через специальные регистры назначения прерываний (System interrupt Assignment registers, SIC_IARx). Для получения дополнительной информации см. "System Interrupt Assignment (SIC_IARx) Registers" [1], также см. перевод этой документации в статье [3].

Ядро процессора поддерживает вложенные друг в друга прерывания (nested interrupts) и не вложенные прерывания (non-nested interrupts), как и прерывания, которые могут быть вложены сами в себя. По умолчанию вложенность отключена, но её можно включить. Как это делается и другие подробности см. в секции "Nesting of Interrupts" [1], также см. перевод этой документации в статье [3].

[Семафоры]

Семафоры (Semaphores) предоставляют механизм коммуникаций между отдельными процессорами (ядрами) или процессами/потоками (processes/threads), работающими одновременно в одной системе. Семафоры используются для координации пользования общими ресурсами и синхронизации вычислений. Например, если процесс использует какой-то определенный ресурс (например, UART или другое периферийное устройство, или объект в памяти), и другой параллельно работающий процесс требует того же самого ресурса, то этот другой процесс должен ожидать, пока первый процесс отправит через семафор сигнал, что ресурс свободен, и его можно занять. Такая сигнализация между потоками осуществляется с помощью семафоров - один поток ждет на семафоре (путем вызова PendSemafore), и другой поток посылает сигнал другому потоку публикацией семафора (вызовом PostSemafore), после чего ожидающий поток возобновляет свое выполнение.

Когерентность работы семафоров гарантируется с помощью атомарной (atomic) инструкции проверки и установки байта (TESTSET). Инструкция TESTSET выполняет следующие функции:

• Загружает половину слова из указанной ячейки памяти (ячейка указывается с помощью P-регистра). Содержимое P-регистра (адрес ячейки) должен быть выровнен на половину слова (т. е. байтовый адрес должен нацело делиться на 2).
• Установит CC, если загруженное значение равно 0.
• Сохранит значение обратно в свое оригинальное место расположения, но при этом самый значащий бит (MSB) младшего байта устанавливается в 1.

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

Чтобы гарантировать, что операция сохранения была сброшена из кэша (буфера) в действительное место хранения, выполните инструкцию SSYNC сразу после освобождения семафора (примечание: при использовании библиотечных функций ADI для работы с семафорами [8] это делается автоматически). Инструкция TESTSET может быть использована для реализации двоичных семафоров или любого другого типа реализации метода взаимного исключения (mutual exclusion). Инструкция TESTSET поддерживает требования на уровне системы для механизма многоцикловой блокировки шины. Процессор ограничивает использование инструкции TESTSET только для области внешней памяти. Использование инструкции TESTSET для адреса любой другой области памяти или регистров, привязанных к адресному пространству процессора, может привести к непредсказуемому поведению кода.

Пример опроса семафора. Листинг 21-1 предоставляет пример опроса семафора, чем проверяется доступность общего ресурса.

// Листинг 21-1. Query Semaphore (опрос семафора).
/* При опросе семафора он считается занятым ("Busy"), если его значение
   не равно 0. Происходит ожидание освобождения семафора (или продолжение
   выполнения потока планировщиком, см. примечание ниже). Регистр
   указателя P0 хранит адрес семафора. */
QUERY:
   TESTSET ( P0 );
   IF !CC JUMP QUERY;
/* В этой точке кода семафор предоставлен текущему потоку, и выполнение
   всех другие конкурирующих потоков (ожидающих семафора) будет приостановлено
   (отложено), потому что семафор, т. е. значение, на которое указывает P0,
   станет ненулевым. Текущий поток может записать идентификатор потока в
   ячейку семафора, чтобы показать, какой поток в настоящий момент является
   текущем владельцем семафора (ресурса). */
   R0.L = THREAD_ID;
   B[P0] = R0;
/* Когда использование общего ресурса завершено, в ячейку [P0]
   записывается нулевое значение */
   R0 = 0;
   B[P0] = R0;
   SSYNC;
/* ВНИМАНИЕ: вместо того, чтобы в этом месте выполнить ожидание с выполнением
   циклов по метке QUERY, можно использовать вызов операционной системы
   для блокировки текущего потока на семафоре, чтобы под управлением
   планировщика задать его последующий запуск. */

[Задержки данных, латентность и полоса пропускания]

Для получения подробной информации о латентности (задержках) при доступе к данным, что влияет на производительность процессора и DMA при обмене данными по внешним шинам, см. Главу 7 "Chip Bus Hierarchy" [1]. В этой же главе объясняется принцип работы приоритетов для различных внутренних шин.

[Проблемы дизайна, связанные с внешней шиной]

В этом разделе обсуждаются вопросы, связанные с использованием внешней памяти (SRAM, SDRAM, FLASH).

Пример асинхронных интерфейсов памяти. Здесь показано прозрачное подключение процессора Blackfin к 16-битному ОЗУ (SRAM). Обратите внимание, что этот интерфейс не требует выставления сигнала ARDY, поскольку внутренний счетчик состояния ожидания не требует задержки для заранее предопределенного доступа к памяти такого типа. Рис. 21-3 показывает подключения системы, требуемое для поддержки 16-битных устройств асинхронной памяти. Модель программирования должна гарантировать, что данным осуществляется строго выровненный доступ по 16 битам (байтовый адрес должен нацело делиться на 2).

ADSP BF538 Interface 16 bit SRAM fig21 3

Рис. 21-3. Интерфейс к 16-битной SRAM.

Использование SDRAM меньше 16 мегабайт. Для процессора ADSP-BF538 можно использовать память SDRAM размером меньше 16M байт, если подразумевается четкое результирующее изменение карты памяти процессора. Рис. 21-4 показывает пример, где SDRAM на 2 мегабайта (организация 2 банка, каждый 512K ячеек по 16 бит) отображена на адресное пространство через интерфейс внешней памяти.

В этом примере к банку происходит обращение по адресу из 11 строк (row address) и 8 столбцов (column address). Если посмотреть в таблицу 18-5, самый малый доступный размер банка (16 мегабайт) для устройства с адресом из 8 столбцов имеет 2 сигнала адреса банка (IA[23:22]) и 13 адресов строки (IA[21:9]). Таким образом, 1 сигнал адреса банка и 2 сигнала адреса строки не используются, что мы видим в этом примере. Это приводит к тому, в карте внешней памяти процессора образуются "дырки", потому что SDRAM отображается на прерывающиеся регионы в адресном пространстве процессора.

ADSP BF538 using small SDRAM fig21 4

Рис. 21-4. Использование SDRAM малого размера.

Таблица 18-5. Привязка внутренних адресов.

Размер банка, мегабайт (биты EBSZ)
Ширина адреса столбца (биты EBCAW)
Размер страницы, кбайт
Адрес банка
Адрес строки Страница
Адрес столбца Адрес байта
128
11 4 IA[26:25] IA[24:12] IA[11:1] IA[0]
10 2 IA[24:11] IA[10:1] IA[0]
9 1 IA[24:10] IA[9:1] IA[0]
8 0.5 IA[24:9] IA[8:1] IA[0]
64
11 4 IA[25:24] IA[23:12] IA[11:1] IA[0]
10 2 IA[23:11] IA[10:1] IA[0]
9 1 IA[23:10] IA[9:1] IA[0]
8 0.5 IA[23:9] IA[8:1] IA[0]
32
11 4 IA[24:23] IA[22:12] IA[11:1] IA[0]
10 2 IA[22:11] IA[10:1] IA[0]
9 1 IA[22:10] IA[9:1] IA[0]
8 0.5 IA[22:9] IA[8:1] IA[0]
16
11 4 IA[23:22] IA[21:12] IA[11:1] IA[0]
10 2 IA[21:11] IA[10:1] IA[0]
9 1 IA[21:10] IA[9:1] IA[0]
8 0.5 IA[21:9] IA[8:1] IA[0]

В соответствии с таблицей рисунка 21-4, каждая строка в таблице соответствует 2^19 байтам, или 512 килобайтам. Таким образом, привязка SDRAM на 2 мегабайта к адресному пространству Blackfin приводит к отсутствию непрерывности ОЗУ, что показано в левой части рисунка. Само собой, это должно быть учтено при написании программы (отображено в описании регионов памяти файла LDF проекта VisualDSP++).

[Управление обновлением SDRAM при перенастройках PLL]

Поскольку частота обновления SDRAM (refresh rate) привязана к частоте SCLK, то снижение SCLK после того, как SDRAM сконфигурирована, может привести к недостаточной частоте обновления, что в результате может повредить данные, находящиеся в SDRAM. С другой стороны, повышение SCLK после конфигурирования SDRAM приведет к снижению эффективности SDRAM, поскольку обновление приостанавливает обращения процессора к динамическому ОЗУ, в результате слишком частые обновления приводят к нежелательным задержкам и лишним затратам процессорного времени.

В системах, где используется SDRAM рекомендуется следующая процедура для изменения VCO при перестройке PLL:

1. Выдайте инструкцию SSYNC, чтобы гарантировать, что завершены все текущие операции, ожидающие доступности памяти.
2. Установите режим самообновления SDRAM (self-refresh mode) путем записи 1 в бит SRFS регистра EBIU_SDGCTL.
3. Выполните необходимую последовательность программирования PLL (см. Главу 8 "Dynamic Power Management" [1], или перевод в статье [6]).
4. После того, как произошло пробуждение (wake-up), что обозначает корректную перенастройку PLL на новую частоту VCO, перепрограммируйте частоту обновления SDRAM (refresh rate) с помощью регистра управления EBIU_SDRRC. В него должно быть записано новое значение для счетчика обновления, соответствующее новой частоте SCLK.
5. Выведите SDRAM из режима самообновления (self-refresh) очисткой бита SRFS регистра EBIU_SDGCTL. Если это требует изменения регистра режима SDRAM, запишите также эти изменения в регистр EBIU_SDGCTL и убедитесь, что установлен бит PSSE.

Изменение частоты SCLK с помощью битов SSEL в регистре PLL_DIV, в отличие от изменения частоты VCO, должно осуществляться следующими шагами:

1. Выдайте инструкцию SSYNC, чтобы гарантировать, что завершены все текущие операции, ожидающие доступности памяти.
2. Установите режим самообновления SDRAM (self-refresh mode) путем записи 1 в бит SRFS регистра EBIU_SDGCTL.
3. Выполните нужную запись в биты SSEL.
4. Перепрограммируйте частоту обновления SDRAM через регистр управления EBIU_SDRRC новым значением счетчика, соответствующим новой частоте SCLK.
5. Выведите SDRAM из режима самообновления (self-refresh) очисткой бита SRFS регистра EBIU_SDGCTL. Если это требует изменения регистра режима SDRAM, запишите также эти изменения в регистр EBIU_SDGCTL и убедитесь, что установлен бит PSSE.

Обратите внимание, что шаги 2 и 4 не обязательно нужно выполнять, если SCLK меняется в сторону повышения, однако должны всегда выполняться, когда снижается частота SCLK.

Для дополнительной информации по обновлению динамического ОЗУ (SDRAM refresh), см. раздел "SDRAM Controller (SDC)" [1] (см. также перевод в статье [9]).

[Как избежать конфликтов на шине]

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

Есть 2 случая, когда может возникнуть конфликт. Первый случай - чтение, за которым идет запись в ту же самую область памяти. В этом случае драйверы шины данных могут потенциально конфликтовать с драйверами устройства памяти, когда устройство было адресовано на чтение. Второй случай это чтение типа back-to-back из двух разных областей памяти. В этом случае два устройства памяти поочередно подключают свои выходы к шине данных, когда одно чтение идет за другим, что потенциально может привести к конфликтам между двумя операциями чтения.

Чтобы избежать конфликта, запрограммируйте соответствующее время "полного рейса" (turnaround time, или время перехода между банками, bank transition time) в регистрах управления асинхронными банками памяти. Эта функция позволяет программному обеспечению установить количество тактов между этими типами доступа на базе перехода от банка к банку. Минимально интерфейс внешней шины (external bus interface unit, EBIU) предоставляет один такт для осуществления перехода.

[Проблемы высокочастотного дизайна]

Из-за того, что процессор может работать на очень высоких тактовых частотах, в разработке разводки печатной платы должно учитываться качество передачи сигналов (signal integrity) и устранение проблем шума и помех. В последующих секциях обсуждаются эти вопросы, и даются советы применения различных техник в разработке и отладке систем обработки сигналов (DSP).

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

Для сглаживания фронтов и снижения помех Вы можете последовательно подключить резистор рядом с выводом, на котором осуществляется соединение точка-точка. Обычно приложения, использующие последовательный порт, используют такой тип терминирования, когда расстояние соединительной линии сигнала превышает 6 дюймов (152 мм). Подробное описание решения проблем терминирования линий передачи ищите в специальной литературе (пример см. во врезке). Также см. даташит на процессор ADSP-BF538/ADSP-BF538F, где даны параметры времени нарастания и спада данных для выходных драйверов.

Эта книга - технический справочник, который касается проблем, с которыми встречаются разработчики при проектировании высокочастотных цифровых схем. Это отличный источник полезной информации и практических идей. В книге рассматриваются следующие темы:

• Высокочастотные свойства логических элементов
• Техники измерения
• Линии передачи
• Заливки медью, многослойные печатные платы
• Терминирование сигналов
• Переходные отверстия в печатной плате (via)
• Системы питания
• Коннекторы (соединители)
• Ленточные кабели
• Нарушения тактирования
• Тактовые генераторы

Примечание: здесь не рассматриваются вопросы проектирования аналоговых частей схемы (усилители, фильтры, входные цепи АЦП), которые также должны быть учены для построения системы с минимальным уровнем помех.

Качество передачи сигналов (Signal Integrity). Емкостная паразитная нагрузка на высокоскоростных сигналах должна быть максимально уменьшена, насколько это возможно. Нагрузка шин может быть уменьшена с использованием буферов для устройств, которые могут работать с тактами ожидания (например, микросхемы динамической памяти, DRAM). Это снижает емкость сигналов, подключенных к устройствам, которые переключают свои выходы в третье состояние, что позволяет таким сигналам быстрее переключаться, и снижает генерирование помех по питанию из-за импульсных токов перезарядки паразитных емкостей.

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

Другие рекомендации и предложения, способствующие целостности сигналов:

• Используйте многослойную плату с несколькими (желательно не меньше двух) сплошными медными заливками медью для шины земли (ground plane), чтобы уменьшить перекрестные помехи между сигналами, т. е. влияние сигналов друг на друга из-за паразитных емкостей (crosstalk). Убедитесь, что используете достаточное количество перемычек (переходов) между этими слоями. Эти заливки должны находиться в середине печатной платы.

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

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

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

Блокирующие конденсаторы и заливки медью. Для шин земли и питания должны использоваться заливки медью (ground plane), выполненные как на сигнальных, так и на отдельных внутренних слоях печатной платы. Развязывающие (блокирующие помехи по питанию) конденсаторы должны быть размещены в максимальной близости к выводам VDDEXT и VDDINT корпуса процессора, как показано на рис. 21-5. Используйте короткие и толстые проводники для шин питания. Вывод земли конденсаторов должен подключаться напрямую к заливке медью, конденсаторы должны находиться либо максимально близко к корпусу процессора при размещении конденсаторов на верхнем слое платы, либо находиться непосредственно под корпусом процессора, когда конденсаторы размещены на обратной стороне печатной платы.

ADSP BF538 Bypass Capacitor Placement fig21 5

Рис. 21-5. Размещение на печатной плате блокировочных конденсаторов по питанию.

Соединяйте заливки медью с выводами питания процессора проводниками минимальной длины. Заливки медью не должны иметь много пустот, и должны иметь многочисленные переходы между слоями и/или проводниками, чтобы повысить эффективность шин земли и питания. Дополнительно к керамическим конденсаторам (0.1 - 0.22 мкф) на плате должны присутствовать несколько больших танталовых конденсаторов (10 - 22 мкф).

Примечание: разводка платы может использовать один из вариантов размещения конденсаторов - сверху или снизу платы, см. рис. 21-5 - либо использовать комбинацию этих вариантов. Разработчик платы должен стараться минимизировать использование внутренних заливок медью для передачи сигналов, чтобы избежать появления окон в заливках.

Осциллограф и его щупы. При проведении высокочастотных экспериментов используйте "байонетный" тип подключения земляного проводника щупа, чтобы его петля была минимальной длины (< 0.5 дюйма).

oscilloscope probe short bayonet

Чтобы снизить нагрузку тестируемых сигналов, щуп должен иметь низкую входную емкость порядка 3 пикофарад, что обычно достигается только применением специальных активных щупов. При использовании стандартного земляного коннектора с "крокодилом" (длиной порядка 4 дюйма) в исследуемом высокочастотном сигнале будут видны паразитные колебания ("звон"). Чтобы корректно наблюдать переходы уровней сигналов, требуется осциллограф с полосой пропускания не меньше 1 ГГц и соответствующей частотой выборок сигнала (sample rate).

[Ссылки]

1. ADSP-BF538/ADSP-BF538F Blackfin® Processor Hardware Reference site:analog.com.
2. Blackfin ADSP-BF538.
3. ADSP-BF538: обработка событий (прерывания, исключения).
4. Как происходит загрузка ADSP-BF533 Blackfin.
5. Blackfin: система команд (ассемблер).
6ADSP-BF538: динамическое управление питанием.
7. Служба управления питанием процессоров Blackfin.
8. VDK: сигналы, взаимодействие потоков и ISR (синхронизация).
9. ADSP-BF538: блок интерфейса внешней шины.

 

Добавить комментарий


Защитный код
Обновить

Top of Page