URC220 (Раздаточный материал по URC220), страница 4

2017-12-28СтудИзба

Описание файла

Файл "URC220" внутри архива находится в следующих папках: Раздаточный материал по URC220, Documents, URC220 Documentation. Документ из архива "Раздаточный материал по URC220", который расположен в категории "". Всё это находится в предмете "программное обеспечение управляющих комплексов (поук)" из 6 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "программное обеспечение управляющих комплексов (поук)" в общих файлах.

Онлайн просмотр документа "URC220"

Текст 4 страницы из документа "URC220"

// Прототипы функций

void PIO_Config(uint32 InputPins, uint32 OutputPins);

void PIO_Set(uint32 Bit, uint32 Value);

uint32 PIO_Get(uint32 Bit);

void PIT_Init();

uint32 PIT_GetCount();

void PIT_Sleep(uint32 mSecs);

//-------------------------------------------------------

// Инициализирует PIO

// InputPins - сочетание (через ИЛИ) бит, соответствующих выводам

// процессора, которые должны быть установления в режим ввода

// OutputPins - сочетание (через ИЛИ) бит, соответствующих выводам

// процессора, которые должны быть установления в режим вывода

// Ножки процессора, не указанные в InputPins и OutputPins не меняют

// своего состояния (т.е. вызов PIO_Config(0, 0) не даст никакого эффекта)

void PIO_Config(uint32 InputPins, uint32 OutputPins)

{

// Инициализируем контроллер портов ввода-вывода

AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOA);

// Инициализируем контакты для вывода

if(OutputPins)

AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, OutputPins);

// Инициализируем контакты для ввода

if(InputPins)

AT91F_PIO_CfgInput(AT91C_BASE_PIOA, InputPins);

}

//-------------------------------------------------------

// Устанавливает уровень на выводе процессора

// Bit - сочетание (через ИЛИ) бит, соответствующих выводам

// процессора, значения на которых должны быть изменены

// Value - новое значение: 0 - низкий уровень, !0 - высокий

void PIO_Set(uint32 Bit, uint32 Value)

{

// Если нужно установить лог. 1, то пишем

// соответствубщий бит в регистр SODR контроллера

// портов ввода-вывода

if((Value)) AT91C_BASE_PIOA->PIO_SODR = Bit;

// Аналогично для установки лог. 0 (пишем в Clear-регистр)

else AT91C_BASE_PIOA->PIO_CODR = Bit;

}

//-------------------------------------------------------

// Определяет уровень на выводе процессора

// Bit - сочетание (через ИЛИ) бит, соответствующих выводам

// процессора, значения на которых должны быть определены

// 0 - низкий уровень, !0 - высокий

uint32 PIO_Get(uint32 Bit)

{

return (AT91C_BASE_PIOA->PIO_PDSR & (Bit));

}

//-------------------------------------------------------

// Функция инициализирует таймер для работы

// на макс. частоте - MCK / 16

// (если ядро процессора работает на 48 MHz, то

// таймер работает на частоте 3 MHz)

void PIT_Init()

{

// Включаем таймер

AT91F_PITC_CfgPMC();

// Устанаволиваем таймер: сначала целиком заполняется

// 20-ти битная часть (0xFFFFF - предел заполнения),

// затем она обнуляется и инкрементируется старшая

// 12-ти битная часть.

AT91PS_PITC pPITC = AT91C_BASE_PITC;

pPITC->PITC_PIMR = 0xFFFFF | AT91C_PITC_PITEN;

// Выключаем прерывание для таймера

AT91F_PITDisableInt(AT91C_BASE_PITC);

}

//-------------------------------------------------------

// Текущий счётчик таймера

uint32 PIT_GetCount()

{

// Находится в регистре PIIR контроллера таймера

return AT91C_BASE_PITC->PITC_PIIR;

}

//-------------------------------------------------------

// Пауза, mSecs - время в мс

void PIT_Sleep(uint32 mSecs)

{

// Домножаем число милисекунд на количество

// тиков таймера в 1 мс, чтобы получить величину

// задержки не в мс, а в тиках таймера

mSecs *= PIT_TICKS_PER_mSEC;

// Запоминаем время начала ожидания

uint32 StartTime = PIT_GetCount();

// Ждём, пока не пройдёт нужно число тиков

while(PIT_GetCount() - StartTime < mSecs) ;

}

//-------------------------------------------------------

int32 main()

{

// Текущее состояние светодиода - горит (1)

int32 Value = 1;

// Инициализируем таймер

PIT_Init();

// Устанавливаем ножку PA17 на вывод

PIO_Config(0, BIT17);

// Начинаем бесконечный цикл

while(1)

{

// Устанавливаем уровень на ножке PA17

PIO_Set(BIT17, Value);

// Если установили лог. 1, то текущий уровень

// будет лог. 0

if(Value == 1) Value = 0;

// И наоборот

else Value = 1;

// Ждём 1 секунду

PIT_Sleep(1000);

}

}

//-------------------------------------------------------

3.3 Отладка программы

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

1. Для этого в настройках проекта в списке слева нужно выбрать “Debugger”, а справа выбрать вкладку “Setup”. Параметр “Driver” установить на “J-Link/J-Trace”.

2. Во вкладке “Download” установить флаг “Use flash loader(s)”.

Если в меню слева выбрать пункт “J-Link/J-Trace”, то справа будут показаны все настройки отладчика J-Link. Подходят настройки по умолчанию.

Теперь можно выбрать пункт меню “Project”->”Debug” (или просто нажать Ctrl+D). Появится окно индикации загрузки программы в контроллер, а далее, после окончания загрузки, выполнение программы автоматически дойдёт до начала функции “main” и остановится. С этого момента отладка программа происходит аналогично отладке программы под Windows (F10 и F11 – Step over и Step into, F9 – установить точку прерывания выполнения программы, F5 – запуск программы) – см. рис. 3.6

Рис.3.6 Отладка готовой программы

4. Библиотека для работы с платой на компьютере

Для многих задач не всегда требуется писать программу именно для микроконтроллера, иногда достаточно простого управления с компьютера. Для этого была реализована программа для микроконтроллера, которая принимает команды от компьютера по USB интерфейсу и управляет всеми периферийными устройствами. Для компьютера написана библиотека, которая позволяет легко управлять платой из любой программы под Windows.

4.1 Алгоритм работы

Взаимодействие программы с драйвером устройства происходит через объект класса CURC220. Прототип класса находится в заголовочном файле “URC220.h”:

#include “URC220.h”

CURC220 urc;

После того, как плата подключается к компьютеру, программа на компьютере должна обновить список подключённых устройств, вызвав функцию UpdateDeviceList объекта класса. Узнать количество подключённых устройств можно с помощью функции GetDeviceCount. Далее, при необходимости, можно определить имя каждого устройства с помощью функций GetDeviceNameLen и GetDeviceName. Для начала работы с платой нужно открыть устройство функцией Open, а по окончании работы вызвать функцию Close. Если устройство успешно открыто, то записывать и считывать данные можно при помощи функций DeviceRead и DeviceWrite. Сначала вызывается функция для чтения (DeviceRead), далее производятся необходимые действия (функции DeviceGetInput, DeviceSetOutput, DeviceGetOutput, DeviceGetADC и т.д.), а по окончании всех действий вызывается функция для записи (DeviceWrite). Затем цикл повторяется.

4.2 Описание функций класса

Функция DeleteDeviceList

Прототип:

void CURC220::DeleteDeviceList();

Описание:

Функция удаляет список подключенных устройств

Принимаемые параметры: нет

Возвращаемое значение: нет

Функция UpdateDeviceList

Прототип:

int CURC220::UpdateDeviceList();

Описание:

Функция обновляет список подключенных устройств: определяет их количество и имена

Принимаемые параметры: нет

Возвращаемое значение:

Функция возвращает 0 в случае ошибки

Функция GetDeviceCount

Прототип:

int CURC220::GetDeviceCount(ULONG *Count);

Описание:

Функция возвращает количество подключенных устройств

Принимаемые параметры:

Count - указатель на число для записи

Возвращаемое значение:

Функция возвращает 0 в случае ошибки

Функция GetDeviceNameLen

Прототип:

int CURC220::GetDeviceNameLen(ULONG Index, ULONG *Len);

Описание:

Функция возвращает длину имени устройства

Принимаемые параметры:

Index - номер устройства в списке (начиная с 0)

Len - указатель на число для записи длины имени

Возвращаемое значение:

Функция возвращает 0 в случае ошибки

Функция GetDeviceName

Прототип:

int CURC220::GetDeviceName(ULONG Index, char *pBuffer, ULONG BufferSize);

Описание:

Функция для определения имени устройства по номеру

Принимаемые параметры:

Index - номер устройства в списке (начиная с 0)

pBuffer - буфер для записи имени

BufferSize - максимальное число байт, которое можно записать в буфер

Возвращаемое значение:

Функция возвращает 0 в случае ошибки

Функция GetPipeObject

Прототип:

CURCPIPE* CURC220::GetPipeObject();

Описание:

Функция возвращает указатель на объект CURCPIPE

Принимаемые параметры: нет

Возвращаемое значение:

Указатель на объект CURCPIPE

Функция Close

Прототип:

void CURC220::Close();

Описание:

Функция закрывает устройство

Принимаемые параметры: нет

Возвращаемое значение: нет

Функция Open

Прототип:

int CURC220::Open(ULONG Index);

Описание:

Функция открывает устройство

Принимаемые параметры:

Index - номер устройства в списке (начиная с 0)

Возвращаемое значение:

Функция возвращает 0 в случае ошибки

Функция DeviceRead

Прототип:

int CURC220::DeviceRead();

Описание:

Считывает текущее состояние устройства

Принимаемые параметры: нет

Возвращаемое значение:

Функция возвращает 0 в случае ошибки

Функция DeviceWrite

Прототип:

int CURC220::DeviceWrite();

Описание:

Записывает внесенные изменения параметров в устройство

Принимаемые параметры: нет

Возвращаемое значение:

Функция возвращает 0 в случае ошибки

Функция DeviceGetInput

Прототип:

int CURC220::DeviceGetInput(ULONG Index, UCHAR *Value);

Описание:

Считывает значение на порту ввода

Принимаемые параметры:

Index - номер порта: 0..3

Value - указатель на число для записи значения: 0 или !0

Возвращаемое значение:

Функция возвращает 0 в случае ошибки

Функция DeviceSetOutput

Прототип:

int CURC220::DeviceSetOutput(ULONG Index, UCHAR Value);

Описание:

Записывает значение в порт вывода

Принимаемые параметры:

Index - номер порта: 0..7

Value - число для записи в порт: 0 или !0

Возвращаемое значение:

Функция возвращает 0 в случае ошибки

Функция DeviceGetOutput

Прототип:

int CURC220::DeviceGetOutput(ULONG Index, UCHAR *Value);

Описание:

Возвращает значение, которое сейчас установлено на порту вывода

Принимаемые параметры:

Index - номер порта: 0..7

Value - указатель на число для записи значения: 0 или !0

Возвращаемое значение:

Функция возвращает 0 в случае ошибки

Функция DeviceGetADC

Прототип:

int CURC220::DeviceGetADC(ULONG Channel, USHORT *Value);

Описание:

Считывает значение АЦП

Принимаемые параметры:

Channel - номер канала: 0..3

Value - указатель на число для записи значения: 0..1023

Возвращаемое значение:

Функция возвращает 0 в случае ошибки

Функция DeviceSetPWM

Прототип:

int CURC220::DeviceSetPWM(ULONG Channel, SHORT Value);

Описание:

Устанавливает значение ШИМ

Принимаемые параметры:

Channel - номер канала: 0..3

Value - новое значение ШИМ: -1000...+1000

Возвращаемое значение:

Функция возвращает 0 в случае ошибки

Функция DeviceGetPWM

Прототип:

int CURC220:: DeviceGetPWM(ULONG Channel, SHORT *Value);

Описание:

Возвращает установленое значение ШИМ

Принимаемые параметры:

Channel - номер канала: 0..3

Value - указатель на число для записи значения: -1000...+1000

Возвращаемое значение:

Функция возвращает 0 в случае ошибки

Функция DeviceGetEnc

Прототип:

int CURC220::DeviceGetEnc(ULONG Index, LONG *Value);

Описание:

Считывает значение энкодеров

Принимаемые параметры:

Index - номер энкодера: 0..1

Value - указатель на число для записи значения

Возвращаемое значение:

Функция возвращает 0 в случае ошибки

5. Применение библиотеки

5.1 Создание нового проекта в Microsoft Visual Studio 2003

1. Для начала нужно открыть Microsoft Visual Studio 2003. После этого необходимо создать новый проект File–>New–>Project (рис 5.1.1).

Рис. 5.1.1

2. Далее следует указать тип проекта (Visual Studio C++ –> Win32)и в соседнем поле выбрать Win32 Console Project. В соответствующих текстовых полях указать название проекта (в данном случае «Test») и директорию, в которой будет создан проект. После нажатия на Ok появиться новое окошко (Рис.5.1.2).

Рис. 5.1.2

3. В этом окне (Рис. 5.1.2) выбрать закладку Application Settings (находится под Overview). Установить галочку напротив пункта Empty project (Рис. 5.1.3) и нажать Finish.

Рис. 5.1.3.

4. После этих операций будет создан пустой проект. На рисунке 5.1.4 показано как он выглядит.

Рис. 5.1.4.

5. В проект необходимо добавить .cpp файл, в котором будет написан исходный код программы. Для этого надо воспользоваться меню Project­–>Add New Item. На Рисунке 5.1.5 показана структура меню.

Рис. 5.1.5.

6. Далее необходимо ввести имя создаваемого файла, например, «main.cpp». Для этого следует выбрать категорию файла «Code» в левой половине окна и тип файла «С++ File (.cpp)». В текстовом поле «Name:» ввести имя создаваемого файла и нажать «Open». Рисунок 5.1.6 иллюстрирует это.

Рис. 5.1.6.

7. После этих операций будет создан файл main.cpp и добавлен к текущему проекту. В этом файле можно написать код простой программ, которая выводит в консоль строчку (Рис. 5.1.7).

Рис. 5.1.7.

Привожу код, чтобы можно было скопировать.

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5167
Авторов
на СтудИзбе
437
Средний доход
с одного платного файла
Обучение Подробнее