Автор: Пользователь скрыл имя, 13 Декабря 2012 в 09:08, курсовая работа
Цель курсовой работы – получение навыков программирования аппаратных комплексов, включающих взаимодействующие между собой различные 8- или 32-разрядные микроконтроллерные системы (МК-системы) и персональные компьютеры (РС), на языках Ассемблеров, С – для микроконтроллеров (МК) и языке С++ для РС с платформой Windows.
1. Постановка задачи 6
1.1. Стандартное задание 6
1.2. Индивидуальное задание 6
2. Техническое задание 7
3. Описание аппаратных и программных средств лабораторного комплекса 8
3.1. Структура аппаратных средств 8
3.1.1. Структурная схема лабораторного комплекса 8
3.1.2. Плата МК – системы 9
3.1.2.1. Конфигурируемые узлы МК C8051F064 11
3.1.2.2. Внешняя память XRAM 16
3.1.2.3. Входные усилители 17
3.1.2.4. Микросхема моста UART-USB 18
3.1.2.5. Сопряжение платы с PC 20
3.1.2.6. Питание платы 21
3.1.3. Требования к PC 21
3.1.4. ОСЦИГЕН 21
3.2. Перечень программных средств лабораторного комплекса 22
3.2.1. Средства программирования и отладки МК-системы 22
3.2.1.1. Интегрированная среда разработки фирмы SiLabs IDE 2.0 22
3.2.1.2. Ассемблер, компилятор и линкер интегрированной среды разработки Keil 23
3.2.2. Средства разработки Windows-приложений 24
3.2.2.1. Среда разработки 24
3.2.2.2. Библиотека WIN32 API функций 24
3.2.3. Приложения для ОСЦИГЕНа. 25
3.2.3.1. Драйвер конфигурируемого выносного блока 25
3.2.3.2. Windows-приложение OGView 25
3.2.4. Драйвер виртуального COM-порта фирмы SiLabs 26
4. Разработка программного комплекса для решения целевой задачи 26
4.1. Функциональная схема реализации функций запоминающего осциллографа 26
4.2. Состав и механизм взаимодействия приложений программного комплекса 27
4.2.1. Схема программного комплекса 27
4.2.2. Протокол обмена между PC-приложением и МК-приложением 27
4.2.3. Таблица допустимых команд 27
4.2.4. Размещение в памяти значений выборок сигнала со стороны МК и ПК 28
4.3. Разработка приложения для МК-системы 29
4.3.1. Обобщенная схема алгоритма 29
4.3.2. Обоснование выбора языка программирования и среды разработки 30
4.3.3. Описание файлов проекта приложения 30
4.3.3.1. Модули приложения 30
4.3.3.2. Модули, подключаемые на этапе линкования 30
4.3.4. Структура и организация программы 30
4.3.5. Схемы алгоритмов и описание функций приложения 30
4.3.5.1. Перечень функций приложения 30
4.3.5.2. Организация бесконечного цикла встроенного приложения 31
4.3.5.3. Отключение сторожевого таймера 31
4.3.5.4. Переключение с внутреннего генератора на внешний 32
4.3.5.5. Конфигурирование портов ввода/вывода 33
4.3.5.6. Конфигурирование аналого-цифровых преобразователей ADC 32
4.3.5.7. Конфигурирование интерфейса DMA 34
4.3.5.8. Инициализация последовательного интерфейса UART 35
4.3.5.9. Выбор и инициализация таймера для установки скорости обмена данными по последовательному каналу 36
4.3.5.10. Инициализация таймера для установки времени дискретизации входного сигнала 36
4.3.5.11. Выбор режимов работы внешней памяти XRAM и ее интерфейса 36
4.3.5.12. Инициализация прерываний 37
4.3.5.13. Формирование цифровых отсчетов и их сохранение во внешней памяти XRAM 37
4.3.5.14. Передача данных на PC 37
4.3.5.15. Прием данных с PC 37
4.3.5.16. Другие используемые функции 38
4.3.5.17. Конфигурирование узлов МК с учетом данных, пришедших с PC 38
4.4. Разработка Windows-приложения 39
4.4.1. Особенности использования среды разработки 39
4.4.2. Описание файлов проекта 39
4.4.3. Обобщенная схема алгоритма многопоточного приложения 40
4.4.4. Внешний вид и описание графического интерфейса, принципы построения программы 40
4.4.5. Описание структуры и организация программы 41
4.4.5.1. Назначение подключаемых файлов 41
4.4.5.2. Описание прототипов функций 41
4.4.5.3. Функция WinMain() 42
4.4.5.4. Функция главного окна 42
4.4.5.5. Организация дополнительных потоков, их назначение 43
4.4.5.6. Рабочие функции дополнительных потоков 43
4.4.5.7. Синхронизация потоков 43
4.4.5.8. Особенности обработки сообщений Windows в программе 43
4.4.5.9. Функция рисования графика восстановленного сигнала 45
4.4.5.10. Разметка осей графика 45
4.4.5.11. Использование контекстуальной памяти для рисования графика 45
4.4.6. Работа с COM-портом, описание WinAPI-функций и структур данных 46
4.4.6.1. Инициализация COM-порта, обоснование выбора режима (синхронный, асинхронный), объема буфера приема/передачи данных 46
4.4.6.2. Организация настроек COM¬-порта в графическом интерфейсе 48
4.4.6.3. Использование функций WaitCommEvent(), WaitForSingleObject(), WaitForMultiplyObject() 49
4.4.7. Работа оператора с приложением 49
4.4.7.1. Последовательность запуска приложения на МК и ПК в лаборатории 49
4.4.7.2. Примеры последовательности 49
4.4.7.3. Адаптация к сепктру входного сигнала 49
4.4.8. Описание протокола RS-232 49
5. Список используемых источников информации 87
6. Приложения 50
6.1. Исходные тексты модулей программы для МК 50
6.2. Фрагменты листингов файлов МК-приложения, полученные в результате трансляций: MAP-file и др 56
6.3. Исходные тексты файлов Windows-приложения 58
6.4. Алгоритмы 72
6.4.1. Обобщенный алгоритм программы для МК 72
6.4.2. Дополнительные алгоритмы программы для МК 73
6.4.2.1. Алгоритм процедуры отключения WDT 73
6.4.2.2. Алгоритм функции SYSCLK_Init 74
6.4.2.3. Алгоритм функции Port_Init 75
6.4.2.4. Алгоритм функции ADCInit 76
6.4.2.5. Алгоритм функции DMAInit 77
6.4.2.6. Алгоритм работы функции UART0_Init 79
6.4.2.7. Алгоритм функции Timer3_Init 80
6.4.2.8. Алгоритм функции main 81
6.4.2.9. Алгоритм функции Config 82
6.4.2.10. Алгоритм функции SendData 83
6.4.2.11. Алгоритм функции ReceiveData 84
6.4.3. Обобщенный алгоритм программы Windows-приложения 85
6.4.3.1. Алгоритм работы функции рисования графика 85
6.4.3.2. Алгоритм обработки сообщений 86
- WM_SIZE – сообщение посылается приложению при изменении размеров окна. В данном случае оно не используется, поскольку изменение размеров окна не предусмотрено.
- WM_SETFOCUS – это сообщение посылается окну, когда оно получило фокус клавиатуры.
- WM_DESTROY – высылается при завершении работы приложения.
- WM_CREATE – оконная процедура нового окна принимает это сообщение после того, как окно создано, но до того, как окно становится видимым.
Рис. 4.6. Схема алгоритма обработки сообщений
Функция рисования графика
Рис. 4.7 Алгоритм работы функции рисования графика
По оси абсцисс отмечается время, минимальное значение которого может быть 0, а максимальное отмечается на оси. На оси ординат – значения напряжения, минимальное значение которого может быть 0, а максимальное отмечается на оси. Область построения графика разделена на квадраты 20x20 пикселей.
Перед рисование графика данные, полученные от МК записываются в буфер и только при завершении считывания всех данных рисуются на экране.
COM-порты в Windows аналогичны файлам и могут быть задействованы с использованием тех же функций, что и файлы - CreateFile, ReadFile, WriteFile, CloseHandle. Однако в программе используются функции, специфичные для COM-порта в Win32 API – GetCommState, SetCommState.
Функция CreateFile открывает или создает файл, файловый поток, директорию, физический диск, раздел, консольный буфер или коммуникационный ресурс. В случае успеха функция возвращает хендл объекта для доступа к нему.
HANDLE CreateFile(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
lpFileName – полное имя открываемого файла
dwDesiredAccess – доступ к объекту (чтение, запись или и то, и другое)
dwShareMode – режим разделения доступа к ресурсу
lpSecurityAttributes – указатель на структуру, определяющую возможность наследования хэндла на ресурс дочерними процессами
dwCreationDisposition – действие, которое следует выполнить если ресурс существует или не существует
dwFlagsAndAttributes – атрибуты и флаги файла
hTemplateFile –должен быть NULL
Функция ReadFile читает данные из файла, начиная с позиции, на которой находится указатель на файл. Может быть использована как для синхронного, так и для асинхронного чтения. В данной программе используется второй вариант.
BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);
hFile – хэндл файла, из которого производится чтение
lpBuffer – указатель на буфер, в который будет производиться чтение.
nNumberOfBytesRead – количество байт для чтения из файла
lpNumberOfBytesread – указатель на переменную, куда будет записано количество прочитанных байт
lpOverlapped – указатель на структуру, используемую при асинхронном вводе/выводе.
Функция WriteFile записывает данные в файл, начиная с позиции, на которой находится указатель на файл. Может быть использована как для синхронной, так и для асинхронной записи. Как и в случае с ReadFile, WriteFile используется для асинхронной записи.
BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
hFile – хэндл файла, в который будет производиться запись
lpBuffer – указатель на буфер, содержащий данные для записи
nNumberOfBytesRead – количество байт для записи в файл
lpNumberOfBytesread – указатель на переменную, куда будет записано количество записанных байт
lpOverlapped – указатель на структуру, используемую при асинхронном вводе/выводе.
Функция CloseHandle закрывает открытый хэндл объекта.
BOOL CloseHandle(
HANDLE hObject
);
hObject – закрываемый хэндл.
Функция GetCommState получает информацию о настройках выбранного коммуникационного устройства.
BOOL GetCommState(
HANDLE hFile,
LPDCB lpDCB
);
hFile – хэндл устройства
lpDCB – указатель на DCB-структуру, куда будет записана полученная информация.
Функция SetCommState настраивает выбранное коммуникационное устройство в соответствии с DCB-структурой.
BOOL SetCommState(
HANDLE hFile,
LPDCB lpDCB
);
hFile – хэндл устройства
lpDCB – указатель на DCB-структуру для получения настроек.
DCB-структура определяет настройки последовательного коммуникационного устройства. Здесь приведены лишь поля структуры, использованные в проекте.
typedef struct _DCB {
DWORD BaudRate;
BYTE ByteSize;
BYTE Parity;
BYTE StopBits;
};
BaudRate – скорость, на которой работает коммуникационное устроство, в бодах.
ByteSize – количество битов в принятых и переданных байтах.
Parity – настройка четности. Может быть одним из заранее предустановленных значений.
StopBits – количество используемых стоповых битов.
Общая схема работы с COM-портом такова:
- Порт открывается для чтения и записи при помощи функций ReadFile и WriteFile.
- Настройки COM-порта сохраняются в DCB-структуре при помощи функции GetCommState.
- В настройки вносятся
- При помощи функций WriteFile и ReadFile осуществляется обмен данными между ПК и МК.
- Хэндл COM-порта закрывается при помощи функции CloseHandle.
В графическом интерфейсе пользователь может выбрать только номер COM порта для использования (чтения/записи), остальное задает сама программа. Выбор осуществляется с помощью комбобокса «COMBOCOM» в верхней части окна приложения. Есть возможность выбрать только «СОМ1», «СОМ2» , «СОМ3» или «СОМ4», причем по умолчанию задан порт «СОМ1».
WaitForSingleObject(
hConnectEvent = CreateEvent(NULL,TRUE,FALSE,
Infinite – время ожидания
Функция WaitForSingleObject – одна из функций ожидания, позволяющая организовать для синхронизации процессов и потоков ожидание события одного объекта синхронизации. Первым параметром передается хэндл объекта, который надо ожидать.
В нашей программе мы ждем сигнал объекта (COM-порта) :
//ждем сигнал обеъкта (COM port)
if (WaitForSingleObject(inf.
//затем
получаем результат
//если все еще ждем, функция возвращает FALSE
if (GetOverlappedResult(port, &inf, &dwWritten, FALSE))
success = 1; //successful write
Остальные функции (WaitCommEvent(), WaitForMultiplyObject()) не используются.
Для первого запуска приложения со стороны МК необходима интегрированная среда SiLabs IDE для загрузки программы в память микроконтроллера.
Последовательность запуска разработанного программного комплекса выглядит следующим образом:
4.4.7.2.Примеры
Описание установок по умолчанию и последовательности старта
(Пишется самостоятельно!)
Поскольку нами используется метод кусочно-линейной аппроксимации, для получения в достаточной мере "сглаженной" картинки рекомендуется подбирать значение частоты выборок так, чтобы выполнялось соотношение: , где fв – частота выборок, fс – частота входного сигнала.
Соответственно, число выборок необходимо подбирать в зависимости от того, сколько периодов функции желает увидеть на экране оператор, с учетом соотношения: , где fв – частота выборок, fс – частота входного сигнала, Q – число выборок, N – число периодов, отображаемых на графике восстановленного сигнала.
4.4.8. Описание протокола RS-232
Для связи ПК и контроллера используется стандартный протокол RS-232С. Со стороны контроллера по этому протоколу работает UART. Способ настройки UART0 описан в главе один в первой части.
Немного о протоколе RS-232С. Протокол позволяет передавать и принимать последовательности бит данных длиной от 5 до 9 штук, пред началом передачи посылается стартовый бит (логический ноль), после передачи информационных и проверочных битов посылается стоповый бит (логическая единица). Возможен контроль ошибок при передаче при помощи одного, полтора или двух битов чётности. Изменяемая скорость передачи данных. В курсовой работе используется скорость 115200 бит/с.
В нижеследующей табл.4.1 приводится распиновка стандартного 9-контактного штырькового разъёма для связи по протоколу RS-232C:
Название сигнала |
Имя цепи |
Назначение |
Направление | |||
EIA |
CCITT |
DB9 |
||||
DCD |
CF |
109 |
1 |
Связь модемов установлена |
в ПК | |
RX (RxD, Sin) |
BB |
104 |
2 |
Принимаемые данные |
в ПК | |
TX (TxD, Sout) |
BA |
103 |
3 |
Передаваемые данные |
из ПК | |
DTR |
CD |
108/2 |
4 |
Готовность ПЭВМ к работе |
из ПК | |
SG (GND) |
AB |
102 |
5 |
Сигнальная земля |
- | |
DSR |
CC |
107 |
6 |
Готовность модема к работе |
из ПК | |
RTS |
CA |
105 |
7 |
Запрос на передачу |
из ПК | |
CTS |
CB |
106 |
8 |
Готовность модема к передаче |
в ПК | |
RI |
CE |
125 |
9 |
Индикатор вызова |
в ПК |
Табл.4.1. Распиновка стандартного
9-контактного штырькового
При выполнении данной курсовой работы распиновка ног разъёма не существенна, т.к. для соединения контроллера и ПК использовался специальный мост CP0121 UART – USB, который расположен не плате (Evaluation Board) EK C8051F064. Со стороны ПК используется специальный драйвер, который позволяет эмулировать порт COM3 или COM6. При этом данные, на самом деле, принимаются и передаются через один из портов USB.
Информация о работе Обработка аналоговых сигналов на основе МК C8051F064