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


Скачать 1.7 Mb.
Название Учебно-методическое пособие Томск 2007
страница 16/16
Тип Учебно-методическое пособие
rykovodstvo.ru > Руководство эксплуатация > Учебно-методическое пособие
1   ...   8   9   10   11   12   13   14   15   16



  1. Скопировать в папку проекта заголовочные файлы на периферию процессора и подключить их в исходный файл совместно с заголовочным файлом библиотеки:


#include "DRV_UART.h"

#include "DSP281x_Device.h"

  1. Добавить следующие объявления:


// количество портов (SCIA и SCIB)

#define NUM_PORTS 2
// вектора прерываний

#define SCIRXINTA 96

#define SCITXINTA 97

#define SCIRXINTB 98

#define SCITXINTB 99
// прототипы функций обработки прерываний

static void txIsr(Ptr portArg);

static void rxIsr(Ptr portArg);

// структура конфигурационных параметров по умолчанию

static DRV_UART_Params defaultParams = DRV_UART_DEFAULTATTRS;
// структура объектов портов

typedef struct DRV_UART_Obj {

Bool inUse; // использование порта

Int uartId; // идентификатор порта

Uns *bufptr; // указатель на текущие данные в буфере

Uns bufcnt; // количество оставшихся байт

volatile struct SCI_REGS *regs; // указатель на регистры

DRV_UART_Params *params; // указатель на

параметры

DRV_UART_Tcallback cbFxn; // указатель на

функцию возврата

} DRV_UART_Obj;
// объявление и инициализация объектов

static DRV_UART_Obj portObj[NUM_PORTS] = {

FALSE, 0, NULL, NULL, NULL, NULL,

FALSE, 0, NULL, NULL, NULL, NULL,

};



  1. Добавить следующую процедуру открытия порта:


// Процедура открытия порта

DRV_UART_Handle DRV_UART_open(Int uartId, Ptr params,

DRV_UART_Tcallback cbFxn)

{

DRV_UART_Handle port; // указатель на порт

HWI_Attrs hwattr; // атрибуты для добавления в таблицу

прерываний

Int rxId, txId; // вектора прерываний



// проверка на допустимый идентификатор порта

if (uartId > (NUM_PORTS-1)) return NULL;

// проверка на наличие объявления функции возврата

if (cbFxn == NULL) return NULL;



// проверка на то, что порт не был открыт

// задание параметров порта

port = &portObj[uartId];

if (port->inUse == TRUE) return NULL;

port->inUse = TRUE;

port->uartId = uartId;



// в зависимости от идентификатора порта:

// 1) подается питание на периферию SCI;

// 2) инициализируются дискретные ножки для SCI;

// 3) определяется указатель на регистры периферии;

// 4) разрешаются прерывания по приему и передаче в

// таблице векторов;

// 5) разрешается уровень прерывания.

if (uartId == 0) {

asm(" EALLOW");

SysCtrlRegs.PCLKCR.bit.SCIAENCLK = 1;

GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4 = 1;

GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5 = 1;

asm(" EDIS");
port->regs = &SciaRegs;

rxId = SCIRXINTA;

txId = SCITXINTA;

PieCtrlRegs.PIEIER9.bit.INTx1 = 1;

PieCtrlRegs.PIEIER9.bit.INTx2 = 1;

} else {

asm(" EALLOW");

SysCtrlRegs.PCLKCR.bit.SCIBENCLK = 1;

GpioMuxRegs.GPGMUX.bit.SCITXDB_GPIOG4 = 1;

GpioMuxRegs.GPGMUX.bit.SCIRXDB_GPIOG5 = 1;

asm(" EDIS");
port->regs = &ScibRegs;

rxId = SCIRXINTB;

txId = SCITXINTB;

PieCtrlRegs.PIEIER9.bit.INTx3 = 1;

PieCtrlRegs.PIEIER9.bit.INTx4 = 1;

}

IER |= M_INT9;



// определяется функция возврата

port->cbFxn = cbFxn;

port->params = (DRV_UART_Params *)params;

if (port->params == NULL) port->params =

&defaultParams;



// добавляются прерывания по приему и передаче в

// таблицу векторов прерываний DSP/BIOS

hwattr.iermask = 0x1;

hwattr.arg = (Arg)port;

HWI_dispatchPlug(txId, (Fxn)txIsr, &hwattr);

HWI_dispatchPlug(rxId, (Fxn)rxIsr, &hwattr);



// осуществляется сброс устройства

// (инициализация регистров SCI)

DRV_UART_resetDevice(port);



//возвращается указатель на порт

return (port);

}


  1. Добавить следующую процедуру сброса устройства, в которой инициализируются регистры SCI-процессора.


// сброс устройства

Void DRV_UART_resetDevice(DRV_UART_Handle hUart)

{

volatile struct SCI_REGS *regs = hUart->regs;

DRV_UART_Params *params = hUart->params;



// проверка открытия порта

if (hUart == NULL) return;



// сброс SCI и обнуление регистров

regs->SCICTL1.all = 0;

regs->SCICTL2.all = 0;

regs->SCIPRI.all = 0;



//задание режима в завимисости от параметров regs->SCICCR.all = params->wordSize | params->stopBits

| params->parity;

// разрешения приемника и передатчика

regs->SCICTL1.bit.RXENA = 1;

regs->SCICTL1.bit.TXENA = 1;
// задание скорости обмена

regs->SCIHBAUD = params->baud >> 8;

regs->SCILBAUD = params->baud & 0xff;



// задания режима FREE и выход из состояния сброса

regs->SCIPRI.bit.FREE = 1;

regs->SCICTL1.bit.SWRESET = 1;

}

  1. Добавить процедуры старта передачи и приема буферов.


// старт приема

Void DRV_UART_write(DRV_UART_Handle hUart, Ptr bufptr,

Uns bufcnt)

{

hUart->bufptr = (Uns *)bufptr;

hUart->bufcnt = bufcnt;

hUart->regs->SCICTL2.bit.TXINTENA = 1;

hUart->regs->SCITXBUF = *hUart->bufptr++;

hUart->bufcnt--;

}
// старт передачи

Void DRV_UART_read(DRV_UART_Handle hUart, Ptr bufptr, Uns bufcnt)

{

hUart->bufptr = (Uns *)bufptr;

hUart->bufcnt = bufcnt;

hUart->regs->SCICTL2.bit.RXBKINTENA = 1;

}


  1. Добавить процедуры обработки прерывания по приему и передаче (функции статические и используются только в данном модуле).


// обработчик прерывания по передаче

static void txIsr(Ptr portArg)

{

DRV_UART_Handle port = (DRV_UART_Handle)portArg;
// все байты переданы?

if (port->bufcnt > 0) {

// передаем следующий байт

port->regs->SCITXBUF = *port->bufptr++;

port->bufcnt--;

} else {

// запрещаем прерывание по приему

port->regs->SCICTL2.bit.TXINTENA = 0;

// осуществляем вызов функции возврата с

// аргументом DRV_UART_TXEMPTY (окончание

// передачи)

port->cbFxn(DRV_UART_TXEMPTY);

}



// подтверждаем прерывание

PieCtrlRegs.PIEACK.bit.ACK9 = 1;

}
// обработчик прерывания по приему

static void rxIsr(Ptr portArg)

{

DRV_UART_Handle port = (DRV_UART_Handle)portArg;

Int data;

//считываем данные во временную переменную

// (необходимо делать всегда)

data = port->regs->SCIRXBUF.bit.RXDT;



// в случае возникновения ошибки делаем сброс SCI

if (port->regs->SCIRXST.bit.RXERROR) {

port->regs->SCICTL1.bit.SWRESET = 0;

port->regs->SCICTL1.bit.SWRESET = 1;

} else {

// сохраняем данные по указателю на буфер

*port->bufptr++ = data;

port->bufcnt--;

// буфер заполнен?

if (!port->bufcnt) {

// запрещеаем прерывание по приему

port->regs->SCICTL2.bit.RXBKINTENA = 0;

// осуществляем вызов функции возврата с

// аргументом DRV_UART_RXFULL (окончание

// приема)

port->cbFxn(DRV_UART_RXFULL);

}

}



// подтверждаем прерывание

PieCtrlRegs.PIEACK.bit.ACK9 = 1;

}


  1. Скомпилировать проект с помощью Project-Build


В приведенном ниже примере использования данной библиотеки осуществляется передача буфера длиной 10 байт из порта SCIA в порт SCIB.

Примечание. Для использования данного примера необходимо соединить следующие ножки процессора: ножку 3 разъема P8 (SCITXDA) с ножкой 19 разъема P4 (SCIRXDB) и ножку 4 разъема P8 (SCIRXDA) с ножкой 18 разъема P4 (SCITXDB).


  1. Скопировать полученную в результате компиляции библиотеку в папку библиотек и подключить ее к проекту приложения.

  2. Скопировать заголовочный файл библиотеки и подключить его к проекту приложения.


#include "DRV_UART.h"


  1. Добавить перед функцией main объявление следующих констант, переменных и прототипов:


#define NUM_CHANS 2 // количество каналов обмена

#define SCIA 0 // идентификатор SCIA

#define SCIB 1 // идентификатор SCIB

#define FRAME_SIZE 10 // размер буфера данных
// структура объекта канала

typedef struct ChanObj {

DRV_UART_Handle port; // указатель на порт

Uns frame[FRAME_SIZE]; // буфер данных

Uns frame_count; // количество обработанных кадров

} ChanObj;

// объявляем объекты каналов

ChanObj chans[NUM_CHANS];
// прототипы функций возрата (приведены ниже)

static Void scia_callback(Int val);

static Void scib_callback(Int val);


  1. В секции инициализации в функции main осуществить открытие портов и сброс счетчиков:


chans[SCIA].port = DRV_UART_open(SCIA, NULL,

&scia_callback);

chans[SCIB].port = DRV_UART_open(SCIB, NULL,

&scib_callback);

chans[SCIA].frame_count = 0;

chans[SCIB].frame_count = 0;


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


// формирование запроса приема буфера

DRV_UART_read (chans[SCIA].port, chans[SCIA].frame,

FRAME_SIZE);

// формирование запроса передачи буфера

DRV_UART_write(chans[SCIB].port, chans[SCIB].frame,

FRAME_SIZE);


  1. Добавить функции возврата (данные функции будут вызываться по окончании приема или передачи):


static Void scia_callback(Int val)

{

chans[SCIA].frame_count++; // количество переданных

// кадров

}
static Void scib_callback(Int val)

{

chans[SCIB].frame_count++; // количество принятых

// кадров

}


  1. Сохранить изменения в проекте, осуществить его компиляцию и дальнейшую загрузку в память.

  2. Изменить значения в буфере chans[SCIA].frame и убедится в изменениях в буфере chans[SCIB].frame.


Следует отметить, что данный проект обладает следующим достоинствами:

  1. возможность использования любой периферии SCI;

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

  3. поддержка приема и передачи буфера любого размера.


Содержание



1

Аннотация


2

2

Введение


3

3

Среда программирования CodeComposerStudio. Использование симулятора


6

4

Разработка шаблона программного обеспечения


16

5

Конфигурация ядра ОС DSP-BIOS


38

6

Конфигурирование памяти сигнального процессора


64

7

Создание проекта с DSP/BIOS для флеш-памяти


67

8

Технология создания собственных функций для приложений


79

9

Использование псевдоплавающей запятой


86

10

Использование стандартной библиотеки DMC_lib


88

11

Разработка моделей внешних устройств


93

12

Разработка программного обеспечения для скалярной системы управления


100

13

Разработка программного обеспечения для векторной системы управления


130

14

Создание системы векторного управления синхронным двигателем в среде CCS


158

15

Использование пакета Матлаб для разработки программного обеспечения сигнального процессора


209

16

Цифровая фильтрация на основе
FFT-преобразования



225

17

Создание собственных библиотек драйверов периферийных устройств сигнального процессора


235

18

Содержание


259



1   ...   8   9   10   11   12   13   14   15   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
Поиск