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


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

Примечание: запись “..\ ” означает, что обращение происходит не из текущего каталога, а из родительского (который на один уровень по иерархии выше).


  1. Выполнить File-New-DSP|BIOS Configuration, в открывшемся окне выбрать dsk2812.cdb. Данный файл будет содержать конфигурацию операционной системы DSP/BIOS.

  2. Выполнить сохранение файла в каталог Source.

  3. Добавить в проект все файлы с исходными текстами (файлы *.c) из каталога Source через Projects-Add files to projects.

  4. Добавить в проект файл конфигурации операционной системы (файл *.cdb) из каталога Source через Projects-Add files to projects.

  5. Скопировать в папку проекта файл DSP281x_Headers_BIOS.cmd (командный файл распределения карты памяти) и добавить его в проект через Projects-Add files to projects.

  6. Выполнить компиляцию и компоновку проекта через Project-Build.

  7. Если возникли ошибки при компиляции, то необходимо устранить их. Список ошибок формируется в окне сообщений, открывающемся внизу экрана. Номер и положение ошибки показываются красной строкой. Рекомендуется устранять ошибки начиная с первой, для чего необходимо бегунок полосы прокрутки переместить в верхнее положение. Двойное нажатие мыши по красной строке приводит к появлению на экране файла, в котором находится данная ошибка, курсор мигает в строке, где находится ошибка. После исправлений необходимо заново выполнить Project-Build, вплоть до того момента, когда окно сообщений выведет:

«0 Errors, 0 Warnings, 0 Remarks».

  1. Открыть окно настроек среды программирования через Option-Customize…, в закладке Program/Project Load установить галочку напротив пункта Load Program After Build. Это приведет к тому, что после выполнения компиляции проекта через Project-Build произойдет автоматическая загрузка скомпилированного кода в память микропроцессора отладочной платы. Если плата не подключена (не было успешно выполнено Debug-Connect), то загрузка кода не произойдет.

  2. Подключить отладочную плату к порту компьютера, подайть на нее питание. Выполнить подключение среды программирования к отладочной плате посредством Debug-Connect.

  3. Выполнить Project-Build, при этом произойдет компиляция и загрузка кода в память микропроцессора отладочной платы. Созданный проект не выполняет никаких действий пользователя, кроме как инициализации процессора.

  4. В окне дерева проекта (находится слева) раскрыть структуру проекта, раскрыть ветку DSP/BIOS config, дважды кликнуть мышью по появившемуся файлу, который отвечает за конфигурацию операционной системы. В результате откроется окно конфигурации операционной системы.

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

  6. Найти PRD – Periodic Function Manager (менеджер организации периодических задач), кликнуть по иконке правой клавишей и в появившемся контекстном меню выбрать Insert PRD. У ветки появится ответвление PRD0, что свидетельствует о том, что в системе появилось периодически выполняемое прерывание. Для удаления прерывания (если необходимо) нажать клавишу DEL (в данном пункте этого делать не надо). Для изменения имени прерывания необходимо кликнуть по иконке PRD0 левой клавишей и в появившейся строчке редактирования ввести новое имя (в данном пункте этого делать не надо).

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

  8. В свойстве окна period (ticks) ввести значение 1000, что означает, что прерывание будет запускаться один раз за 1000 ms, то есть раз в секунду.

  9. В свойстве function необходимо ввести имя процедуры, необходимой для запуска при срабатывании прерывания. В данном случае введем _prd_ISR1. Обязательно при конфигурации в данном окне должен находиться символ «_» перед именем процедуры. В исходном тексте данная процедура будет прописана так же, но без знака «_» перед именем процедуры.

  10. Нажать ОК для закрытия окна конфигурации.

  11. В файле исходного текста appDSP.c ввести следующий текст:

int a=0;

void prd_ISR1()

{

a++;

}

Данный исходный текст реализует простейшую задачу – увеличивает значение переменной «а» на единицу при каждом выполнении, которое запускается 1 раз в секунду.


  1. Выполнить Project-Build, убедиться в отсутствии ошибок компиляции. Выполняемый код загрузится в память микропроцессора отладочной платы автоматически.

  2. Для отслежевания работы программы вывести окно WatchWindow (View - WatchWindow), в появившется окне выбрать закладку Watch1, в клетку столбца Name ввести имя той переменной, характер изменения которой необходимо наблюдать. В данном случае это переменная «a».

  3. Включить режим отладки в реальном времени через Debug – RealTime Mode, в появившемся окне ответить «Да» (ОК).

  4. Щелкнуть правой клавишей мыши по окну WatchWindow и выбрать Continuous Refresh (постоянное обновление показаний).

  5. Запустить программу через Debug-Run. Наблюдать увеличение на единицу значения переменной «а» в окне WatchWindow с периодом одна секунда. Таким образом, созданная программа содержит операционную среду, которая запускает процедуру пользователя с заданной периодичностью.

  6. Остановить выполнение программы через Debug-Halt, выключить режим отладки в реальном времени Debug-RealTime (галочка напротив пункта должна быть снята).


Примечание. Необходимо всегда соблюдать порядок запуска программы:

Компиляция и загрузка кода, включение режима отладки в реальном времени, запуск программы. Также необходимо всегда соблюдать порядок останова программы: останов программы (Debug – Halt), выключение режима отладки в реальном времени. Неправильный порядок включения режима отладки может привести к зависанию среды программирования. В последних версиях CodeComposerStudio (например 3.1.23) возможность неправильного запуска/останова исключена.
Задание для самостоятельного выполнения

Ввести в программу еще одну задачу пользователя, которая реализует функцию инкрементирования (увеличения на единицу) для переменной «b» в 10 раз быстрее, чем ранее созданная задача.

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

  1. Ввести программное прерывание. Для этого раскрыть SWI-Software Interrupt Manager (менеджер организации программных прерываний) и на иконке SWI-Software Interrupt Manager щелкнуть правой клавишей мыши. В появившемся контекстном меню выбрать Insert SWI. В ответвлении от SWI-Software Interrupt Manager появится программное прерывание под именем SWI0.

  2. Для изменения свойств прерывания (приоритет, запускаемая процедура) щелкнуть по иконке прерывания правой клавишей мыши и в появившемся контекстном меню выбрать Properties. Установить приоритет прерывания в поле priority (например, «4»). Установить имя процедуры, которая будет выполняться при выполнении прерывания в поле function (например, _isr_SWI_0). Перед началом имени процедуры необходимо установить символ «_», в исходном тексте его необходимо опустить.

  3. Подключить заголовочный файл, необходимый для работы с функциями API (Application programming interface) операционной системы. Для запуска программных прерываний необходимо подключить файл swi.h. В файл appDSP.c вставить директиву #include

  4. Ввести в исходный текст программы описание имени прерывания SWI0, которое появилось в конфигурации операционной системы: extern SWI_Obj SWI0;

  5. В файл appDSP.c (в конец) вставить код, который будет выполняться при срабатывании введенного программного прерывания SWI0:

int c=0;

void isr_SWI_0()

{

c++;c++;

}

38. Добавить в процедуру void prd_ISR1() строку SWI_post(&SWI0), которая будет запускать программное прерывание из этой процедуры:
int a=0;

void prd_ISR1()

{

a++;

SWI_post(&SWI0):

}

SWI0 – имя прерывания, показывающееся в окне конфигурации операционной системы, в SWI-Software Interrupt Manager. SWI_post – имя функции API.


  1. Запустить созданную программу на выполнение, наблюдать изменение переменных « a» и «с». Увеличение переменной «с» происходит в 2 раза быстрее ввиду двойного инкрементирования.

Процессор имеет на своем борту несколько периферийных устройств, которые могут генерировать прерывания, полный список приведен в файле SPRS174N.pdf., вырезка из него показана на рисунке:



Рис.14

Рассмотрим конфигурацию через DSP-BIOS прерывания по событию от процессорного таймера, входящего в состав менеджера событий.

  1. Для конфигурации прерывания таймера необходимо через окно конфигурации операционной системы посредством HWI –Hardware interrupt Service Routine Manager (менеджера процедур обслуживания прерывания) выйти на подгруппу PIE Interrupts (периферийные прерывания). Событие прерывания таймера может быть сгенерировано на 2 уровне (прерывание таймера по периоду носит на данном уровне номер 4). Найти иконку PIE_INT2_4, посредством клика правой клавиши мыши по этой иконке вызвать контекстное меню, в котором выбрать Properties (настройка свойств). На закладке Dispatcher выставить галочку в свойстве Use Dispatcher (обязательно!). В закладке General установить в поле function имя процедуры, которая будет вызываться при срабатывании прерывания , например _timer_ISR (с символом «_» перед именем в этом окне, без символа «_» в тексте программы).

  2. В файл initDSP.c добавить процедуру конфигурации таймера (задание типа счета, периода и т.д.)



void Timer_init(void)

{

// Initialize EVA Timer 1:

// Setup Timer 1 Registers (EV A)

EvaRegs.GPTCONA.all = 0;

// Set the Period for the GP timer 1 to 0x0200;

EvaRegs.T1PR = 0x0200; // Period

EvaRegs.T1CMPR = 0x0000; // Compare Reg

// Enable Period interrupt bits for GP timer 1

// Count up, x128, internal clk,

// enable compare, use own period

EvaRegs.EVAIMRA.bit.T1PINT = 1;

EvaRegs.EVAIFRA.bit.T1PINT = 1;
// Clear the counter for GP timer 1

EvaRegs.T1CNT = 0x0000;

EvaRegs.T1CON.all = 0x1742;
// Start EVA ADC Conversion on timer 1 Period interrupt

EvaRegs.GPTCONA.bit.T1TOADC = 2;
}


  1. Добавить в файл appDSP.c в процедуру main (в конец) следующее:

Timer_init(); // вызов процедуры инициализации

PieCtrlRegs.PIEIER2.all = M_INT4;

// разрешение прерывания таймера

IER |= M_INT2;

// разрешение периферийных прерываний 2-ого уровня

EINT; // глобальное разрешение прерываний
Полный вид процедуры main будет следующим:

void main()

{

Sys_init();

Timer_init();

PieCtrlRegs.PIEIER2.all = M_INT4;

IER |= M_INT2;

EINT;

}


  1. Добавить в файл appDSP.c в процедуру отработки прерывания таймера:

int d=0;

void timer_ISR()

{

EvaRegs.EVAIMRA.bit.T1PINT = 1;

EvaRegs.EVAIFRA.all = BIT7;

PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;

d++;

}

  1. Запустить созданную программу и наблюдать изменение переменной «d».

Существует возможность вывода информации на ножки процессора (spru712.pdf). В плате отладочного набора светодиод управляется с одного из пинов процессора. Сейчас будет рассмотрен пример создания эффекта мигающего светодиода.

45. Сконфигурировать ножки процессора как однобитовые порты, работающие на вывод. Для этого ввести следующую процедуру конфигурации (в файле initDSP.c):
void Gpio_init(void)

{

EALLOW;

GpioMuxRegs.GPFMUX.all=0x0000;

GpioMuxRegs.GPFDIR.all=0xffff;

EDIS;

}


  1. преобразовать код процедуры void prd_ISR1() в следующий:

void prd_ISR1()

{

a++;

SWI_post(&SWI0);
if (a%2) GpioDataRegs.GPFDAT.all =0xAAAA;

else GpioDataRegs.GPFDAT.all =0x5555;

}



  1. Добавить в процедуру main инициализацию портов битового вывода Gpio_init()

  2. Запустить программу и наблюдать мигание светодиода с частотой 0,5 Гц.


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


  1. Добавить задачу в окне конфигурирования операционной системы через TSK-TaskManager (менеджер организации задач). Нажатие правой клавишей по иконке вызывает контекстное меню, в котором надо выбрать InsertTSK. В ответвлении появляется задача с имененм TSK0.

  2. Настроить свойства появившейся задачи, для чего выполнить нажатие правой клавиши мыши по иконке задачи и в появившемся контекстном меню выбрать Properties. В появившемся окне назначить приоритет задачи (поле Priority закладки General), в данном случае приоритет можно не менять, и назначить имя процедуры, которая будет выполняться (поле Task Function закладки Function); в данном случае назначим _s_TSK0 (символ «_» обязателен в данном окне перед самим именем). После задания параметров нажать ОК для закрытия окна свойств задачи.

  3. В файл appDSP.c добавить процедуру расчета для введенной в проект задачи:

long int e=0;

void s_TSK0()

{

while (1)

{

e++;

}

}
Данная процедура осуществляет постоянное инкрементирование переменной «е», имитируя тем самым сложный расчет, не требующий выдачи результата к жестко установленному моменту времени с заданной периодичностью. Все время процессора, не занятое выполнением процедур обслуживания прерываний, будет выделено на инкрементирование переменной «е». Объявление переменной как long необходимо для выполнения будущих пунктов.


  1. Откомпилировать проект, запустить программу на выполнение и наблюдать изменение переменной «e».

  2. Ввести очередную задачу, с более высоким приоритетом (например, 4). В качестве процедуры обслуживания применить следующую:

long int f=0;

void s_TSK1()

{

while (1)

{

f++;

}

}



  1. Наблюдать изменение переменных «e» и «f». Ввиду того, что приоритет второй задачи выше, происходит выполнение только ее процедуры и соответственно меняется только переменная «f».


Для того, чтобы работали обе задачи (то есть происходило переключение между ними по различным событиям), необходимо использовать механизм семафоров операционной системы. Рассмотрим пример, в котором одна задача умеет только инкрементировать (добавлять единицу) заданную переменную, а вторая – декрементировать (вычитать единицу) ту же самую переменную. Основной целью разрабатываемой программы будет удержание значения переменной в рамках заданного диапазона путем переключения между двумя задачами. Воспользуемся функциями SEM_pend (ожидать выставления семафора) и SEM_post (выставить семофор.) Соответственно, более приоритетная задача, для того чтобы дать возможность работать менее приоритетной задаче, должна выставить ожидание семафора, тем самым отложив свое исполнение, и операционная система в таком случае запустит менее приоритетную задачу. Менее приоритетная задача должна произвести свои вычисления, после которых выставить семафор, тем самым запуская более приоритетную задачу, находящуюся в ожидании выставления семафора. В нашем случае более приоритетная задача – TSK1.


  1. Дополнить код процедур обслуживания задач до следующего вида:

long int e=0;long int f=0;

void s_TSK0()// менее приоритетная задача

{

while(1)

{

e++;

if (e>20000000) SEM_post(&mySEM);

f=e/100000;

}

}
void s_TSK1()// более приоритетная задача

{

while(1)

{

e--;

if (e<1) SEM_pend(&mySEM,20000);

f=e/100000;

}

}
В данном коде имя семафора – mySEM. Переменная «е» используется для постоянного изменения с целью удержания ее в заданном дипазоне. Переменная «f» используется для масштабирования с целью удобства визуализации процессов вычисления при отладке.


  1. В окне конфигурации операционной системы ввести новый семафор через SEM-Semaphore manager (менеджер организации семафоров), ветка от Synchronization. Для этого щелкнуть правой клавишей мыши по иконке SEM-Semaphore manager и в появившемся контекстном меню выполнить Insert SEM (вставить семафор). В результате появится семафор под именем SEM0. Переименовать его (путем нажатия левой клавиши мыши по названию) в mySEM.

  2. Вставить в файл appDSP.c заголовочный файл sem.h и объявление наличия mySEM, введенного в окне конфигурации операционной системы.

#include

extern SEM_Obj mySEM;


  1. Откомпилировать и запустить программу, наблюдать изменение переменной «f». Должно происходить последовательное циклическое изменение этой переменной в диапазоне от 1 до 200.


Итоговое содержание файла appDSP.c:
#include "..\include\DSP281x_Device.h"

#include

#include

#include
extern SWI_Obj SWI0;

extern SEM_Obj mySEM;
void main()

{

Sys_init();

Timer_init();

Gpio_init();

PieCtrlRegs.PIEIER2.all = M_INT4;

IER |= M_INT2;

EINT;

}
int a=0;

void prd_ISR1()

{

a++;

SWI_post(&SWI0);
if (a%2) GpioDataRegs.GPFDAT.all =0xAAAA;

else GpioDataRegs.GPFDAT.all =0x5555;
}
int b=0;

void prd_ISR2()

{

b++;

}
int c=0;

void isr_SWI_0()

{

c++;c++;

}
int d=0;

void timer_ISR()

{

EvaRegs.EVAIMRA.bit.T1PINT = 1;

EvaRegs.EVAIFRA.all = BIT7;

PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;

d++;

}
long int e=0;long int f=0;

void s_TSK0()// менее приоритетная задача

{

while(1)

{

e++;

if (e>20000000) SEM_post(&mySEM);

f=e/100000;

}

}

void s_TSK1()// более приоритетная задача

{

while(1)

{

e--;

if (e<1) SEM_pend(&mySEM,20000);

f=e/100000;

}

}


Итоговое содержание файла initDSP.c:
#include "..\include\DSP281x_Device.h"
void Sys_init(void)

{

EALLOW;

SysCtrlRegs.HISPCP.all = 0x0001;

SysCtrlRegs.LOSPCP.all = 0x0002;

SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;

SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;

SysCtrlRegs.PCLKCR.bit.SCIAENCLK=1;

SysCtrlRegs.PCLKCR.bit.SCIBENCLK=1;

SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=1;

SysCtrlRegs.PCLKCR.bit.SPIENCLK=1;

SysCtrlRegs.PCLKCR.bit.ECANENCLK=1;

SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;

EDIS;

}

void Timer_init(void)

{

// Initialize EVA Timer 1:

// Setup Timer 1 Registers (EV A)

EvaRegs.GPTCONA.all = 0;

// Set the Period for the GP timer 1 to 0x0200;

EvaRegs.T1PR = 0x0200; // Period

EvaRegs.T1CMPR = 0x0000; // Compare Reg

// Enable Period interrupt bits for GP timer 1

// Count up, x128, internal clk,

// enable compare, use own period

EvaRegs.EVAIMRA.bit.T1PINT = 1;

EvaRegs.EVAIFRA.bit.T1PINT = 1;
// Clear the counter for GP timer 1

EvaRegs.T1CNT = 0x0000;

EvaRegs.T1CON.all = 0x1742;
// Start EVA ADC Conversion on timer 1 Period interrupt

EvaRegs.GPTCONA.bit.T1TOADC = 2;
}
void Gpio_init(void)

{

EALLOW;

GpioMuxRegs.GPFMUX.all=0x0000;

GpioMuxRegs.GPFDIR.all=0xffff;

EDIS;

}
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
Поиск