Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++ - [14]
>.const IDMA= 0x3fe0;
>.const BDMA_BIAD= 0x3fe1;
>.const BDMA_BEAD= 0x3fe2;
>.const BDMA_BDMA_Ctrl= 0x3fe3;
>.const BDMA_BWCOUNT= 0x3fe4;
>.const PFDATA= 0x3fe5;
>.const PFTYPE= 0x3fе6;
>.const SPORT1_Autobuf= 0x3fef;
>.const SPORT1_RFSDIV= 0x3ff0;
>.const SPORT1_SCLKDIV= 0x3ff1;
>.const SPORT1_Control_Reg= 0x3ff2;
>.const SPORT0_Autobuf= 0x3ff3;
>.const SPORT0_RFSDIV= 0x3ff4;
>.const SPORT0_SCLKDIV= 0x3ff5;
>.const SPORT0_Control_Reg= 0x3ff6;
>.const SPORT0_TX_Channels0= 0x3ff7;
>.const SPORT0_TX_Channels1= 0x3ff8;
>.const SPORT0_RX_Channels0= 0x3ff9;
>.const SPORT0_RX_Channels1= 0x3ffa;
>.const TSCALE= 0x3ffb;
>.const TCOUNT= 0x3ffс;
>.const TPERIOD= 0x3ffd;
>.const DM_Wait_Reg= 0x3ffe;
>.const System_Control_Reg= 0x3fff;
Описание этих символьных имен и их соответствие адресам памяти данных процессора приведено в табл. 6.1.
Таблица 6.1 Описание символьных имен регистров управления и состояния процессора ADSP-2181
Имя | Описание | Адрес |
---|---|---|
IDMA | Регистр управления IDMA | 0x3FE0 |
BDMA_BIAD | Регистр внутреннего адреса BDMA | 0x3FE1 |
BDMA_BEAD | Регистр внешнего адреса BDMA | 0x3FE2 |
BDMA_BDMA_Ctrl | Регистр управления BDMA | 0x3FE3 |
BDMA_BWCOUNT | Регистр счетчика слов BDMA | 0x3FE4 |
PFDATA | Регистр данных программируемых флагов | 0x3FE5 |
PFTYPE | Регистр управления программируемыми флагами | 0x3FE6 |
SPORT1_Autobuf | Регистр управления автобуферизацией SPORT1 | 0x3FEF |
SPORT1_RFSDIV | Регистр делителя кадровых импульсов SPORT1 | 0x3FF0 |
SPORT1_SCLKDIV | Регистр делителя тактовых импульсов SPORT1 | 0x3FF1 |
SPORT1_Control_Reg | Регистр управления SPORT1 | 0x3FF2 |
SPORT0_Autobuf | Регистр управления автобуферизацией SPORT0 | 0x3FF3 |
SPORT0_RFSDIV | Регистр делителя кадровых импульсов SPORT0 | 0x3FF4 |
SPORT0_SCLKDIV | Регистр делителя тактовых импульсов SPORT0 | 0x3FF5 |
SPORT0_Control_Reg | Регистр управления SPORT0 | 0x3FF6 |
SPORT0_TX_Channels0 | Регистр младшего слова передатчика SPORT0 | 0x3FF7 |
SPORT0_TX_Channels1 | Регистр старшего слова передатчика SPORT0 | 0x3FF8 |
SPORT0_RX_Channels0 | Регистр младшего слова приемника SPORT0 | 0x3FF9 |
SPORT0_RX_Channels1 | Регистр старшего слова приемника SPORT0 | 0x3FFA |
TSCALE | Регистр масштабирования таймера | 0x3FFB |
TCOUNT | Регистр счетчика таймера | 0x3FFC |
TPERIOD | Регистр периода таймера | 0x3FFD |
DM_Wait_Reg | Регистр тактов ожидания памяти данных | 0x3FFE |
System_Control_Reg | Регистр управления системой | 0x3FFF |
Как видно из содержимого данного файла, в каждой его строке производится директивное назначение определенному символьному имени конкретного числового значения. Символьные имена могут быть произвольными, важно только, чтобы они одинаково записывались в данном файле и в самой программе. В дальнейшем мы часто будем использовать символьное описание регистров, для обращения к ним по записи или чтению из программы. В частности, в нашей программе mem_clr.dsp содержатся строки команд для обращения к регистру конфигурирования PFTYPE и регистру данных PFDATA программируемых флагов PF процессора. Файл def2181.h должен находиться в том же каталоге, в котором будет храниться файл программы во время ее трансляции. Иначе компилятор выдаст сообщение об ошибке во время компиляции программы.
Далее, в файле программы начинается запись команд. Поскольку с нулевого адреса памяти программ должны быть записаны векторы прерываний или их обработчики, первой располагается команда перехода jump BEGIN на начало программы, а затем команды возврата из прерывания rti для каждого из прерываний процессора. Все команды должны заканчиваться точкой с запятой, в соответствии с требованиями синтаксиса ассемблера. Заметьте, что в одной строке присутствует сразу несколько команд. Такая запись допускается компилятором ассемблера. Так как для каждого вектора прерывания в памяти программ отведено по четыре 24-разрядных ячейки памяти, а каждая команда процессора занимает одну 24-разрядную ячейку памяти, то оставшиеся неиспользованные ячейки памяти заполняются пустыми командами пор. Сразу же после метки BEGIN записаны команды инициализации конфигурационного регистра флагов PFTYPE с помощью рабочего регистра ax0 блока ALU процессора. Непосредственная запись константы в память данных не поддерживается процессором. Ниже располагаются строки комментариев с пояснением назначения каждого бита регистра флагов PFTYPE. Подобные записи позволяют хорошо документировать программу и облегчают тем самым ее отладку и последующее сопровождение. Аналогично описанным выше записям, в программе присутствуют строки команд записи в регистр данных PFDATA программируемых флагов слова управления светодиодом. Далее следуют команды инициализации некоторых регистров сигнального процессора. В частности, команда i0 = ^buf_dm; производит инициализацию индексного регистра, входящего в блок DAG сигнального процессора, т.е. присваивает индексному регистру i0 значение адреса начала буфера buf_dm, располагающегося в памяти данных процессора. Аналогично происходит инициализация других регистров этого блока и инициализация регистра ar блока ALU. Я намеренно указал на принадлежность регистров блокам процессора, для того чтобы показать связь между архитектурой процессора и выполняемой программой и тем самым облегчить понимание того, что происходит в самом процессоре при выполнении перечисленных команд программы. Далее в программе организуется циклическое заполнение памяти данных процессора значением регистра ar. После чего организуется цикл, состоящий из команд инвертирования выходного флага FL2 процессора и заполнения нулевой ячейки памяти регулярно увеличивающимся значением из регистра ar. Кроме того, в данном цикле организовано чтение состояния входов PF0-PF3 процессора и запись этих значений в ячейку памяти данных по адресу 1. Это сделано для того, чтобы при работе программы можно было увидеть с помощью осциллографа генерацию сигнала на выводе FL2, а также следить за изменением значений ячеек памяти с помощью симулятора или других аппаратно-программных средств, убеждаясь тем самым в правильной работе программы и нормальном функционировании процессора. Завершает программу директива окончания модуля программы endmod. В общем случае структура файла должна быть следующей:
Эта книга не просто энциклопедический перечень виноделов и виноградарей, но одновременно и учебник, и покупательский гид. Ее цель — превратить вас в более знающего и уверенного покупателя, достаточно осведомленного о «закулисных» деталях, чтобы при покупке вина вы могли сделать самый разумный выбор.
Выбор и покупка подержанного автомобиля в России до недавнего времени были лотереей. Проигрыш в этой лотерее означал сотни тысяч рублей, выпущенных на ветер. Однако эта книга, представляющая собой краткое руководство по приобретению б/у машины, а также услуги нашего сервиса «АвтоКод» помогут свести риск нарваться на мошенников к нулю!
Форматирование файла не завершено (Stribog).Эти не только древние, но и интересные рецепты не потеряли актуальности и в нынешнее время. Правда, хочу заметить, что не все из них безопасны. Особенно те, где используется ртуть и соли тяжелых металлов (в частности это касается раздела «Парфюмерия»). Так что думайте Сами.С уважением, Сергей Каштанов.
Руководство предназначается для изучения тактико-технических характеристик, устройства принципа действия, правил применения, хранения и транспортировки противотанковой мины ТМ-72 и минного взрывателя МВН-72.
rufb2edit 0.0.908 сен 2015http://lifehacker.ru/2015/01/22/chitat-v-3-raza-bystree/web2fb2_201509080815_87756238791.0Учимся читать в три раза быстрее за 20 минут - ЛайфхакерИя Зорина 22 января 2015Учимся читать в три раза быстрее за 20 минутУмение быстро читать освобождает кучу свободного времени. Только представьте, вы можете в три раза быстрее справляться со всей литературой — технической, профессиональной или художественной. А теперь приятная новость: в отличие от большинства навыков, которые нужно осваивать постепенно, скорочтение доступно вам уже через 20 минут тренировки.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.