
- •Пояснительная записка к курсовой работе
- •Оглавление
- •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-приложения
Организация бесконечного цикла встроенного приложения
Бесконечный цикл организован в функции main(), внутри которого проходит сеанс соединения с ПК (соединения, получение настроек, отправка результатов АЦП). Бесконечный цикл создан, чтобы была возможность многократных запросов со стороны пользователя.
Отключение сторожевого таймера
Регистр WDTCN:
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
R/W |
Значение при сбросе: ххххх111 |
|
|
|
|
|
|
|
|
|
Бит 7 |
Бит 6 |
Бит 5 |
Бит 4 |
Бит 3 |
Бит 2 |
Бит 1 |
Бит 0 |
Биты 7-0: Управление WDT
Запись 0хA5 как включает, так и перезагружает WDT
Запись 0xAD в течение 4 тактовых циклов после записи 0xDE отключает WDT
Запись 0xFF блокирует функцию отключения
Отлючение сторожевого таймера (WDT) производится в функции MC_Config с помощью последовательной записи значений 0xDE и 0xAD в регистр WDTCN. Это иллюстрируют следующие строки кода:
EA = 0; // forbid all interrupts
WDTCN = 0xde; // turn off WDT
WDTCN = 0xad;
EA = 1; // Enable all interrupts
Между записью этих значений должно пройти не более четырех тактовых циклов, иначе операция отключения игнорируется. На время этой процедуры необходимо запретить прерывания (EA = 0) во избежание задержки между записями в регистр управления WDT. После завершения операции отключения WDT следует вновь разрешить прерывания (EA=1).
Переключение с внутреннего генератора на внешний
Регистр OSCXCN:
R |
R/W |
R/W |
R/W |
R |
R/W |
R/W |
R/W |
Значение при сбросе: 00000000 |
XTLVLD |
XOSCMD2 |
XOSCMD1 |
XOSCMD0 |
- |
XFCN2 |
XFCN1 |
XFCN0 |
|
Бит 7 |
Бит 6 |
Бит 5 |
Бит 4 |
Бит 3 |
Бит 2 |
Бит 1 |
Бит 0 |
Бит 7: XTLVLD – флаг стабилизации кварцевого генератора (действиетелен, только если XOSCMD = 11х)
0 - кварцевый генератор не используется или еще не стабилен
1 - Кварцевый генератор работает и стабилен
Биты 6-4: XOSCMD2-0 – биты выбора режима внешнего генератора
00х - внешний генератор выключен
010 - тактовые импульсы поступают от внешнего КМОП-счетчика через вывод XTAL1
011 - тактовые импульсы поступают от внешнего КМОП-счетчика через вывод XTAL1 и внутренний делитель 2
10х - режим RC/C-генератора с делением тактовой частоты на 2
110 - режим кварцевого генератора
111 – режим кварцевого генератора с делением тактовой частоты на 2
Бит 3: зарезервирован. Читается как 0b. Запись не оказывает никакого влияния.
Биты 2-0: XFCN2-0: Биты управления частотой внешнего генератора
Для переключения с внутреннего генератора на внешний необходимо выполнить следующий алгоритм в функции SYSCLK_Init():
Включить внешний генератор (записать в регистр OSCXCN значение 0x77)
Значение 0х77 (01110111)- режим кварцевого генератора с делением тактовой частоты на 2 и частота внешнего генератора задается от 10 МГц до 30 МГц.
Выдержать паузу длительностью как минимум 1мс, чтобы исключить преждевременное переключение системы от внешнего генератора;
Опрашивать бит XTLVLD регистра OSCXCN до обнаружения перехода его состояния из '0' в '1' (бит автоматически устанавливается в '1', как только внешний генератор выходит на стабильный режим работы);
XTLVLD установлен в единицу, когда значение (OSCXCN & b10000000) ненулевое, т.е. когда (OSCXCN & 0х80) или (OSCXCN & 128) ненулевое.
Переключиться на работу от внешнего генератора (записать в регистр CLKSEL значение 0x01 = b00000001).
Отключить внутренний генератор записью значения 0х00 в регистр OSCICN.
Следующий код функции SYSCLK_Init() иллюстрирует вышеописанную процедуру:
OSCXCN = 0x77; // start external oscilator, frequency =(22 118 400 / 2)Hz
for (i=0; i <5000; i++) ; // dalay > 1 msec (setting XTLVLD)
while (!(OSCXCN & 128)) ; // wait until generator is stable
CLKSEL |= 0x01; // switch to external oscilator
OSCICN = 0x00; // disable internal oscillator