Учебно-методическое пособие Томск 2007


Скачать 1.7 Mb.
Название Учебно-методическое пособие Томск 2007
страница 3/16
Тип Учебно-методическое пособие
rykovodstvo.ru > Руководство эксплуатация > Учебно-методическое пособие
1   2   3   4   5   6   7   8   9   ...   16

Примечание: требуемое состояние конфигурационных регистров, приведенное в процедуре конфигурации файла 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


ПЗУ проект


ОЗУ проект



SECTIONS

{

/*** Compiler Required Sections ***/

/* Program memory (PAGE 0) sections */

.text : > FLASH_AB, PAGE = 0

.cinit : > FLASH_CD, PAGE = 0

.const : > FLASH_CD, PAGE = 0

.econst : > FLASH_CD, PAGE = 0

.pinit : > FLASH_CD, PAGE = 0

.reset : > RESET, PAGE = 0, TYPE = DSECT /* We are not using the .reset section */

.switch : > FLASH_CD, PAGE = 0
/* Data Memory (PAGE 1) sections */

.bss : > L1SARAM, PAGE = 1

.ebss : > L1SARAM, PAGE = 1

.cio : > M0SARAM, PAGE = 1

.stack : > M1SARAM, PAGE = 1

.sysmem : > L1SARAM, PAGE = 1

.esysmem : > L1SARAM, PAGE = 1
/*** User Defined Sections ***/

codestart : > BEGIN_FLASH, PAGE = 0 /* Used by file CodeStartBranch.asm */

csm_rsvd : > CSM_RSVD, PAGE = 0 /* Used by file passwords.asm */

passwords : > PASSWORDS, PAGE = 0 /* Used by file passwords.asm */

secureRamFuncs : LOAD = FLASH_AB, PAGE = 0 /* Used by InitFlash() in SysCtrl.c */

RUN = L0SARAM, PAGE = 0

LOAD_START(_secureRamFuncs_loadstart),

LOAD_END(_secureRamFuncs_loadend),

RUN_START(_secureRamFuncs_runstart)

}



SECTIONS

{

/*** Compiler Required Sections ***/

/* Program memory (PAGE 0) sections */

.text : > H0SARAM, PAGE = 0

.cinit : > H0SARAM, PAGE = 0

.const : > L0SARAM, PAGE = 0

.econst : > L0SARAM, PAGE = 0

.pinit : > H0SARAM, PAGE = 0

.reset : > RESET, PAGE = 0, TYPE = DSECT /* We are not using the .reset section */

.switch : > H0SARAM, PAGE = 0
/* Data Memory (PAGE 1) sections */

.bss : > L1SARAM, PAGE = 1

.ebss : > L1SARAM, PAGE = 1

.cio : > M0SARAM, PAGE = 1

.stack : > M1SARAM, PAGE = 1

.sysmem : > L1SARAM, PAGE = 1

.esysmem : > L1SARAM, PAGE = 1
/*** User Defined Sections ***/

codestart : > BEGIN_H0, PAGE = 0 /* Used by file CodeStartBranch.asm */

csm_rsvd : > CSM_RSVD, PAGE = 0, TYPE = DSECT /* Not used in RAM example */

passwords : > PASSWORDS, PAGE = 0, TYPE = DSECT /* Not used in RAM example */

secureRamFuncs : LOAD = H0SARAM, PAGE = 0 /* Used by InitFlash() in SysCtrl.c */

RUN = L0SARAM, PAGE = 0

LOAD_START(_secureRamFuncs_loadstart),

LOAD_END(_secureRamFuncs_loadend),

RUN_START(_secureRamFuncs_runstart)

}




Рис.12
1   2   3   4   5   6   7   8   9   ...   16

Похожие:

Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие Рекомендовано методической комиссией...
Методы молекулярной диагностики: Учебно-методическое пособие. Авторы: А. Д. Перенков, Д. В. Новиков, С. Г. Фомина, Л. Б. Луковникова,...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие Елабуга 2016 ббк 74. 58 Учебно-методическое...
Методическое пособие предназначено для студентов 1 курса высших учебных заведений неязыковых специальностей
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие по клинической фармакологии Оренбург, 2007
Учебно-методическое пособие предназначено для самостоятельной работы студентов медицинских вузов, обучающихся по специальности «Лечебное...
Учебно-методическое пособие Томск 2007 icon Методическое пособие Саратов 2008 г. Организация комплексной системы...
Методическое пособие предназначено для руководителей и преподавателей- организаторов обж образовательных учреждений
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие
...
Учебно-методическое пособие Томск 2007 icon Организация и технология документационного обеспечения управления учебно-методическое пособие
...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие «Учебные игры и ситуационные задачи в...
Учебные игры и ситуационные задачи в гинекологии: Учебно-ме­то­ди­чес­кое пособие / Под ред. А. А. Радионченко. – Томск: Сибгму,...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие Казань 2010 Печатается по рекомендации...
Учебно-методическое пособие по курсу «Организационное поведение» /Д. М. Сафина. – Казань: Казанский (Приволжский) федеральный университет;...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие. Новосибирск, 2006
Учебно-методическое пособие предназначено инструкторам детско-юношеского и спортивного туризма с целью повышения уровня знаний и...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие к лабораторным занятиям по курсу «Основы кристаллооптики»
Практическое руководство по работе с поляризационным микроскопом для исследования петрографических объектов: Учебно-методическое...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие организация инженерной защиты населения
Учебно-методическое пособие разработано применительно к Программе обучения слушателей на курсах гражданской защиты Копейского городского...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие Санкт-Петербург 2007 Автор: Черемисов...
Учебно-методическое пособие предназначено для подготовки руководящего состава, специалистов гочс и пб, руководителей служб, аварийно-спасательных...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие для студентов пм. 04.(07.) «Выполнение...
Учебно-методическое пособие составлено в соответствии с требованиями Федерального Государственного образовательного стандарта по...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие санкт-Петербург 2009г. Автор: Г. П. Подвигин...
Учебно-методическое пособие предназначено для должностных лиц, специалистов го и рсчс организаций
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие Кемерово 2015 г. Согласовано: кроо «памск»
Учебно-методическое пособие предназначено для студентов стоматологического факультета, гигиенистов стоматологических со средним медицинским...
Учебно-методическое пособие Томск 2007 icon Федеральное государственное образовательное учреждение Высшего профессионального...
Вакуумный практикум: Учебно-методическое пособие.  Ростов-на-Дону, 2008.  55с

Руководство, инструкция по применению




При копировании материала укажите ссылку © 2024
контакты
rykovodstvo.ru
Поиск