Скачать 1.7 Mb.
|
Примечание: требуемое состояние конфигурационных регистров, приведенное в процедуре конфигурации файла Xintf.c определяется по файлам pdf, показанным ранее. С этого момента программа уже может выполняться на процессоре, в данном случае после загрузки в память и запуска программы будет запущен «вечный» цикл. Вводим в проект файл main.h следующего содержания: #include "DSP281x_DefaultIsr.h" #include "DSP281x_Device.h" extern const struct PIE_VECT_TABLE PieVectTableInit; extern Uint16 secureRamFuncs_loadstart; extern Uint16 secureRamFuncs_loadend; extern Uint16 secureRamFuncs_runstart; extern void InitSysCtrl(void); extern void InitXintf(void); extern void InitPieCtrl(void); extern void InitFlash(void); В каждом c-файле делаем подключение файла main.h через #include "main.h" Соответственно файл main.c должен выглядеть как: #include "main.h" long int a=0; void main() { InitSysCtrl(); InitXintf(); // Section secureRamFuncs contains user defined code that runs from CSM secured RAM memcpy( &secureRamFuncs_runstart, &secureRamFuncs_loadstart, &secureRamFuncs_loadend - &secureRamFuncs_loadstart); while(1) a++; } Программное обеспечение обеспечивает работу в реальном времени за счет возникающих прерываний. Для этого нужно правильно сконфигурировать те периферийные регистры, которые отвечают за механизм прерываний процессора. Копируем файл PieCtrl_nonBIOS.c в каталог src и добавляем его в проект. В процедуре инициализации периферийных прерываний: asm(" SETC INTM, DBGM"); // Disable global interrupts - глобальное запрещение всех прерываний. PieCtrlRegs.PIECRTL.bit.ENPIE = 0; // Disable the PIE - запрещение периферийных прерываний на время конфигурации (в конце процедуры будет разрешение); asm(" EALLOW"); // Enable EALLOW //protected register access - разрешение записи в защищенные регистры; memcpy(&PieVectTable, &PieVectTableInit, 256); - копирование в адреса регистров периферийных прерываний начальных значений; asm(" EDIS"); - запрет записи в защищенные регистры; PieCtrlRegs.PIEIER1.all = 0x0000; - запрещение прерываний первого уровня и т.д.; PieCtrlRegs.PIEACK.all = 0xFFFF; - подтверждение случившихся ранее прерываний с целью снятия флага случившегося прерывания для пропуска следующего прерывания. PieCtrlRegs.PIECRTL.bit.ENPIE = 1; - разрешение периферийных прерываний. Начальные значения регистров периферийных прерываний находятся в файле PieVect_nonBIOS.c , где объявлены структурой const. Копируем этот файл .c в каталог src и добавляем его в проект. Добавляем в файл main.c вызов процедуры инициализации периферийных прерываний. Текст файла main.c должен выглядеть следующим образом: #include "main.h" long int a=0; void main() { InitSysCtrl(); InitXintf(); InitPieCtrl(); // Section secureRamFuncs contains user defined code that runs // from CSM secured RAM memcpy( &secureRamFuncs_runstart, &secureRamFuncs_loadstart, &secureRamFuncs_loadend - &secureRamFuncs_loadstart); InitFlash(); while(1) a++; } При возникновении прерывания должна быть вызвана соответствующая процедура для осуществления необходимой реакции. Шаблоны процедур обслуживания прерываний находятся в файле DefaultIsr_nonBIOS.c – копируем в каталог src и добавляем в проект. Нас интересует прерывание по периоду первого таймера – находим его процедуру в файле DefaultIsr_nonBIOS.c: interrupt void T1PINT_ISR(void)// 0x000D56 T1PINT (EV-A) { PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; // Must acknowledge the PIE group // Next two lines for debug only - remove after inserting your ISR asm (" ESTOP0"); // Emulator Halt instruction while(1); } Здесь применено ключевое слово языка С interrupt для обозначения процедуры обслуживания прерываний. T1PINT_ISR – сокращенное имя прерывания. PieCtrlRegs.PIEACK.all = PIEACK_GROUP2 – подтверждение обслуживания прерывания. По этому флагу процессор пропускает вперед ранее случившееся прерывание и не дает пройти вперед позднее случившемуся прерыванию. Если флаг не снять, то следующее прерывание обработано не будет. asm (" ESTOP0"); - запуск ассемблерной команды останова процессора в случае если процессор работает совместно с эмулятором. Без эмулятора выполнение такой команды эквивалентно ассемблерной команде NOP (нет операции). while(1); - строка для принудительного зависания процессора, применяется для отладки с целью выявления запуска ненужных процедур обработки прерываний. Последние две строчки для реальных процедур обработки прерываний необходимо убирать!!! Для того, чтобы получить прерывание, нужно сконфигурировать источник прерывания. В данном случае событием прерывания будет достижение периода первого таймера. Конфигурируем таймер №1. Для этого копируем файл Ev.c в каталог src и добавляем его в проект. В нем уже произведена настройка таймера на 2 кГц при симметричном режиме работы (событие периода соответственно вырабатывается на частоте 1 кГц). Добавляем вызов инициализации менеджера событий (в состав которого входит таймер) InitEv(); в файл main.c. Согласно файлу SPRS174N.pdf (см.рис.11) прерывание таймера по периоду T1PINT находится во втором уровне (INT2), периферийное прерывание 4 (INTx.4). Далее произведем корректировку регистра периферийных прерываний с целью разрешения прерывания таймера по периоду. Основное - EvaRegs.EVAIMRA.all = 0x0000; // запрещаем прерывания менеджера событий EvaRegs.EVAIFRA.all = 0xFFFF;, // снимаем флаги ждущих прерываний EvaRegs.T1CON.all = 0x0000; // запрещаем таймер EvaRegs.T1CNT = 0x0000; // обнуляем счетчики таймера EvaRegs.T1PR = 586; // устанавливаем период EvaRegs.DBTCONA.all = 0x0000; // выставляем “мертвое” время EvaRegs.CMPR1 = 586/2; // задаем значение сравнения EvaRegs.T1CON.all = 0xCf40; // инициализируем режимы работы и запуск таймера /* bit 15-14 11: FREE/SOFT, 11 = ignore emulation suspend bit 13 0: reserved bit 12-11 01: TMODEx, 01 = continous-up/down count mode bit 10-8 000: TPSx, 000 = x/1 prescaler bit 7 0: T2SWT1, 0 = use own TENABLE bit bit 6 1: TENABLE, 1 = enable timer bit 5-4 00: TCLKS, 00 = CPUCLK is clock source bit 3-2 00: TCLD, 00 = reload compare reg on underflow bit 1 0: TECMPR, 0 = disable timer compare bit 0 0: SELT1PR, 0 = use own period register */ EvaRegs.EVAIMRA.bit.T1PINT = 1; // генерация прерывания таймером PieCtrlRegs.PIEIER2.all = M_INT4; //разрешение периферийного прерывания IER |= M_INT2 // разрешение второго уровня прерывания Значение T1PR рассчитывалось следующим образом: Необходимо получить частоту 1000 кГц. Выбираем делитель входной частоты как 128 (биты 10-8). Получаем 150000000/128= 1171875, где 150000000 – тактовая частота процессора. Таймер назначаем на двунаправленный счет (верх-вниз 12-11 биты). 1171875/2=585937,5 Так как нужно получить 1000 Гц, то 585937,5/1000=585,9375 586. Для меньшей погрешности при округлении необходимо было выбирать меньший входной делитель частоты. Рис.11 В файле DefaultIsr_nonBIOS.c у процедуры обслуживания прерывания первого таймера по периоду делаем следующие изменения (комментируем последние 2 строчки, добавляем объявление переменной b вне процедуры и инкрементирование переменной в теле самой процедуры). int b=0; /******************************************************/ interrupt void T1PINT_ISR(void) // 0x000D56 T1PINT (EV-A) { PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; // Must acknowledge the PIE group EvaRegs.EVAIMRA.bit.T1PINT = 1; EvaRegs.EVAIFRA.all = BIT7; // Next two lines for debug only - remove after inserting your ISR // asm (" ESTOP0"); // Emulator Halt instruction // while(1); b++; } Первые три строчки в теле процедуры снимают флаги ожидания для разрешения прохождения следующих по времени таких же прерываний. Их вводить в каждую процедуру обработки прерывания обязательно! В текст main.c перед запуском “вечного” цикла устанавливаем глобальное разрешение прерываний: asm(" CLRC INTM, DBGM"); - это означает снятие бита глобального маскирования (запрещения) прерываний. Теперь сделаем мигание светодиода за счет вывода на пин процессора IOPF14 значений «0» или «1». Информация о дискретном однобитовом интерфейсе процессора находится в файле spru712.pdf. Для инициализации дискретных портов копируем в каталог src файл Gpio.c, подключаем его к проекту, а в процедуру main вводим вызов процедуры инициализации InitGpio(); Главное в этом файле: 1. Конфигурация пина процессора на дискретную функцию (а не специальную, которая для данного процессора означает отражение на пине состояния системного бита процессора XF): GpioMuxRegs.GPFMUX.bit.XF_GPIOF14 = 0; 2. Конфигурация этого пина процессора как дискретный вывод: GpioMuxRegs.GPFDIR.bit.GPIOF14 = 1; 3. Вывод на пин логической «1» GpioDataRegs.GPFSET.bit.GPIOF14 = 1. Теперь IOPF14 сконфигурирована на вывод дискретного сигнала, изначально выводится «1». Модернизируем процедуру обслуживания прерывания в файле DefaultIsr_nonBIOS.c следующим образом: int long unsigned b=0; /*************************************************/ interrupt void T1PINT_ISR(void) // 0x000D56 T1PINT (EV-A) { PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; // Must acknowledge the PIE group EvaRegs.EVAIMRA.bit.T1PINT = 1; EvaRegs.EVAIFRA.all = BIT7; // Next two lines for debug only - remove after inserting your ISR // asm (" ESTOP0"); // Emulator Halt instruction // while(1); b++; if (b<500) GpioDataRegs.GPFDAT.bit.GPIOF14 = 1; else { GpioDataRegs.GPFDAT.bit.GPIOF14 = 0; if (b>1000)b=0; } } Примечание. На практике лучше использовать не GPFSET, а GPFDAT с указанием вывода «0» или «1». В результате после запуска программы светодиод мигает частотой 1 Гц. Проект готов для дальнейшего использования. Для создания проекта, генерирующего код для исполнения во флеш-памяти процессора, воспользуемся теми же самыми файлами. Создаем новый проект по вышеописанному способу, подключаем все файлы из предыдущего проекта, делаем настройки в build options и т.д. Также необходимо добавить следующие файлы в проект: DelayUs.asm – файл кода генерации стандартной задержки; CodeStartBranch.asm – код перехода на вектор _c_int00 после сброса/подачи питания; passwords.asm – пароль на код. Для перехода на проект, генерирующего файл для прошивания во ПЗУ, необходимо также изменить содержимое командного файла в части SECTION. Готовый файл с необходимым изменениями - f2812_nonBIOS_flash.cmd. Копируем этот файл в папку cmd, подключаем в проект, файл f2812_nonBIOS_ram.cmd из проекта удалить. Изменения между этими файлами показаны в таблице 2. Необходимо на плате eZdsp задать с помощью перемычек режим запуска процессора при включении с флеш-памяти. Для этого необходимо JP1 установить в положение 2-3 (микропроцессорный режим), JP7 – в положение 1-2 (запуск программы из флеш-памяти). Более подробно о выборе положения перемычек можно прочесть в файле 2812_ezdsp_TechRef_A.pdf. Прошивка осуществляется через Tools – F28xx – OnChip Flash Programmer (процессор до выполнения этой операции должен выйти на связь с CCS). Окно показано ниже (рис.12). Для прошивания программы необходимо указать файл для прошивки с расширением out, и нажать кнопку Execute Operation. Для ускорения процесса прошивки возможно снять знаки «галочки» с последних полей Sector. Также при прошивке необходимо убедиться в правильности выставленных параметров Clock Configuration, SYSCLOCKOUT должен быть равен для процессора 2812 значению 150. 00000. Значения Code Security Password не менять. После прошивания откомпилированной программы во флеш-память можно отключить питание – при следующем включении питания происходит автоматический запуск программы, светодиод платы начинает мигать. Таблица 2
Рис.12 |
Учебно-методическое пособие Рекомендовано методической комиссией... Методы молекулярной диагностики: Учебно-методическое пособие. Авторы: А. Д. Перенков, Д. В. Новиков, С. Г. Фомина, Л. Б. Луковникова,... |
Учебно-методическое пособие Елабуга 2016 ббк 74. 58 Учебно-методическое... Методическое пособие предназначено для студентов 1 курса высших учебных заведений неязыковых специальностей |
||
Учебно-методическое пособие по клинической фармакологии Оренбург, 2007 Учебно-методическое пособие предназначено для самостоятельной работы студентов медицинских вузов, обучающихся по специальности «Лечебное... |
Методическое пособие Саратов 2008 г. Организация комплексной системы... Методическое пособие предназначено для руководителей и преподавателей- организаторов обж образовательных учреждений |
||
Учебно-методическое пособие ... |
Организация и технология документационного обеспечения управления учебно-методическое пособие ... |
||
Учебно-методическое пособие «Учебные игры и ситуационные задачи в... Учебные игры и ситуационные задачи в гинекологии: Учебно-методическое пособие / Под ред. А. А. Радионченко. – Томск: Сибгму,... |
Учебно-методическое пособие Казань 2010 Печатается по рекомендации... Учебно-методическое пособие по курсу «Организационное поведение» /Д. М. Сафина. – Казань: Казанский (Приволжский) федеральный университет;... |
||
Учебно-методическое пособие. Новосибирск, 2006 Учебно-методическое пособие предназначено инструкторам детско-юношеского и спортивного туризма с целью повышения уровня знаний и... |
Учебно-методическое пособие к лабораторным занятиям по курсу «Основы кристаллооптики» Практическое руководство по работе с поляризационным микроскопом для исследования петрографических объектов: Учебно-методическое... |
||
Учебно-методическое пособие организация инженерной защиты населения Учебно-методическое пособие разработано применительно к Программе обучения слушателей на курсах гражданской защиты Копейского городского... |
Учебно-методическое пособие Санкт-Петербург 2007 Автор: Черемисов... Учебно-методическое пособие предназначено для подготовки руководящего состава, специалистов гочс и пб, руководителей служб, аварийно-спасательных... |
||
Учебно-методическое пособие для студентов пм. 04.(07.) «Выполнение... Учебно-методическое пособие составлено в соответствии с требованиями Федерального Государственного образовательного стандарта по... |
Учебно-методическое пособие санкт-Петербург 2009г. Автор: Г. П. Подвигин... Учебно-методическое пособие предназначено для должностных лиц, специалистов го и рсчс организаций |
||
Учебно-методическое пособие Кемерово 2015 г. Согласовано: кроо «памск» Учебно-методическое пособие предназначено для студентов стоматологического факультета, гигиенистов стоматологических со средним медицинским... |
Федеральное государственное образовательное учреждение Высшего профессионального... Вакуумный практикум: Учебно-методическое пособие. Ростов-на-Дону, 2008. 55с |
Поиск |