
- •Пояснительная записка к курсовой работе
- •Оглавление
- •1. Постановка задачи.
- •1.1. Стандартное задание
- •1.2. Индивидуальное задание
- •2. Техническое задание
- •3. Описание аппаратных и программных средств лабораторного комплекса
- •3.1. Структура аппаратных средств
- •3.1.1. Структурная схема лабораторного комплекса
- •3.1.2. Плата мк – системы
- •3.1.2.1. Конфигурируемые узлы мк c8051f064
- •Интерфейс прямого доступа к памяти (dma)
- •3.1.2.2. Внешняя память xram
- •3.1.2.3. Входные усилители
- •3.1.2.4. Микросхема моста uart-usb
- •3.1.2.5. Сопряжение платы с pc
- •3.1.2.6. Питание платы
- •3.1.3. Требования к pc
- •3.1.4. Осциген
- •. Перечень программных средств лабораторного комплекса
- •Средства программирования и отладки мк-системы
- •Интегрированная среда разработки фирмы SiLabs ide 2.0
- •3.2.1.2. Ассемблер, компилятор и линкер интегрированной среды разработки Keil
- •3.2.2. Средства разработки Windows-приложений
- •3.2.2.1. Среда разработки
- •3.2.2.2. Библиотека win32 api функций
- •3.2.3. Приложения для осцигеНа.
- •3.2.3.1. Драйвер конфигурируемого выносного блока
- •3.2.3.2. Windows-приложение ogView
- •3.2.4. Драйвер виртуального com-порта фирмы SiLabs
- •Организация бесконечного цикла встроенного приложения
- •Отключение сторожевого таймера
- •Переключение с внутреннего генератора на внешний
- •Конфигурирование портов ввода/вывода
- •Конфигурирование аналого-цифровых преобразователей adc
- •Конфигурирование интерфейса dma
- •Инициализация последовательного интерфейса uart
- •Выбор и инициализация таймера для установки скорости обмена данными по последовательному каналу
- •Инициализация таймера для установки времени дискретизации входного сигнала
- •Прием данных с pc
- •Другие используемые функции
- •Конфигурирование узлов мк с учетом данных, пришедших с pc
- •Разработка Windows-приложения
- •4.4.1. Особенности использования среды разработки
- •4.4.2. Описание файлов проекта
- •4.4.3. Обобщенная схема алгоритма многопоточного приложения
- •4.4.4. Внешний вид и описание графического интерфейса, принципы построения программы
- •Описание структуры и организация программы
- •4.4.5.1. Назначение подключаемых файлов
- •4.4.5.2. Описание прототипов функций
- •4.4.5.3. Функция WinMain()
- •4.4.5.4. Функция главного окна
- •4.4.5.5. Организация дополнительных потоков, их назначение
- •4.4.5.6. Рабочие функции дополнительных потоков
- •4.4.5.7. Синхронизация потоков
- •4.4.5.8. Особенности обработки сообщений Windows в программе
- •4.4.6.2. Организация настроек com-порта в графическом интерфейсе
- •4.4.6.3. Использование функций WaitCommEvent(), WaitForSingleObject(), WaitForMultiplyObject()
- •Работа оператора с приложением
- •4.4.7.1. Последовательность запуска приложения на мк и пк в лаборатории
- •4.4.7.2. Адаптация к спектру входного сигнала
- •Описание протокола rs-232
- •Список используемых источников информации
- •Приложения
- •Исходные тексты модулей программы для мк
- •Фрагменты листингов файлов мк-приложения, полученные в результате трансляций: map-file и др
- •Исходные тексты файлов Windows-приложения
Выбор и инициализация таймера для установки скорости обмена данными по последовательному каналу
Для установки скорости обмена данными по последовательному каналу был выбран таймер T1. Таймер T1 был выбран в качестве генератора скорости передачи данных с помощью регистра SSTA0, см. пред. пункт. Инициализация таймера T1 также описана в п.4.3.5.8.
Инициализация таймера для установки времени дискретизации входного сигнала
Для установки времени дискретизации использовался таймер T3. Его инициализация происходит в функции Timer3_Init().
Инициализация таймера T3 проходит по следующему алгоритму:
запись значения 0x00 в регистр управления таймером TMR3CN (отключение таймера);
запись значения 0x00 в регистр конфигурации таймера TMR3CF (установка частоты счетчика SYSCLK / 12);
установка значения (0xFFFF-ReloadValue) в регистр RCAP3, где ReloadValue – значение частоты дискретизации (установка значения перезагрузки);
запись значения 0xFFFF в регистр значения таймера TMR3 (переполняем таймер);
запуск таймера T3 (установка бита TR3 в ‘1’).
Описанный алгоритм иллюстрирует следующий код:
TMR3CN = 0x00; // temporary turning off T3
TMR3CF |= 0x00; // Counter frequency = SYSCLK/12
RCAP3 =(0xFFFF-ReloadValue); // writing reload value
TMR3 = 0xFFFF; // making counter overflow to reload counter
TR3 = 1; // start T3
Выбор режимов работы внешней памяти XRAM и ее интерфейса
Все порты для работы с внешней памятью (P4..P7) работают в режиме push-pull. Их настройка происходит в вышеописанной функции Port_Init().
Инициализация прерываний
В функции отправки байта Send_Byte (unsigned char Byte) перед началом отправки данных флаг прерывания TI0 сбрасывается в ноль:
TI0=0;// Drop tramsmition interrupt flag
В функции получения байта Receive_Byte (void) перед началом получения данных флаг прерывания RI0 сбрасывается в ноль:
RI0=0; // drop receiving interrupt flag
Формирование цифровых отсчетов и их сохранение во внешней памяти XRAM
Со стороны МК (Little format) Со стороны ПК (Big format)
Передача данных на PC
Функция отправки байта на ПК void Send_Byte (unsigned char Byte) работает по следующему алгоритму:
Разрешаем передачу информации через UART, сбрасывая флаг TI0
Записываем байт в буфер UART
Ждем, пока не закончится передача
Описанный алгоритм иллюстрирует следующий код:
void Send_Byte (unsigned char Byte)
{
char old_SFRPAGE = SFRPAGE;
SFRPAGE = UART0_PAGE; // Switch to UART0 page
TI0=0; // Drop tramsmition interrupt flag
SBUF0=Byte; // copy data to send to SBUF0
while(!TI0); // dalay while tramsmiting
SFRPAGE = old_SFRPAGE; // restore SFRPAGE
}
Прием данных с pc
Функция приема байта с ПК unsigned char Receive_Byte (void) работает по следующему алгоритму:
Разрешаем получение информации через UART, сбрасывая флаг RI0
Устанавливаем флаг активного приема
Ждем, пока прием не завершится
Сохраняем полученную информацию
Сбрасываем флаг активного приема
Описанный алгоритм иллюстрирует следующий код:
unsigned char Receive_Byte (void)
{
char old_SFRPAGE = SFRPAGE;
unsigned char rb;
SFRPAGE = UART0_PAGE;
RI0=0; // drop receiving interrupt flag
REN0=1; // receive enable
while(!RI0); // delay while receiving
rb = (unsigned char)SBUF0; // receive data from SBUF0
REN0=0; // receiving finished
SFRPAGE = old_SFRPAGE; // restore SFRPAGE
return rb;
}