Торгаев С.Н. Мусоров И.С. Солдатов А.А. Сорокин П.В. Программирвоание МК Cortex-M3 в задачах диагностики и контроля. Томск 2..


Чтобы посмотреть этот PDF файл с форматированием и разметкой, скачайте его и откройте на своем компьютере.
ɍчɟɛноɟ
изɞɚниɟ
Ɍоɪɝɚɟɜ
ɋɬɚниɫлɚɜ
Николɚɟɜич
Мɭɫоɪоɜ
Илья
ɋɟɪɝɟɟɜич
ɋолɞɚɬоɜ
Ⱥнɞɪɟй
Ⱥлɟкɫɟɟɜич
ɋоɪокин
Пɚɜɟл
ȼлɚɞимиɪоɜич
ПРОȽРȺММИРОȼȺНИȿ
МИКРОКОНɌРОЛЛȿРОȼ
ЯȾРОМ
CORTEX-M3
ЗȺȾȺЧȺХ
ȾИȺȽНОɋɌИКИ
КОНɌРОЛЯ
ɍчɟɛноɟ
поɫоɛиɟ
Опɭɛликоɜɚно
ɚɜɬоɪɫкой
ɪɟɞɚкции
Изɞɚɬɟльɫɬɜо
"STT"
Роɫɫия
, 634028,
Ɍомɫк
пɪоɫпɟкɬ
Лɟнинɚ
, 15
1
Ɍɟл
.: (3822) 421-455
E-mail: stt@sttonline.com
ɍɫл
пɟч
. 11,78.
изɞ
. 2,51.
Ȼɭмɚɝɚ
ɞля
оɮиɫной
ɬɟхники
Ƚɚɪниɬɭɪɚ
Times.
Ɏоɪмɚɬ
60
84/
Ɍиɪɚж
100
экз
Зɚкɚз
598.
SUMMARY
This text-book is intended for senior students of univer-
sities, who is studying multi-bit microcontrollers and devel-
opment of non-destructive testing systems based on them.
The authors describe systematically the issues of program-
ming the microcontrollers K1986BE92QI. A large number
of examples of programs for configuring the main peripheral
devices for these microcontrollers are presented.
For the students getting education on directions
11.04.04 "Electronics and nanoelectronics", and 12.04.04
"Biotechnical systems and technologies".
Изɞɚɬɟльɫɬɜо
"STT"
яɜляɟɬɫя
лиɞɟɪом
нɚɭчноɝо
книɝоизɞɚния
ɋиɛиɪɫком
ɪɟɝионɟ
конɫɭльɬиɪɭɟɬ
ɜопɪоɫɚм
зɚщиɬы
ɚɜɬоɪɫких
пɪɚɜ
оɪɝɚнизɚции
ɜыпɭɫкɚ
нɚɭчной
пɟɪиоɞики
ɪɚɫпɪоɫɬɪɚнɟнию
нɚɭчных
книɝ
жɭɪнɚлоɜ
Роɫɫии
ɪɭɛɟжом
2014
ɝоɞɚ
яɜляɟɬ
оɮициɚльным
пɪɟɞɫɬɚɜиɬɟлɟм
ɛɪиɬɚнɫкоɝо
изɞɚɬɟльɫɬɜɚ
Red
Square Scientific
ɫпɟциɚльно
оɪиɟнɬиɪоɜɚнноɝо
ɪоɫɫийɫких
ɚɜɬоɪоɜ
ɪоɫɫийɫкоɟ
нɚɭчноɟ
ɫоɞɟɪжɚниɟ
Эɬо
оɛлɟɝчɚɟɬ
ɪоɫɫийɫким
ɭчɟным
пɭɛликɚции
ɪɭɛɟжом
ɞɟлɚɟɬ
ɪɚɛоɬы
шиɪоко
ɞоɫɬɭпными
ɞля
миɪоɜоɝо
нɚɭчноɝо
ɫооɛщɟɫɬɜɚ
Лɭчшиɟ
книɝи
ɜыпɭщɟнныɟ
Изɞɚɬɟльɫɬɜом
STT,
нɚхоɞяɬɫя
кɪɭпнɟйших
ɛиɛлиоɬɟкɚх
миɪɚ
National Library of Medicine (USA),
The British Library (UK), Library of Congress (USA)
The US Patent
Bureau (USA),
оɛɟɫпɟчиɜɚɟɬ
ɪɚзмɟщɟниɟ
миɪоɜых
ɛɚзɚх
ных
Роɫɫия
, 634028,
Ɍомɫк
пɪоɫпɟкɬ
Лɟнинɚ
15
Ɍɟл
.: (3822) 421-455
E-mail: stt@sttonline.com
МИР
ЖȾȿɌ
ȼȺШИ
КНИȽИ
�� &#x/MCI; 2 ;&#x/MCI; 2 ;20.pdf, свободный.
Загл. с экрана.
Яз. англ. (дата обращения
/05/2015).
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Литература
STlife
augmented
[Электронный ресурс] /
User
manual
Режим
доступа
http://www.st.com/st
web
ui/static/active/en/resource/technical/document/user_manual/DM00040
810.pdf
, свободный.
Загл. с экрана.
Яз. англ. (дата обра
щения
05/0
/2015).
ST
LINK/V2 [
Электронный
ресурс
] / ST
LINK/V2 in
circuit debu
ger/programmer for STM8 and STM32
Режим
доступа
http://lib.chipdip.ru/163/DOC001163688.pdf,
свободный
Загл
экрана
англ
(дата обращения 05/05/2015).
STlife
augmented
[Электронный ресурс] /
User
manual
Режим
доступа:http://www.st.com/st
web
ui/static/active/en/resource/technical/document/user_manual/CD00267
113.pdf, свободный.
Загл. с экрана.
Яз. англ. (дата обращения
/05/2015).
Торгаев С.
Н. Основы микр
опроцессорной техники: микроко
троллеры STM8S: учебное пособие
С.Н.
Торгаев и др.
Томск :
Изд
во ТП
У, 2014.
130 c.
STlife.augmented [Электронный ресурс] / User manual
Режим
доступа:http://www.st.com/st
web
ui/static/active/en/resource/technical/document/user_manual/CD00283
778.pdf, свободный.
Загл. с экрана.
Яз. англ. (дата обращения
09/05/2015).
STlife.augmented [Электронный ресурс] / User manual
Режим
доступа:http://ww
w.st.com/st
web
ui/static/active/en/resource/technical/document/technical_note/DM000
39768.pdf, свободный.
Загл. с экрана.
Яз. англ. (дата обращ
е-
ния 15/05/2015).
STlife.augmented [Электронный ресурс] / User manual
Режим
доступа:
http://www.st.com/st
ui/static/active/en/resource/technical/document/user_manual/DM00039
084.pdf
, свободный.
Загл. с экрана.
Яз. англ. (дата обращения
15/05/2015).
Winstar
Display
Ltd
. [Электронный ресурс] /
Specification
Режим доступа:
http://aquacontrol.narod.ru/
spravka/WH1602A
CTK.pdf, свободный.
Загл. с экрана.
Яз. англ. (дата обращения
/05/2015).
Dallas
Semiconductor
. [Электронный ресурс] /
20
Режим
доступа:
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Temp/DS18B
�� &#x/MCI; 0 ;&#x/MCI; 0 ;void UART_SendBait (int data)
UART_SendData (MDR_UART1,data);
//Отправка байта
while
(!UART_GetFlagStatus(MDR_UART1, UART_FLAG_TXFE))
//Ожидания завершения
void vopros (void)
UART_SendBait ('2');
UART_SendBait ('+');
UART_SendBait ('2');
UART_SendBait ('=');
UART_SendBait ('?');
Лабораторная работа №3.
Интерфейс
Цель работы
Целью работы является изучение основ настройки и работы ци
аналогово преобразователя микроконтроллера К1986ВЕ92
Оборудование
Компьютер
Отладочная плата микроконтроллера К1986ВЕ92
Лабораторный макет.
Источник питания 12В,
1А.
Программа работы
Написать и проверить работу программы, представленные в пр
мерах.
Подключить лабораторный макет к отладочной плате.
Подключить преобразователь
232 к ПК.
Открыть программное обеспечение
Terminal
Написать программу прие
ма и отправки данных
Отправить в
Terminal
свою фамилию, а принять необходимо число сооветствующее
колличеству раз мигания (инверсии) светодиода
�� &#x/MCI; 0 ;&#x/MCI; 0 ;NVIC
nableIRQ
UART
IRQn
);
//Разрешения внешнего
прерывания
UART_Cmd(MDR_UART1,ENABLE);
vopros();
while(1)
void UART1_IRQHandler(void)
i=UART_ReceiveData(MDR_UART1);
if (i==0x34)
UART_SendBait (' ');
UART_SendBait ('V');
UART_SendBait
('e');
UART_SendBait ('r');
UART_SendBait ('n');
UART_SendBait ('o');
UART_SendBait ('!');
UART_SendBait ('
n');
else
UART_SendBait (' ');
UART_SendBait ('N');
UART_SendBait ('e');
UART_SendBait (' ');
UART_SendBait ('v');
UART_SendBait ('e');
UART_Se
ndBait ('r');
UART_SendBait ('n');
UART_SendBait ('o');
UART_SendBait ('!');
UART_SendBait ('
n');
vopros();
�� &#x/MCI; 0 ;&#x/MCI; 0 ;//&#x/MCI; 1 ;&#x/MCI; 1 ;Выбор
скорости
максимально
быстрый
фронт
(10
) (
может
так
быть
отключен
PORT
OUTPUT
OFF
быстрый
фронт
(20
PORT
SPEED
FAST
медленный
фронт
(100
PORT
SPEED
SLOW
PORT
InitStructure
PORT
MODE
PORT
MODE
DIGITAL
Настройка
режима
работы
вывода
цифровой
может
быть
аналоговый
PORT
MODE
PORT
Init
MDR
PORTB
PORT
InitStructure
); //Применение
заполненной структуры к
выбранному порту
//Настройка
UART
UART
InitStructure
UART
BaudRate
= 9600; //Скорость обмена
UART_InitStructure.UART_WordLength = UART_WordLength8b;
//Длина слова
UART_InitStructure.UART_StopBits = UART_StopBits1;
//Количество стоп бит
UART_InitStructure.UART_Parity = UART_Parity_No;
//проверка четности
UART_InitStructure.UART_FIFOMode = UART_FIFO_OFF;
//Отключение буфера
UART_InitStructure.UART_HardwareFlowControl =
UART_HardwareFlowControl_RXE |
UART_HardwareFlowControl_TXE;
//Направление
UART
Init
MDR
UART
1,&
UART
InitStructure
); //Применение
заполненной структуры
//Настройка прерываний
enable
irq
();

//Глобальное разрешение
прерываний
UART
ITConfig
MDR
UART
1,
UART
ENABLE
);
//Разрешение прерываний
по приему данных
�� &#x/MCI; 0 ;&#x/MCI; 0 ;//PORT_FUNC_MAIN,
переопределенная
функция
PORT_FUNC_OVERRID)
PORT_InitStructure.PORT_SPEED = PORT_SPEED_MAXFAST;
//Выбор скорости
максимально быстрый
фронт(10нс) (может так
же быть отключен
PORT_OUTPUT_OFF,
быстрый фронт
(20нс)
PORT_SPEED_FAST,
медленный фронт(100нс)
PORT_SPEED_SLOW)
PORT_InitStructure.PORT_MODE = PORT_MODE_DIGITAL;
//Настройка режима работы
вывода цифровой (может
быть аналоговый
PORT_MODE_ANALOG)
PORT
Init
MDR
PORTB
PORT
InitStructure
); //Пр
именение
заполненной структуры к
выбранному порту
PORT_InitStructure.PORT_Pin = PORT_Pin_6; //Выбор
настраиваемого вывода
PORT_InitStructure.PORT_OE = PORT_OE_IN; //Настройка вывода
порта на режим вход
(может быть выход
PORT_OE_OUT)
PORT_InitStructure.PORT_FUNC = PORT_FUNC_ALTER;
//Функция порта
альтернативная функция
(так же может быть: порт
PORT_FUNC_PORT,
основная функция
PORT_FUNC_MAIN,
переопределенная
функция
PORT_FUNC_OVERRID)
PORT_InitStructure.PORT_SPEED =
PORT_SPEED_MAXFAST;
�� &#x/MCI; 0 ;&#x/MCI; 0 ;#include "MDR32Fx.h"
#include "MDR32F9Qx_port.c"
#include "MDR32F9Qx_rst_clk.c"
#include "MDR32F9Qx_it.c"
#include "MDR32F9Qx_uart.c"
#include "system_MDR32F9Qx.c"
PORT
InitTypeDef
PORT
InitStructure
; //
Обявление
структуры
инициализации
портов
UART
InitTypeDef
UART
InitStructure
; //
Обявление
структуры
инициализации
UART
int i;

//Объявление переменных
void UART_SendBait (int
data);
void vopros (void);
int main(void)
RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTA |
RST_CLK_PCLK_PORTB | RST_CLK_PCLK_PORTC |
RST_CLK_PCLK_PORTD | RST_CLK_PCLK_UART1, ENABLE);
//Разрешение тактирования
периферии
SCB
= 0
08000000;

Включение таблицы векторов
RST
CLK
PCLKcmd
RST
CLK
PCLK
UART
1,
ENABLE
);
//Включение тактирования
UART
//Настройка выводов для
UART
PB
UART
PB
UART
PORT_InitStructure.PORT_Pin = PORT_Pin_5; //Выбор
настраиваемого вывода
PORT_InitStructure.PORT_OE = PORT_OE_OUT; //Настройка
вывода порта на режим
выход (может быть вход
PORT_OE_IN)
PORT_InitStructure.PORT_FUNC = PORT_FUNC_ALTER;
//Функция порта
альтернативная функция
(так же может быть: порт
PORT_FUNC_PORT,
основная функция
�� &#x/MCI; 2 ;&#x/MCI; 2 ; разрешение или запрет использования буферов FIFO (гл
бина очереди данных
32 элемента или один элемент, соответс
венно);
порог срабатывания прерывания по заполнению буферо
FIFO (1/8, 1/4, 1/2, 3/4 и 7/8);
частота внутреннего тактового генератора (номинальное
значение
1.8432 МГц) может быть задана в диапазоне 1.42
2.12
МГц для обеспечения возможности формирования бит данных с
укороченной длительностью в режиме пониженно
го энергоп
требления;
режим аппаратного управления потоком данных.
Рис. 6.1. Функциональная схема асинхронного приемо
передатчика
Пример программ настройки
Программа выводит на экран ПК выражение «2+2=?», и приним
а-
ет ответ. При неправильном ответе
на экране появляется фраза «
verno
!», а при правильном «
Verno
!».
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Глава 6
ИНТЕРФЕЙС
МИКРОКОНТРОЛЛЕРА
К1986ВЕ92QI
Описание ЦАП микроконтроллера
Модуль
UART
микроконтроллера может
быть запрограммирован
для использования, как в качестве универсального
асинхронного при
мопередатчика, так и для инфракрасного обмена данными (SIR).
Онс
одержит независимые буферы приема (16x12) и передачи (16x8) типа
FIFO (First In First
Out
), что позволяет снизить интенсивность прерыв
а-
ний.
Программное отключение FIFO позволяет ограничить р
азмер б
фера одним байтом.
Программное управление скоростью обмена. Обеспечивается во
можность деления
тактовой частоты опорного генератора в диапазоне
(1x16
65535x16). Допускается
использование нецелых коэффициентов
деления частоты, что позволяет исполь
зовать любой
опорный генератор
с частотой более 3.6864 МГц.
Основные свойства модуля
UART
микроконтроллера:
Поддержка стандартных элементов асинхронного протокола
связи
стартового и стопового бит, а так же бита контроля четн
сти.
Независимое маскирование
прерываний от буфера FIFO п
е-
редатчика, буфера FIFO приемника, по таймауту приемника, по
изменению линий состояния модема, а также в случае
обнаруж
е-
ния ошибки.
Поддержка прямого доступа к памяти.
Обнаружение ложных стартовых бит.
Формирование и обнаружения
сигнала разрыва линии.
Поддержка функция управления модемом (линии CTS,
DCD, DSR, RTS, DTR и RI).
Возможность организации аппаратного управления потоком
данных.
Программируемые параметры
модуля
UART
следующие:
скорость передачи данных
целая и дробная ча
сть числа;
количество бит данных;
количество стоповых бит;
режим контроля четности;
�� &#x/MCI; 0 ;&#x/MCI; 0 ;3. Написать программы выода в ЦАП сигнала синусоидальной фо
мы с частотой 5 кГц и пременной амплитудой (от 0.5 до 3 В).
Регул
ровку амплитуды осуществлять посредства
м АЦП.
Написать программы выода в ЦАП сигнала синусоидальной фо
мы с пересенной частотой частотой от 1 до 5 кГц. Регулировку частоты
осуществлять посредствам АЦП.
Написать программы выода в ЦАП пилообразного сигнала с пер
е-
сенной частотой частотой от
1 до 5 кГц и амплитудой от 0.2 до 2 В. Р
е-
гулировку частоты осуществлять посредствам АЦП, а регулировку а
м-
плитуды посредствам внешних прерываний
Согласно варианту, о
рганизовать на
выходе ЦАП сигналы прои
вольной формы
Вариант 1
Вариант 2
Вариант
Вариант 4
Вариант 5
Вариант 6
�� &#x/MCI; 0 ;&#x/MCI; 0 ;//&#x/MCI; 1 ;&#x/MCI; 1 ;вывода
аналоговый
может
быть
цифровой
PORT
MODE
DIGITAL
PORT_Init(MDR_PORTE, &PORT_InitStructure);
//Применение
заполненной структуры к
выбранному порту
DAC2_Init(DAC2_AVCC);

//Выбор опорного
напряжения
DAC2_Cmd(ENABLE);

//Включение ЦАП
while(1)
for (i=0;i<4000;i++)

//Инкрементировать
переменную
DAC2_SetData(i);

//Вывести переменную в
for (i=4000;i>0;i


//Декрементировать
переменную
DAC2_SetData(i);

//Вывести переменную в
Лабораторная работа №3. Цифро
аналоговый преобразователь
Цель работы
Целью
работы является изучение основ
настройки и
работы
аналогово преобразователя
микроконтроллера
К1986ВЕ92
Оборудование
Компьютер
Отладочная плата микроконтроллера
К1986ВЕ92
Лабораторный макет.
Источник питания 12В, 1А.
Программа работы
Написать и проверить работу
программы, представленные в пр
мерах.
Подключить лабораторный макет к отладочной плате.
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Таблица
Регистры
Название
Описание
�0�'�5�B�'�$�&
Dhgljhee_j��'�$�&
�0�'�5�B�'�$�&
�!�&�)�*
J_]bklj�mijZ\e_gby��'�$�&
�0�'�5�B�'�$�&
�!�'�$�&��B�'�$�7�$
J_]bklj�^Zgguo��'�$�&�
�0�'�5�B�'�$�&
�'�$�&��B�'�$�7�$
J_]bklj�^Zgguo��'�$�&�
Ijbf_j�ijh]jZff�gZkljhcdb�P:I
Пример программы настройки ЦАП
Программа позволяет получать на выходе ЦАП сигнал треугол
ной формы.
include
MDR
include "MDR32F9Qx_port.c"
#include "MDR32F9Qx_rst_clk.c"
#include
"MDR32F9Qx_dac.c"
#include "system_MDR32F9Qx.c"
PORT_InitTypeDef PORT_InitStructure;
//Обявление структуры
инициализации портов
int res=0,i;

//Объявление переменных
int main(void)
RST_CLK_PCLKcmd(RST
_CLK_PCLK_PORTA|
RST_CLK_PCLK_PORTB | RST_CLK_PCLK_PORTC |
RST_CLK_PCLK_PORTD | RST_CLK_PCLK_PORTE |
RST_CLK_PCLK_DAC, ENABLE);
//Разрешение тактирования
периферии
//Настройка вывода для ЦАП
PORT
InitStructure
PORT
Pin
PORT
Pin
_0;
//
Выбор
настраиваемого
вывода
PORT
InitStructure
PORT
PORT
; //
Настройка
вывода
порта
режим
выход
может
быть
вход
PORT
PORT
InitStructure
PORT
MODE
PORT
MODE
ANALOG
Настройка
режима
работы
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Глава 5
ЦИФРО
НАЛОГОВЫЙ ПРЕОБРАЗОВАТЕЛЬ
МИКРОКОНТРОЛЛЕРА К1986ВЕ92QI
Описание
ЦАП
микроконтроллера
В микроконтроллере реализовано два ЦАП. Для включения ЦАП
необходимо установить бит Cfg_ON_DACx в 1, используемые выводы
ЦАП порта Е
были сконфигурированы как аналоговые и были отключ
ны какие
либо внутренние подтяжки. Оба ЦАП могут работать незав
симо или совместно. При независимой работе ЦАП (бит
Cfg_SYNC_A=0) после записи данных в регистр данных DACx_DATA
на выходе DACx_OUT формируе
тся уровень напряжения, соответс
вующий записанному значению. При синхронной работе (бит
Cfg_SYNC_A=1) данные обоих ЦАП могут быть обновлены одной з
а-
писью в один из регистров DACx_DATA. ЦАП может работать от вну
ренней опоры Cfg_M_REFx=0, тогда ЦАП формиру
ет выходной сигнал
в диапазоне от 0 до напряжения питания AUCC. В режиме работы с
внешней опорой Cfg_M_REFx=1 ЦАП формирует выходное напряж
е-
ние в диапазоне от 0 до
значения DACx_REF.
На рис. 5.1 представлна
структурная схема ЦАП сикроконтроллера.
Рис. 5.
1. Структу
рная схема ЦАП сикроконтроллера
В таблице 5.1. представлено описание регситров ЦАП.
�� &#x/MCI; 0 ;&#x/MCI; 0 ;8. Организовать на выводе порта импульсы с чатотой 50 кГц и к
эффициентом заполнения от 0.2 до 0.8. Длительности должны опред
е-
лятся таймером и изменяться посредмтвам АЦП.
Организовать на выводе порта импульсы с чатотой 100 кГц и к
ффициентом заполнения от 0.1 до 0.7. Длительности должны опред
е-
лятся таймером и изменяться посредмтвам АЦП.
Написать
программу вывода на дисплей рез
ультата преобразов
а-
ния АЦП и измеренного напряжения.
Написать программу реализующую изменение
яркости двух св
е-
тодиодов с помощью АЦП. Причем при увеличении напряжения на
входе АЦП яркость одного светодиода должна увеличиваться, а яркость
другого уменьшаться.
12.
Написать программу вывода на дисплей величины напряжений, п
данных на два АЦП.
Напи
сать программу вывода на дисплей результата измерения а
м-
плитуды синусоидального сигнала.
Написать программу вывода на дисплей результата измерения
частоты синусоидального сигнала. Измерение частоты осуществлять по
преобразованию АЦП.
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ; ADC1_Cmd (ENABLE); //Запуск АЦП
TIMER
Cmd
MDR
TIMER
ENABLE
);//
Запуск
таймера
while(1)
TIMER_SetChnCompare(MDR_TIMER1, TIMER_CHANNEL1, res); //
Ложим в регистр сравнения значение АЦП, которое отвечает за дл
тельность импульса (коэф. заполнения)
Лабораторная работа №3
Аналогово цифровой преобразователь
Цель работы
Целью
работы является изучение основ
настройки и
работы
логово
цирового преобразователя
микроконтроллера
К1986ВЕ92
Оборудование
Компьютер
Отладочная плата микроконтроллера
К1986ВЕ92
Лабораторный макет.
Источник питания 12В,
1А.
Программа работы
Написать и проверить работу
программы, представленные в пр
мерах.
Подключить лабораторный макет к отладочной плате.
Организовать на светодиодах лабораторного макета “бегущий 0”.
Временная задержка должна быть организована по прерыванию тайм
ра, а скорость должна определяться АЦП.
Организовать на светодиодах лабораторного макета “бегущую 1”.
Временная задержка должна быть организована по прерыванию тайм
ра, а скорость должна оп
ределяться АЦП.
Вывести на светодио
ды числа в двоичном коде от 0÷255
с задер
кой в 1 с.
Временная задержка должна быть организована по прерыв
а-
нию таймера, а скорость должна определяться АЦП.
Организовать на светодиодах лабораторного макета “эквалайзе
р”.
Временная задержка должна быть организована по прерыванию тайм
ра, а скорость должна определяться АЦП.
Организовать на выводе порта импульсы с чатотой 5 кГц и коэ
фициентом заполнения от 0.1 до 0.9. Длительности должны определятся
таймером и изменят
ься посредмтвам АЦП.
�� &#x/MCI; 0 ;&#x/MCI; 0 ; ADC_InitStructure.ADC_TempSensorConversion =
ADC_TEMP_SENSOR_CONVERSION_Disable; //Выключение конве
тации датчика температуры
ADC_InitStructure.ADC_IntVRefConversion =
ADC_VREF_CONVE
RSION_Disable; //Выключение преобразования
опорного напряжения
ADC_InitStructure.ADC_IntVRefTrimming = 0; //Коэффициент для
опорного напряжения
ADC_Init (&ADC_InitStructure);
ADCx_InitStructure.ADC_ClockSource =
ADC_CLOCK_SOURCE_CPU; //
Выб
источника
тактирования
ADCx_InitStructure.ADC_SamplingMode =
ADC_SAMPLING_MODE_CICLIC_CONV; //
Непрерывный
режим
е-
образований
ADCx_InitStructure.ADC_ChannelSwitching =
ADC_CH_SWITCHING_Disable; //
Запрет
переключения
каналов
ADCx_InitStructure.ADC_ChannelNumber = ADC_CH_ADC7; //
Номер
канала
ADCx_InitStructure.ADC_Channels = 1; //
Количество
каналов
ADCx_InitStructure.ADC_LevelControl =
ADC_LEVEL_CONTROL_Disable; //
Отключение
контроля
уровня
вхо
д-
ного
сигнала
ADCx_InitStructure.ADC_VRefSource =
ADC_VREF_SOURCE_INTERNAL; //
Внутренний
источник
опорного
напряжения
ADCx_InitStructure.ADC_Prescaler = ADC_CLK_div_32768;
Предварительный
делитель
ADCx_InitStructure.ADC_DelayGo = 250; //
держка
между
е-
образованиями
ADC1_Init (&ADCx_InitStructure);
//******************************
Настройка
прерываний
//******************************
ITConfig
ADCx
CONVERSION
ENABLE
);
Разрешение
прерываний
окончанию
пре
образования
__enable_irq(); //Глобальное разрешение прерываний
NVIC_EnableIRQ(ADC_IRQn); //Разрешения внешнего прерывания
//******************************
�� &#x/MCI; 0 ;&#x/MCI; 0 ; sTIM_ChnInit.TIMER_CH_Mode = TIMER_CH_MODE_PWM;
Выбор
режима
ШИМ
sTIM_ChnInit.TIMER_CH_REF_Format = TI
ER_CH_REF_Format6; //
Выбор
режима
боты
ШИМ
если
счетный
е-
гистр
регистра
сравнения
PA1
висит
логоческая
"1",
иначе
"0"
TIMER_ChnInit(MDR_TIMER1, &sTIM_ChnInit); //
Заполнение
стру
туры
настройки
TIMER1
/*****************************/
TIMER_SetChnCompare(MDR_TIMER1, TIMER_CHANNEL1, 0x1FF);
// Ложим в регистр сравнения число, которое будет отвечать за ачал
ную длительность импульса
/***********Настройка режима ШИМ**********/
TIMER_ChnOutStructInit(&sTIM_ChnOutInit); //Объявление
структуры
настройки TIMER1
sTIM_ChnOutInit.TIMER_CH_Number = TI
ER_CHANNEL1; //
Выбор
канала
ШИМ
sTIM_ChnOutInit.TIMER_CH_DirOut_Polarity = TI
ER_CHOPolarity_NonInverted; //
Без
инверсии
sTIM_ChnOutInit.TIMER_CH_DirOut_Source
= TI
ER_CH_OutSrc_REF; //
канале
h1
будет
дублироваться
значение
REF
sTIM_ChnOutInit.TIMER_CH_DirOut_Mode = TI
ER_CH_OutMode_Output; //
Настройка
канала
выход
TIMER_ChnOutInit(MDR_TIMER1, &sTIM_ChnOutInit);//
Заполнение
структуры
настройки
TIMER1
/********************************************/
Настройка
//******************************
ADC_InitStructure.ADC_SynchronousMode =
ADC_SyncMode_Independent; //
Выбор
независимого
режима
работы
ADC_InitStructure.ADC_StartDelay = 0; //Нулевая задержка при
старте преобразования
ADC_InitStructure.ADC_TempSensor =
ADC_TEMP_SENSOR_Disable; //Выключение датчика температуры
ADC_InitStructure.ADC_TempSensorAmplifier =
ADC_TEMP_SE
NSOR_AMPLIFIER_Disable; //Выключение уселителя
датчика температуры
�� &#x/MCI; 0 ;&#x/MCI; 0 ; PORT_Init(MDR_PORTA, &PORT_InitStructure); //
Заполнение
структ
настроики
PORTA
/**********************************/
TIMER_DeInit(MDR_TIMER1); //
Сброс
всех
настроек
TIMER1
TIMER_BRGInit(MDR_TIMER1,TIMER_HCLKdiv1);
/*****Настройка конфигураций TIMER1****/
sTIM_CntInit.TIMER_Prescaler

= 0x20; //Выбор предделителя
частоты
sTIM_CntInit.TIMER_Period = 0xFFF; //Период счета тайм
е-
sTIM_CntInit.TIMER_CounterMode =
TIMER_CntMode_ClkFixedDir; //Направление счета неизменно
sTIM_CntInit.TIMER_C
ounterDirection = TIMER_CntDir_Up;
Режим
счета
вверх
sTIM_CntInit.TIMER_EventSource = TIMER_EvSrc_None;
Выбор
источника
прерываний
отсутствует
sTIM_CntInit.TIMER_FilterSampling = TI
ER_FDTS_TIMER_CLK_div_1;
sTIM_CntInit.TIMER_ETR_FilterConf = TI
ER_Filter_1FF_at_TIMER_CLK;
sTIM_CntInit.TIMER_ARR_UpdateMode = TI
ER_ARR_Update_On_CNT_Overflow; //
Обнавление
ARR
при
перепо
нении
sTIM_CntInit.TIMER_ETR_Prescaler = TI
ER_ETR
_Prescaler_None; //
Без
деления
входной
частоты
sTIM_CntInit.TIMER_ETR_Polarity = TI
ER_ETRPolarity_NonInverted; //
Нет
инверсии
входного
sTIM_CntInit.TIMER_BRK_Polarity = TI
ER_BRKPolarity_NonInverted; //
Нет
инверсии
входного
TIMER_CntInit (MDR_TIMER1,&sTIM_CntInit); //Заполнение структ
ры настройки таймера
/***************************************/
/*******Настроика TIMER1 на режим ШИМ*****/
TIMER_ChnStructInit(&sTIM_ChnInit); //Объявление структуры н
а-
стройки TIM
ER1
sTIM_ChnInit.TIMER_CH_Number = TIMER_CHANNEL1;
Выбор
канала
(PA1)
�� &#x/MCI; 0 ;&#x/MCI; 0 ; RST_CLK_DeInit(); //Сброс системы тактирования
RST_CLK_CPU_PLLconfig (RST_CLK_CPU_PLLsrcHSIdiv2,0);
//Инициализация системы тактирования
RST_CLK_PCLKcmd((RST_CLK_PCLK_RST_CLK |
RST_
CLK_PCLK_TIMER1| RST_CLK_PCLK_ADC),ENABLE);
//Тактирование TIMER1 и ADC
RST_CLK_PCLKcmd((RST_CLK_PCLK_PORTA), ENABLE);
Тактирование
PORTA
SCB
>AIRCR = 0x05FA0000 | ((uint32_t)0x500); //Настройка регистра
управления прерываниями и программного сброса
SCB
>VTOR = 0x08000000; //
Включение таблицы векторов
MDR_RST_CLK
>TIM_CLOCK = 0x01000000; //Включение тактир
вания таймера
MDR_RST_CLK
>ADC_MCO_CLOCK = 0x2000; //Включение такт
рования АЦП
/*******************************************/
//Наст
ройка вывода для АЦП
//******************************
PORT_InitStructure.PORT_Pin = PORT_Pin_7; //Выбор настраиваемого
вывода
PORT_InitStructure.PORT_OE = PORT_OE_IN; //Настройка вывода
порта на режим вход (может быть выход
PORT_OE_OUT)
PORT_I
nitStructure.PORT_MODE = PORT_MODE_ANALOG;
//Настройка режима работы вывода аналоговый (может быть цифровой
PORT_MODE_DIGITAL)
PORT_Init(MDR_PORTD, &PORT_InitStructure); //Применение запо
ненной структуры к выбранному порту
//************************
******
/*******Настройка вывода РА1********/
PORT_InitStructure.PORT_Pin = PORT_Pin_1; //Выбор настраиваемого
вывода
PORT_InitStructure.PORT_OE = PORT_OE_OUT; //Настройка вывода
на выход
PORT
InitStructure
PORT
FUNC
PORT
FUNC
; //
Функция
вывода
альтернативная
PORT_InitStructure.PORT_MODE = PORT_MODE_DIGITAL; //
Режим
работы
цифровой
PORT_InitStructure.PORT_SPEED = PORT_SPEED_FAST; //
Высокая
скорость
работы
короткие
фронты
�� &#x/MCI; 0 ;&#x/MCI; 0 ;ADC1_Cmd (ENABLE);

//Запуск АЦП
имер 5. Программа настройки АЦП и
ШИМ микроконтроллера
#include "MDR32F9Qx_config.h"
#include "MDR32Fx.h"
#include "MDR32F9Qx_timer.h"
#include "MDR32F9Qx_rst_clk.h"
#include "MDR32F9Qx_port.h"
#include "MDR32F9Qx_it.c"
#include "system_MDR32F9Qx.c"
#include "MDR32F9Qx_adc.c"
/*****
Объявление
структур
*****/
TIMER_CntInitTypeDef sTIM_CntInit;
TIMER_ChnInitTypeDef sTIM_ChnInit;
TIMER_ChnOutInitTypeDef sTIM_ChnOutInit;
PORT_InitTypeDef PORT_InitStructure;
TIMER_CntInitTypeDef TIM_CntInitStructure;
ADC_InitTypeDef ADC_InitStructure;
x_InitTypeDef ADCx_InitStructure;
/***********************************/
int res; //Объявление переменной, в которой будет содержаться значение
преобразования АЦП
/**********Вектор прерывания АЦП*************/
void ADC_IRQHandler(void)
ADC1_Cmd (DIS
ABLE); //Остановка АЦП
res=ADC1_GetResult(); //Считывание результата преобразования
NVIC_ClearPendingIRQ(ADC_IRQn); //Очистка бита ожидания вне
него прерывания EXTI1
ADC1_Cmd (ENABLE); //Запуск АЦП
/*******************************************/
void main(void)
/**********Настройка тактирования**************/
�� &#x/MCI; 0 ;&#x/MCI; 0 ;ADCx_InitStructure.ADC_Channels = 1;
Количество
каналов
ADCx_InitStructure.ADC_LevelControl =
ADC_LEVEL_CONTROL_Disable;
Отключение
контроля
уровня
входного
сигнала
ADCx_InitStructure.ADC_VRefSource =
ADC_VREF_SOURCE_INTERNAL;
//Внутренний источник
опорного напряжения
ADCx
InitStructure
Prescaler
CLK
div
_32768;
//Предварительный делитель
ADCx
InitStructure
DelayGo
= 250;
//Задержка между
преобразованиями
Init
ADCx
InitStructure
//Настройка прерываний
ITConfig
ADCx
CONVERSION
ENABLE
);
//Разрешение прерываний по
окончанию преобразования
__enable_irq();

//Глобальное разрешение
прерываний
NVIC_EnableIRQ(ADC_IRQn);
//Разрешения внешнего
прерывания
Cmd
ENABLE
);

Запуск
while
(1)
for (i=0;i<463000
res;i++);

Задержка
PORT_ResetBits(MDR_PORTC, PORT_Pin_1);
//Установить лог "0" на
1 выводе порта C
for (i=0;i<463000
res;i++);

Задержка
PORT_SetBits(MDR_PORTC, PORT_Pin_1);
//Установить лог "0" на 1
выводе порта C
void ADC_IRQHandler(void)
ADC1_Cmd (DISABLE);

//Остановка АЦП
res=ADC1_GetResult();

//Считывание результата
преобразования
NVIC_ClearPendingIRQ(ADC_IRQn);
//Очистка бита ожидания
внешнего прерывания EXTI1
�� &#x/MCI; 0 ;&#x/MCI; 0 ;//быть
цифровой
PORT
MODE
DIGITAL
PORT_Init(MDR_PORTD, &PORT_InitStructure);
//Применение
заполненной структуры к
выбранному порту
//Настройка АЦП
ADC_InitStructure.ADC_SynchronousMode =
ADC_SyncMode_Independent;

//Выбор независимого режима

работы
ADC_InitStructure.ADC_StartDelay = 0;
//Нулевая задержка при старте
преобразования
ADC_InitStructure.ADC_TempSensor = C_TEMP_SENSOR_Disable;


Выключение
датчика
температуры
ADC_InitStr
ucture.ADC_TempSensorAmplifier
ADC_TEMP_SENSOR_AM
PLIFIER_Disable;
Выключение
уселителя
датчика
температуры
ADC_InitStructure.ADC_TempSensorConversion =
ADC_TEMP_SENSOR_CONVERSION_Disable;
Выключение
конвертации
датчика
температуры
ADC_InitStructure.ADC_IntVRefConversion =
ADC_VREF_CONVERSION_Disable;
//Выключение преобразования
опорного напряжения
ADC_InitStructure.ADC_IntVRefTrimming = 0;
//Коэффициент для
опорного напряжения
ADC_Init (&ADC_InitStructure);
ADCx_InitStructure.ADC_ClockSource =
ADC_CLOCK_SOURCE_CPU;
Выбор
источника
тактиров
ADCx_InitStructure.ADC_SamplingMode=
ADC_SAMPLING_
MODE_CICLIC_CONV;
Непрерывный
режим
преобразований
ADCx_InitStructure.ADC_ChannelSwitching =
ADC_CH_SWITCHING_Disable;
Запрет
переключения
каналов
ADCx_InitStructure.ADC_ChannelNumber = ADC_CH_ADC7;
Номер
канала
�� &#x/MCI; 0 ;&#x/MCI; 0 ;MDR_RST_CLK
>ADC_MCO_CLOCK=
0x2000;
//Включение
тактирования АЦП
//Настройка выводов для светодиодов
PORT
InitStructure
PORT
Pin
PORT
Pin
_0 |
PORT
Pin
_1);
Выбор
настраиваемого
вывода
PORT
InitStructure
PORT
PORT
Настройка
вывода
порта
режим
выход
может
быть
вход
PORT
PORT
InitStructure
PORT
FUNC
PORT
FUNC
PORT
Функция
порта
порт
так
может
быть
основная
функция
PORT
FUNC
MAIN
альтернативная
функция
PORT
FUNC
ALTER
переопределенная
функция
PORT
FUNC
OVERRID
PORT
InitStructure
PORT
MODE
PORT
MODE
DIGITAL
Настройка
режима
работы
вывода
цифровой
может
быть
аналоговый
PORT
MODE
ANALOG
PORT
InitStructure
PORT
SPEED
PORT
SPEED
SLOW
Выбор
скорости
медленный
фронт
(100
) (
может
так
быть
отключен
PORT
OUTPUT
OFF
быстрый
фронт
(20
PORT
SPEED
FAST
максимально
быстрый
фронт
(10
PORT
SPEED
MAXFAST
PORT_Init(MDR_PORTC, &PORT_InitStructure);
//Применение
заполненной структуры к
выбранному порту
//Настройка вывода для АЦП
PORT
InitStructure
PORT
Pin
PORT
Pin
_7;
Выбор
настраиваемого
вывода
PORT
InitStructure
PORT
PORT
Настройка
вывода
порта
режим
вход
может
быть
выход
PORT
PORT
InitStructure
PORT
MODE
PORT
MODE
ANALOG
Настройка
режима
работы
вывода
аналоговый
может
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Продолжение таблицы 4.1
ADC1_L_LEVEL
Регистр MDR_
>ADCx_L_LEVEL нижней границы
ADC1
ADC2_L_LEVEL
Регистр MDR_ADC
>ADCx_L_LEVEL нижней границы
ADC2
ADC1_RESULT
Регистр MDR_ADC
>ADCx_RESULT результата ADC1
ADC2_RESULT
Регистр MDR_ADC
>ADCx_RESULT результата ADC2
ADC1_STATUS
Регистр MDR_ADC
ADCx_STATUS статуса ADC1
ADC2_STATUS
Регистр MDR_ADC
>ADCx_STATUS статуса ADC2
ADC1_CHSEL
Регистр MDR_ADC
>ADCx_CHSEL выбора каналов пер
бора ADC1
ADC2_CHSEL
Регистр MDR_ADC
>ADCx_CHSEL выбора каналов пер
бора ADC2
Пример программ настройки
АЦП
Пример
5. Программа настройки АЦП1
микроконтроллера
Программа реализует мерцание светодиода с переменной част
той. Частота изменяется посредствам переменного резистора, подкл
ченного к входу АЦП микроконтроллера.
#include "MDR32Fx.h"
#include "MDR32F9Qx_port.c"
#include "MDR32F9Qx_rst_clk.c"
#include "MDR32F9Qx_it.c"
#include "MDR32F9Qx_adc.c"
#include "system_MDR32F9Qx.c"
PORT
InitTypeDef
PORT
InitStructure
явление
структуры
инициализации
портов
InitTypeDef
InitStructure
//Об
явление структуры
инициализации АЦП
ADCx
InitTypeDef
ADCx
InitStructure
//Об
явление структуры
инициализации АЦП
int
res
=0,

//Объявление переменных
int
main
void
RST
CLK
PCLKcmd
RST
CLK
PCLK
PORTA
|
RST
CLK
PCLK
PORTB
RST
CLK
PCLK
PORTC
|
RST
CLK
PCLK
PORTD
RST
CLK
PCLK
ENABLE
);
//Разрешение тактирования
периферии
SCB
>VTOR = 0x08000000;

Включение таблицы векторов
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Флаг Flg_REG_OVERWRITE может быть сброшен только записью в р
е-
гистр ADCx_STATUS.
Для последовательного преобразования одного и того же канала
можно в регистре ADCx_CHSEL выбрать только один канал и устан
вить бит Cfg_REG_CHCH в 1, либо установить номер кан
ала в битах
Cfg_REG_CHS[4:0] и сбросить бит Cfg_REG_CHCH в 0. В этом случае
процесс последовательного преобразования будет выполняться только
для данного канала. Последовательное преобразование значения датч
ка температуры и источника опорного напряжения м
огут выполняться
только в режиме последовательного преобразования одного канала.
Преобразование с контролем границ
При необходимости отслеживать нахождение оцифрованных зн
а-
чений в допустимых пределах можно задать нижнюю и верхнюю допу
с-
тимые границы в регис
трах ADCx_L_LEVEL и ADCx_H_LEVEL. При
этом если установлен бит Cfg_REG_RNGC, то в случае, если результат
преобразования выходит за границы, выставляется флаг
Flg_REG_AWOIFEN, а в регистре результата будет полученное знач
е-
ние.
Синхронный запуск двух АЦП
Для
ускорения оцифровки одного канала можно использовать оба
АЦП, запускаемые с задержкой одного относительно другого по врем
е-
ни. Время задержки запуска второго АЦП относительно первого задае
ся битами Delay_ADC. При этом задержка Delay_ADC определяется в
так
тах CPU_CLK, независимо от того на какой частоте ADC_CLK или
CPU_CLK идет само преобразование. Для одновременного запуска пр
цесса преобразования необходимо установить бит Cfg_Sync_Conver и
запустить процесс преобразования установкой бита Cfg_REG_GO. Си
онный запуск двух АЦП может работать также и в режиме послед
вательного преобразования нескольких каналов.
В таблице
4.1
представлены регистры управления и настройки
Таблица
Регистры АЦП
Название
Описание
�0�'�5�B�$�'�&
Dhgljhee_j��$�'�&
�0�'�5�B�$�'�&
�$�'�&��B�&�)�*
J_]bklj�mijZ\e_gby��$�'�&�
�0�'�5�B�$�'�&
�!�$�'�&��B�&�)�*
J_]bklj�mijZ\e_gby��$�'�&�
�$�'�&��B�+�B�/�(�9�(�/
J_]bklj��0�'�5�B�$�'�&
�!�$�'�&�[�B�+�B�/�(�9�(�/�\_jog_c�]jZgbpu�
�$�'�&�
�$�'�&��B�+�B�/�(�9�(�/
J_]bklj��0�'�5�B�$�'�&
�!�$�'�&�[�B�+�B�/�(�9�(�/�\_jog_c�]jZgbpu�
�$�'�&�
�� &#x/MCI; 0 ;&#x/MCI; 0 ;ADC0_REF+
ADC1_REF
Биты
Cfg_REG_CHCH,
Cfg_REG_RNGC, Cfg_REG_SAMPLE, TS_BUF_EN, SEL_VREF,
SEL_TS
Cfg_Sync_Conver
должны
быть
сброшены
Для начала преобразования необходимо записать 1 в бит
Cfg_REG_GO.
После завершения
преобразования будет взведен бит
Flg_REG_EOCIF в регистре ADCx_STATUS, а в регистре
ADCx_RESULT будет результат преобразования.
После считывания результата бит Flg_REG_EOCIF сбросится.
Если после первого преобразования результат не был считан, и
было выпол
нено второе преобразование, то в регистре результата
ADCx_RESULT будет значение от последнего преобразования, и пом
мо бита Flg_REG_EOCIF будет взведен бит Flg_REG_OVERWRITE.
Флаг Flg_REG_OVERWRITE может быть сброшен только записью в р
е-
гистр ADCx_STATUS.
Последовательное преобразование нескольких каналов
Для автоматического последовательного преобразования нескол
ких каналов или одного канала в регистре ADCx_CHSEL необходимо
установить единицы в битах, соответствующих выбранным для прео
разования каналам.
Преобразование может осуществляться при вну
ренней опоре бит Cfg_M_REF = 0 и внешней Cfg_M_REF = 1. В этом
случая опора берется с выводов ADC0_REF+ и ADC1_REF
. Биты
Cfg_REG_RNGC, TS_BUF_EN, SEL_VREF, SEL_TS и Cfg_Sync_Conver
должны быть сброшены, а биты
Cfg_REG_CHCH должны быть уст
а-
новлены. С помощью бит Delay_GO можно задать паузу между прео
разованиями при переборе каналов. Эта определяется в тактах
CPU_CLK, независимо от того на какой частоте ADC_CLK или
CPU_CLK идет само преобразование. Для начала пре
образования нео
ходимо записать 1 в бит Cfg_REG_SAMPLE.
После завершения преобразования будет взведен бит
Flg_REG_EOCIF в регистре ADCx_STATUS, а в регистре
ADCx_RESULT будет результат преобразования.
После считывания результата бит Flg_REG_EOCIF
сбросится.
Если после первого преобразования результат не был считан, и
было выполнено второе преобразование, то в регистре результата
ADCx_RESULT будет значение от последнего преобразования, и пом
мо бита Flg_REG_EOCIF будет взведен бит Flg_REG_OVERWRITE.
Рис.
. Структурная схема
аналогово
цифрового преобразователя
Для включения АЦП необходимо установить бит
Cfg_REG_ADON. Для снижения тока потребления вместо собственного
источника опорного напряжения в АЦП может использоваться исто
ник датчика температуры. Для этого необходимо включить блок датч
ка температуры и источник опорного напряжения, установив бит TS_EN
в 1. После включения можно использовать источник опорного напр
е-
ния для первого и второго АЦП вместо их собственных. Для этого н
обходимо установить биты ADCx_OP в единицу. Для преобразования
необходимо, чтобы выводы, используемые АЦП у порта D, были ско
фигурированы как аналоговые и были отключены какие
либо внутре
ние подтяжки.
Преобразование внешнего канала
В регистре ADCx_CFG в битах Cfg_REG_CHS[4:0] необходимо
задать соответствующий выводу номер канала. Преобразование может
осуществляться при внутренней опоре бит Cfg_M_REF = 0 и внешней
Cfg_M_REF = 1, в этом сл
учая опора берется с выводов
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Глава 4
АНАЛОГОВО
ЦИФРОВЫЕ ПРЕОБРАЗОВАТЕЛИ
МИКРОКОНТРОЛЛЕРА К1986ВЕ92QI
Описание
АЦП
микроконтроллера
В микроконтроллере
К1986ВЕ92QI реализовано два 12
разрядных
АЦП. С помощью АЦП можно оцифровать сигнал от 16 внешних ан
а-
логовых выв
одов порта D и от двух внутренних каналов, на которые
выводятся датчик температуры и источник опорного напряжения. Ск
рость выборки составляет до 512 тысяч преобразований в секунду для
каждого АЦП. В качестве опорного напряжения преобразования могут
выступ
ать:
питание АЦП с выводов AUCC и AGND;
внешние сигналы с выводов ADC0_REF+ и ADC_REF
Контроллер АЦП позволяет:
оцифровать один из 16 внешних каналов;
оцифровать значение встроенного датчика температуры;
оцифровать значение встроенного источника опорного
напряж
е-
ния;
осуществить автоматический опрос заданных каналов;
выработать прерывание при выходе оцифрованного значения за
заданные пределы;
запускать два АЦП синхронно для увеличения скорости выборки.
Для осуществления преобразования требуется не менее 2
8 тактов
синхронизации CLK. В качестве синхросигнала может выступать част
та процессора CPU_CLK,
либо частота ADC_CLK
. Выбор частоты ос
ществляется с помощью бита Cfg_REG_CLKS. Частота CPU_CLK фо
мируется из частоты процессорного ядра делением на коэффицие
нт
Cfg_REG_DIVCLK[3:0]. Максимальная частота CLK не может прев
шать 14 МГц.
�� &#x/MCI; 0 ;&#x/MCI; 0 ;3. Организовать
на светодиодах лабораторного макета “бегущий 0”.
Временная задержка должна быть организована по прерыванию тайм
ра.
Организовать на светодиодах лабораторного макета “бегущую 1”.
Временная задержка должна быть организована по прерыванию тайм
ра.
Выве
сти на светодио
ды числа в двоичном коде от 0÷255
с задер
кой в 1 с.
Временная задержка должна быть организована по прерыв
а-
нию таймера.
Организовать на светодиодах лабораторного макета “эквалайзер”.
Временная задержка должна быть организована по прерыван
ию тайм
ра.
Организовать на выводе порта импульсы с чатотой 5 кГц и коэ
фициентом заполнения 0.25.
Длительности должны определятся тайм
е-
ром.
Организовать на выводе порта импульсы с чатотой 50 кГц и к
эффициентом заполнения 0.15.
Длительности должны о
пределятся та
мером.
Организовать на выводе порта импульсы с чатотой 100 кГц и к
эффициентом заполнения 0.75.
Длительности должны определятся та
мером.
Организовать на светодиодах лабораторного макета “бегущий 0”
с
изменением скорости по внешним пре
рываниям.
Временная задержка
должна быть организована по прерыванию таймера.
Организовать на светодиодах л
абораторного макета “бегущую 1”
с изменением скорости по внешним прерываниям.
Временная задержка
должна быть организована по прерыванию таймера.
2. Организовать на светодиодах лабораторного макета свечение свет
диодов с изменяемой яркостью посредствам кнопок.
Организовать на выводе порта импульсы с чатотой от 10 до 100
кГц и коэффициентом заполнения 0.5. Изменение частоты осуществлять
по внешни
м прерываниям.
Организовать на выводе порта импульсы с чатотой от 1 до 500
кГц и коэффициентом заполнения 0.5. Изменение частоты осуществлять
по внешним прерываниям.
Написать программы вывода на дисплей результата измерения
частоты входного
мипульсного сигнала.
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;TIMER
ChnOutStructInit
sTIM
ChnOutInit
); //Объявление
//структуры настройки
TIMER
sTIM_ChnOutInit.TIMER_CH_Number
= TIMER_CHANNEL1;
//Выбор канала ШИМ
sTIM_
ChnOutInit.TIMER_CH_DirOut_Polarity = TI
ER_CHOPolarity_NonInverted;
//Без инверсии
sTIM_Ch
nOutInit.TIMER_CH_DirOut_Source
= TI
ER_CH_OutSrc_REF;

//На канале Сh1 будет
дублироваться значение
REF
sTIM_
ChnOutInit.TIMER_CH_DirOut_Mode
= TI
ER_CH_OutMode_Output;

//Настройка канала Сh1 на
выход
ChnOutInit
MDR
TIMER
1, &
sTIM
ChnOutInit
);
//Заполнение структуры
настройки
TIMER
/********************************************/
TIMER
Cmd
MDR
TIMER
ENABLE
);//
Включение
таймера
while
(1)
Лабораторная работа №2. Таймеры
Цель работы
Целью
работы является изучение основ работы
таймеров
микр
контроллера
К1986ВЕ92
Оборудование
Компьютер
Отладочная плата микроконтроллера
К1986ВЕ92
Лабораторный макет.
Источник питания 12В, 1А.
Программа работы
Написать и проверить работу
программы, представленные в пр
мерах.
Подключить лабораторный макет к отладочной плате.
�� &#x/MCI; 0 ;&#x/MCI; 0 ; sTIM_CntInit.TIMER_ETR_Prescaler
= TI
ER_ETR_Prescaler_None;

//Без деления входной

частоты
sTIM
CntInit
TIMER
Polarity
ETRPolarity
NonInverted
; //
Нет
инверсии
входного

sTIM_CntInit.TIMER_BRK_Polarity
= TI
ER_BRKPolarity_NonInverted;
//Нет инверсии входного

TIMER
CntInit
MDR
TIMER
1,&
sTIM
CntInit
); //
Заполнение
структуры
настройки
таймера
/***************************************/
/*******Настроика
TIMER
1 на режим ШИМ*****/
TIMER
ChnStructInit
sTIM
ChnInit
); //Объявление структуры
//настройки
TIMER
sTIM_ChnInit.TIMER_CH_Number = TIMER_CHANNEL1;
//Выбор канала (PA1)
sTIM
_ChnInit.TIMER_CH_Mode
= TIMER_CH_MODE_PWM;
//Выбор режима ШИМ
sTIM_ChnInit.TIMER_CH_REF_Format = TI
ER_CH_REF_Format6;

//Выбор режима работы
ШИМ
если счетный
регистр < регистра
сравнения, то на
висит
логоческая
"1",
иначе
"0"
TIMER
ChnInit
MDR
TIMER
1, &
sTIM
ChnInit
);
//Заполнение
структуры
настройки
TIMER
/*****************************/
TIMER
SetChnCompare
MDR
TIMER
1,
TIMER
CHANNEL
1,
10); //
Кладём
в регистр
сравнения число, которое
будет отвечать за
длительность импульса
/***********Настройка режима ШИМ**********/
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;//Выбор настраиваемого
вывода
PORT
InitStructure
PORT
PORT
//Настройка вывода на
выход
PORT
InitStructure
PORT
FUNC
PORT
FUNC
Функция
вывода
альтернативная
PORT_InitStructure.PORT_MODE = PORT_MODE_DIGITAL;
//Режим работы
цифровой
PORT_InitStructure.PORT_SPEED = PORT_SPEED_FAST;
//Высокая скорость работы
короткие фронты)
PORT_Init(MDR_PORTA, &PORT_InitStructure);
//Заполнение структуры
настроики
PORTA
/**********************************/
TIMER
DeInit
MDR
TIMER
1);
//Сброс всех настроек
TIMER
TIMER_BRGInit(MDR_TIMER1,TIMER_HCLKdiv1);
/*****Настройка конфигураций
TIMER
1****/
sTIM
CntInit
TIMER
Prescaler
= 0
20; //Выбор предделителя
//частоты
sTIM
CntInit
TIMER
Period
= 0
xFF
; //Период счета тайме
sTIM
CntInit
TIMER
CounterMode
CntMode
ClkFixedDir
; //Направление счета н
е-
изменно
sTIM_CntInit.TIMER_CounterDirection = TIMER_CntDir_Up;
//Режим счета вверх
sTIM_CntInit.TIMER_EventSource = TIMER_EvSrc_None;
//Выбор источника
прерываний
отсутствует
sTIM_CntInit.TIMER_FilterSampling = TI
ER_FDTS_TIMER_CLK_div_1;
sTIM_CntInit.TIMER_ETR_FilterConf = TI
ER_Filter_1FF_at_TIMER_CLK;
sTIM_CntInit.TIMER_ARR_UpdateMode= TI
ER_ARR_Update_On_CNT_Overflow; //Об
навление ARR при

переполнении СNT
�� &#x/MCI; 0 ;&#x/MCI; 0 ;#include "MDR32Fx.h"
#include
"MDR32F9Qx_timer.h"
#include "MDR32F9Qx_rst_clk.h"
#include "MDR32F9Qx_port.h"
#include "MDR32F9Qx_it.c"
include
system
MDR
/*****Объявление структур*****/
TIMER_CntInitTypeDef sTIM_CntInit;
TIMER_ChnInitTypeDef sTIM_ChnInit;
TIMER_ChnOutInitTy
peDef sTIM_ChnOutInit;
PORT_InitTypeDef PORT_InitStructure;
TIMER_CntInitTypeDef TIM_CntInitStructure;
/***********************************/
void main(void)
/**********Настройка тактирования**************/
RST
CLK
DeInit
();

//Сброс системы
тактирования
RST
CLK
CPU
PLLconfig
RST
CLK
CPU
PLLsrcHSIdiv
2,0);
//Инициализация системы
тактирования
RST
CLK
PCLKcmd
RST
CLK
PCLK
RST
CLK
|
RST
CLK
PCLK
TIMER
1),
ENABLE
); //Тактирование
TIME
RST_CLK_PCLKcmd((RST_CLK_PCLK_PORTA), ENABLE);
//Тактирование PORTA
SCB
>AIRCR = 0x05FA0000 | ((uint32_t)0x500);
//Настройка регистра
управления
прерываниями и
программного сброса
SCB
= 0
08000000;
Включение таблицы
векторов
MDR
RST
CLK
TIM
CLOCK
= 0
01000000; //Включение
тактирования таймера
/*******************************************/
/*******Настройка вывода РА1********/
PORT_InitStructure.PORT_Pin = PORT_Pin_1;
�� &#x/MCI; 0 ;&#x/MCI; 0 ; NVIC_ClearPendingIRQ(TIMER1_IRQn); //Очистка бита ожидания
внешнего прерывания TI
MER1
enable
irq
(); //Глобальное разрешение прерываний
NVIC
EnableIRQ
TIMER
IRQn
); //Разрешения внешнего прерывания
TIMER
TIMER_ITConfig(MDR_TIMER1, TIMER_STATUS_CNT_ARR, EN
BLE); //Настройка прерываний таймера
TIMER_Cmd(MDR_TIMER1, ENABLE);
//Включение таймера
while(1)
void Timer1_IRQHandler(void)
NVIC_ClearPendingIRQ(TIMER1_IRQn); //Очистка бита ожидания
внешнего прерывания TIMER1
TIMER_ClearFlag(MDR_TIMER1, TIMER_STATUS_CNT_ARR);
//Очистка флага достижения счетчиком
значения периода
MDR
PORTC
RXTX
^= 0
03; //Инверсия состояния 0 и 1 выводов
порта С
Пример
. Настройка режима работы TIMER1 на
работу в
режим
широтно
импульсной модуляции (ШИМ)
#include "MDR32F9Qx_config.h"
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;PORT
InitStructure
PORT

PORT
; //Настройка вывода
порта на режим выход (может быть вход
PORT
PORT
InitStr
ucture
PORT
FUNC
PORT
FUNC
PORT
; //Функция
порта
порт (так же может быть:основная функция
PORT
FUNC
MAIN
, альтернативная функция
PORT
FUNC
переопределенная функция
PORT
FUNC
OVERRID
PORT
InitStructure
PORT
MODE
PORT
MODE
DIGITAL
//Настройка режима работы вывода цифровой (может быть аналоговый
PORT
MODE
PORT
InitStructure
PORT
SPEED
PORT
SPEED
SLOW
; //Выбор
скорости медленный фронт(100нс) (может так же быть отключен
PORT
OUTPUT
OFF
, быстрый фронт(20нс)
PORT
SPEED
FAST
ма
симально быстрый фронт(10нс)
PORT
SPEED
MAXFAST
PORT
Init
MDR
PORTC
, &
PORT
InitStructure
); //Применение запо
ненной структуры к выбранному порту
//******************************
//Настройка таймера
//******************************
TIM
CntI
nitStructure
TIMER
Prescaler

= 0
xFFFF
;
//Предварительный делитель
TIM_CntInitStructure.TIMER_Period = 0x1F; //Период счета
TIM_CntInitStructure.TIMER_CounterMode = TI
ER_CntMode_ClkFixedDir; //Режим счета
TIM_CntInitStructure.TIMER_CounterDirection = TI
ER_CntDir_Up; //Счет вверх
TIMER_CntInit (MDR_TIMER1,&TIM_CntInitStructure);
//******************************
�� &#x/MCI; 0 ;&#x/MCI; 0 ;#include "MDR32Fx.h"
#include "MDR32F9Qx_port.c"
#include "MDR32F9Qx_timer.c"
#include "MDR32F9Qx_rst_clk.c"
#include "MDR32F9Qx_it.c"
#include "system_MDR32F9Qx.c"
PORT
InitTypeDef
PORT
InitStructure
;
//Обявление структуры иници
а-
лизации портов
TIMER
CntInitTypeDef
TIM
CntInitStructure
; //Обявление структуры
инициализации таймеров
int
main
void
RST
CLK
PCLKcmd
RST
CLK
PCLK
PORTA
RST
CLK
PCLK
PORTB
|
RST
CLK
PCLK
PORTC
RST
CLK
PCLK
PORTE
|
RST
CLK
PCLK
TIMER
1,
ENABLE
);
//Разрешение тактирования периферии
SCB
= 0
08000000; //Включение таблицы векторов
MDR
RST
CLK
TIM
CLOCK
= 0
01000000; //Включение тактир
вания таймера
//Настройка выводов для светодиодов
//******************************
PORT
InitStructure
PORT
Pin
= (
PORT
Pin
_0 |
PORT
Pin
_1); //Выбор
настраиваемого вывода
�� &#x/MCI; 0 ;&#x/MCI; 0 ;MDR_TIMERx
>PSG=
0x00000000;
//Предделитель частоты
MDR_TIMERx
>ARR=
0x00000013;

//Период счета
MDR_TIMERx
>CNTRL=0x00000041
//Счет вверх/вниз по TIM_CLK.
Рис.
. Диаграмма счёта вверх/вниз
Счет
вверх/вниз
: CNT_MODE = 01, DIR = 1
MDR_TIMERx
>CNTRL=
0x00000000;

//Настраиваем работу основного
счетчика
MDR_TIMERx
>CNT=
0x00000004;
//Начальное значение счетчика
MDR_TIMERx
>PSG=
0x00000000;
//Предделитель частоты
MDR_TIMERx
>ARR=
0x00000013;

//Период счета
MDR_TIMERx
>CNTRL=0x00000049
//Счет вверх/вниз по TIM_CLK.
Рис.
. Диаграмма счёта вверх/вниз
Пример программ настройки таймера 1
Пример 1
Прерывание по таймеру
Программа осуществляет
мерцание светодиодов по прерыванию
таймера.
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Режимы счета таймеров общего назначения
Счет вверх
: CNT_MODE = 00, DIR = 0 (пример: счет вверх от 0
0х13, стартовое значение 0х04)
MDR_TIMERx
>CNTRL=
0x00000000;

//Настраиваем работу основного
счетчика
MDR_TIMERx
>CNT=
0x00000004;
//Начальное значение счетчика
MDR_TIMERx
>PSG=
0x00000000;
//Предделитель частоты
MDR_TIMERx
ARR=
0x00000013;

//Период счета
MDR_TIMERx
>CNTRL=
0x00000001;
//Счет вверх по TIM_CLK
Рис.
2. Диаграмма счёта от 0 до 0х13
Счет
вниз
: CNT_MODE = 00, DIR = 1
(пример: счет
вниз
от 0х13
до0, стартовое значение 0х04)
MDR_TIMERx
>CNTRL=
0x00000000;

//Настраиваем работу основного
счетчика
MDR_TIMERx
>CNT=
0x00000004;
//Начальное значение счетчика
MDR_TIMERx
>PSG=
0x00000000;
//Предделитель частоты
MDR_TIMERx
>ARR=
0x00000013;

//Период счета
MDR_TIMERx
>CNTRL=0x00000009
//Счет вниз по TIM_CLK.
Рис.
. Диаграмма счёта от 0х13 до 0
Счет
вверх/вниз
: CNT_MODE = 01, DIR = 0
MDR_TIMERx
>CNTRL=
0x00000000;

//Настраиваем работу основного
счетчика
MDR_TIMERx
>CNT=
0x00000004;
//Начальное значение счетчика
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Продолжение таблицы 3.1
CH3_CNTRL[15:0]
MDR_TIMERx
>CHy_CNTRL
Регистр управления
для 3 канала таймера
CH4_CNTRL[15:0]
MDR_TIMERx
>CHy_CNTRL
Регистр управления
для 4 канала таймера
CH1_CNTRL1[15:0]
MDR_TIMERx
>CHy_CNTRL1
Регистр управления 1
для 1 канала таймера
CH2_CNTRL1[15:0]
MDR_TIMERx
>CHy_CNTRL1
Регистр управления
1для 2 канала таймера
CH3_CNTRL1[1
5:0]
MDR_TIMERx
>CHy_CNTRL1
Регистр управления 1
для 3 канала таймера
CH4_CNTRL1[15:0]
MDR_TIMERx
>CHy_CNTRL1
Регистр управления 1
для 4 канала таймера
CH1_DTG[15:0]
MDR_TIMERx
>CHy_DTG
Регистр управления DTG
для 1 канала таймера
CH2_DTG[15:0]
MDR_TIMERx
>CHy_DTG
Регистр управления DTG
для 2 канала таймера
CH3_DTG[15:0]
MDR_TIMERx
>CHy_DTG
Регистр управления DTG
для 3 канала таймера
CH4_DTG[15:0]
MDR_TIMERx
>CHy_DTG
Регистр управления DTG
для 4 канала таймера
BRKETR_CNTRL[15:0]
MDR_TIMERx
BRKETR_CNTRL
Регистр управл
ния входом BRK и ETR
STATUS[15:0]
MDR_TIMERx
>STATUS
Регистр статуса таймера
IE[15:0]
MDR_TIMERx
�IE
Регистр разрешения прерывания
таймера
DMA_RE[15:0]
MDR_TIMERx
>DMA_RE
Регистр разрешения запр
сов DMA от прерываний таймера
CH1_CNTRL2[15:0]
MDR_TIMERx
>CHy_CNTRL2
Регистр управления 2
для 1 канала таймера
CH2_CNTRL2[15:0]
MDR_TIMERx
>CHy_CNTRL2
Регистр управления 2
для 2 канала таймера
CH3_CNTRL2[15:0]
MDR_TIMERx
>CHy_CNTRL2
Регистр управления 2
для 3 канала таймера
CH4_CN
TRL2[15:0]
MDR_TIMERx
>CHy_CNTRL2
Регистр управления 2
для 4 канала таймера
CCR11[15:0]
MDR_TIMERx
�CCRy1
Регистр сравнения 1, захвата
для 1 канала таймера
CCR21[15:0]
MDR_TIMERx
�CCRy1
Регистр сравнения 1, захвата
для 2 канала таймера
CCR31[15:0]
MDR_TIMERx
�CCRy1
Регистр сравнения 1, захвата
для 3 канала таймера
CCR41[15:0]
MDR_TIMERx
�CCRy1
Регистр сравнения 1, захвата
для 4 канала таймера
Рис.
Структурная схема таймеров общего назначения
В таблице
3.1
представлены регистры управления и настройки та
меров.
Таблица 3.1.
Регистры портов ввода
вывода
Название
Описание
�0�'�5�B�7�,�0�(�5�
Dhgljhee_j��7�L�P�H�U�
�0�'�5�B�7�,�0�(�5��
Dhgljhee_j��7�L�P�H�U�
�0�'�5�B�7�,�0�(�5��
Dhgljhee_j��7�L�P�H�U�
�0�'�5�B�7�,�0�(�5�[
�!�&�1�7�������@
MDR_TIMERx
�CNT
Hkgh\ghc�kq_lqbd�lZcf_jZ
�0�'�5�B�7�,�0�(�5�[
�!�3�6�*�������@
MDR_TIMERx
>PSG
Делитель частоты при счете о
новного счетчика
MDR_TIMERx
�!�$�5�5�������@
MDR_TIMERx
�ARR
Hkgh\Zgb_�kq_lZ�hkgh\gh]h�
kq_lqbdZ
�0�'�5�B�7�,�0�(�5�[
�!�&�1�7�5�/������@
MDR_TIMERx
�CNTRL
J_]bklj�mijZ\e_gby�hkgh
gh]h�
kq_lqbdZ
�&�&�5��������@
MDR
_TIMERx
�!�&�&�5�\�J_]bklj�kjZ\g_gby��aZo\ZlZ�^ey�
��dZgZeZ�lZcf_jZ
�&�&�5��������@
MDR
_TIMERx
�!�&�&�5�\�J_]bklj�kjZ\g_gby��aZo\ZlZ�^ey�
��dZgZeZ�lZcf_jZ
�&�&�5��������@
MDR
_TIMERx
�!�&�&�5�\�J_]bklj�kjZ\g_gby��aZo\ZlZ�^ey�
��dZgZeZ�lZcf_jZ
�&�+��B�&�1�7�5�/�������@
MDR_TIMERx
>CHy_CNTRL
Регистр управления
для 1 канала таймера
CH2_CNTRL[15:0]
MDR_TIMERx
>CHy_CNTRL
Регистр управления
для 2 канала таймера
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Глава 3
ТАЙМЕРЫ МИКРОКОНТРОЛЛЕРА К1986ВЕ92QI
Описание таймеров микроконтроллера
е блоки
таймеров выполнены на основе 16
битного перезагр
жаемого счетчика,
который синхронизируется с выхода 16
битного
предделителя. Перезагружаемое значение
хранится в отдельном регис
ре. Счет может быть прямой, обратный или двунаправленный
(сначала
прямой до оп
ределенного значения, а затем обратный).
Каждый из трех таймеров микроконтроллера содержит 16
битный
счетчик, 16
битный
предделитель частоты и 4
канальный блок захв
а-
та/сравнения. Их можно синхронизировать
системной синхронизацией,
внешними сигналами или др
угими таймерами.
Помимо составляющего
основу таймера счетчика, в каждый блок таймера также входит
чет
рехканальный блок захвата/сравнения. Данный блок выполняет как
стандартные функции
захвата и сравнения, так и ряд специальных
функций. Таймеры с 4 каналам
и схем захвата и
ШИМ с функциями
формирования «мертвой зоны» и аппаратной блокировки. Каждый из
таймеров может генерировать прерывания и запросы
DMA
Особенности
таймеров микроконтроллера
битный счетчик; счёт прямо
й, обратный или двунаправленный;
зрядный программируемый п
редварительный делитель ча
с-
тоты;
до четырех независимых 16
битных каналов захвата на один та
мер. Каждый из каналов захвата может захватить (скопировать)
текущее значение таймера при изменении некоторого входного
сигнала. В случае
захвата имеется дополнительная возможность
генерировать прерывание и/или запрос
DMA
четыре 16
битных регистра сравнения (совпадения), которые п
зволяют осуществлять непрерывное сравнение, с дополнительной
возможностью генерировать прерывание
и/или запрос
DMA
при
совпадении;
имеется до четыре внешних выводов, соответствующих регистрам
совпадения со следующими возможностями: сброс в НИЗКИЙ
уровень при совпадении; установка в ВЫСОКИЙ уровень при
совпадении; переключение (инвертирование) при совпадении; при
со
впадении состояние выхода не изменяется;
переключение при
некотором условии.
На рисунке
представлена структурная схема таймеров общего
назначения.
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Лабораторная р
абота №1. Порты ввода
вывода
Цель работы
Целью
работы является изучение основ работы портов ввода
вывода
микроконтроллера
К1986ВЕ92
Оборудование
Компьютер
Отладочная плата микроконтроллера
К1986ВЕ92
Лабораторный макет.
Источник питания 12В, 1А.
Программа работы
Создать проект в среде
IAR
Embedded
System
. Проект создается в
каталоге
(номер группы).
Написать и проверить работу программы мерцания светодиодов с
переменной частотой. Изменение частоты осуществлят
ь кнопками
DOWN
Подключить лабораторный макет к отладочной плате.
Организовать на светодиодах лабораторного макета “бегущий 0”.
Организовать на светодиодах лабораторного макета “бегущую 1”.
Организовать на светодиодах лабораторного макета
светофор.
Вывести на светодиоды числа в двоичном коде от 0÷32 с задер
кой в 1 с.
Организовать на светодиодах лабораторного макета “эквалайзер”.
Организовать на выводе порта импульсы с чатотой 5 кГц и коэ
фициентом за
полнения 0,
25.
Организовать на выводе порта импульсы с чатотой 50 кГц и к
эффициентом заполнения 0,
15.
Организовать на выводе порта импульсы с чатотой 100 кГц и к
эффициентом заполнения 0,
75.
Вывести на ЖК дисплей отладочного макета свою.
Вывести на ЖК диспле
й отладочного макета название кафедры.
Вывести на ЖК дисплей отладочного макета фамилию и иници
лы преподавателя.
Вывести на ЖК дисплей отладочного макета название универс
тета.
Организовать на светодиодах лабораторного макета “бегущий 0”
с
изменением скорости по внешним прерываниям.
Организовать на светодиодах л
абораторного макета “бегущую 1”
с изменением скорости по внешним прерываниям.
�� &#x/MCI; 0 ;&#x/MCI; 0 ;//Установить лог "1" на 0
выводе порта C
PORT_ResetBits(MDR_PORTC, PORT_Pin_1);
//Установ
ить лог "0" на 1
выводе порта C
delay(time);

//Вызов функции временной
задержки
PORT_ResetBits(MDR_PORTC, PORT_Pin_0);
//Установить лог "0" на 0
выводе порта C
PORT_SetBits(
MDR_PORTC, PORT_Pin_1);
//Установить лог "1" на 1
выводе порта C
delay(time);

//Вызов функции временной
задержки
void EXT_INT1_IRQHandler(void)

ектор внешнего прерывания
EXT_INT1
time=time+10;

величиваем время задержки,
тем самым уменьшаем
скорость мигания светодиодов
if(time==120) time=60;

озвращение в исходное
состояние
NVIC_ClearPendingIRQ(EXT_
INT1_IRQn);
//Очистка бита ожидания
внешнего прерывания
EXT_INT1
void EXT_INT2_IRQHandler(void)

ектор внешнего прерывания
EXT_INT2
time=time

меньшаем время задержки,
тем самым увеличиваем
скорость мигания светодиодов
if(time==0) time=60;

озвращение в исходное
состояние
NVIC_ClearPendingIRQ(EXT_INT2_IRQn);
//Очистка бита ожидания
внешнего прерывания
EXT_INT2
�� &#x/MCI; 0 ;&#x/MCI; 0 ;//альтернативная функция (так
же может быть: порт
PORT_FUNC_PORT, основная
функция
PORT_FUNC_MAIN,
переопределенная функция
PORT_FUNC_OVERRID)
PORT
InitStructure
PORT
MODE
PORT
MODE
DIGITAL
//Настройка режима работы
вывода цифровой (может быть
аналоговый
PORT_MODE_ANALOG)
PORT_InitStructure.PORT_SPEED = PORT_SPEED_SLOW;
Выбор
скорости
медленный
фронт
(100
) (
может
так
быть
отключен
//PORT_OUTPUT_OFF,
быстрый
фронт
(20
//PORT_SPEED_FAST,
максимально
быстрый
фронт
(10
//PORT_SPEED_MAXFAST)
PORT_Init(MDR_PORTB, &PORT_InitStructure);
//Применение заполненной
структуры к выбранному порту
//*********
NVIC_ClearPendingIRQ(EXT_INT1_IRQn);
//Очистка бита ожидания
внешнего прерывания
EXT_INT1
NVIC_ClearPendingIRQ(EXT_INT2_IRQn);
//Очистка бита ожидания
внешнего прерывания
EXT_INT2
__enable_irq();

//Глобальное разрешение
прерываний
NVIC_EnableIRQ(EXT_INT1_IRQn);

//Разрешения внешнего
прерывания EXT_INT1
NVIC_EnableIRQ(EXT_INT2_IRQn);
//Разрешения внешнего
прерывания EXT_INT2
time=60;

адание начального значения
временной задержки
while(1)
PORT_SetBits(MDR_PORTC, PORT_Pin_0);
�� &#x/MCI; 0 ;&#x/MCI; 0 ; //Настройка вывода 0 порта A (альтер
нативная функция EXT_INT1)
//******************************
PORT_InitStructure.PORT_Pin = (PORT_Pin_0);
//Выбор настраиваемого вывода
PORT
InitStructure
PORT
PORT
//Настройка вывода порта на
режим вход (может быть
выход
PORT
_OE_OUT)
PORT
InitStructure
PORT
FUNC
PORT
FUNC
//Функция порта
альтернативная функция (так
же может быть: порт
PORT_FUNC_PORT, основная
функция
PORT_FUNC_MAIN,
переопределенная функция
PORT_FUNC_OVERRID)
PORT
InitStructure
PO
MODE
PORT
MODE
DIGITAL
//Настройка режима работы
вывода цифровой (может быть
аналоговый
PORT_MODE_ANALOG)
PORT_InitStructure.PORT_SPEED = PORT_SPEED_SLOW;
Выбор
скорости
медленный
фронт
(100
) (
может
так
быть
отключен
//PORT_OUTPUT_OFF,
быстрый
фронт
(20
//PORT_SPEED_FAST,
максимально
быстрый
фронт
(10
//PORT_SPEED_MAXFAST)
PORT_Init(MDR_PORTA, &PORT_InitStructure);
//Применение заполненной
структуры к выбранному по
//******************************
//Настройка вывода 10 порта B (альтернативная функция EXT_INT2)
//******************************
PORT_InitStructure.PORT_Pin = (PORT_Pin_10);
//Выбор настраиваемого вывода
PORT
InitStructure
PORT
PORT
//Настройка вывода порта
на
режим вход (может быть
выход
PORT_OE_OUT)
PORT
InitStructure
PORT
FUNC
PORT
FUNC
//Функция порта
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;int
main
void
RST
CLK
PCLKcmd
RST
CLK
PCLK
PORTA
|
RST
CLK
PCLK
PORTB
|
RST
CLK
PCLK
PORTC
|
RST
CLK
PCLK
PORTE
ENABLE
);
Разрешение
тактирования

периферии
SCB
>VTOR = 0x08000000;

Включение таблицы векторов
//Настройка выводов для светодиодов
//******************************
PORT_InitStructure.PORT_Pin = (PORT_Pin_0 | PORT_Pin_1);
//Выбор настраиваемого вывода
PORT_InitStructure.PORT_OE = PORT_OE_OUT;
//Настройка вывода порта на
режим
выход (может быть
вход
PORT_OE_IN)
PORT_InitStructure.PORT_FUNC =
PORT_FUNC_PORT;
//Функция порта
порт (так же
может быть:основная
функция
PORT_FUNC_MAIN,
альтернативная функция
PORT_FUNC_ALTER,
переопределенная функция
PORT_FUNC_OVERRID)
PORT_InitStructure.PORT_MODE = PORT_MODE_DIGITAL;
//Настройка реж
има работы
вывода цифровой (может быть
аналоговый
PORT_MODE_ANALOG)
PORT_InitStructure.PORT_SPEED = PORT_SPEED_SLOW;
Выбор
скорости
медленный
фронт
(100
) (
может
так
быть
отключен
//PORT_OUTPUT_OFF,
быстрый
фронт
(20
//PORT_SPEED_FAST,
максимально
быстрый
фронт
(10
//PORT_SPEED_MAXFAST)
PORT_Init(MDR_PORTC, &PORT_InitStructure);
//Применение заполненной
структуры к выбранному по
//******************************
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ; &#x/MCI; 2 ;&#x/MCI; 2 ; &#x/MCI; 3 ;&#x/MCI; 3 ;PORT
SetBits
MDR
PORTC
PORT
Pin
_0);
//Установить лог "1" на 0
выводе порта C
PORT_ResetBits(MDR_PORTC, PORT_Pin_1);
//Установить лог "0" на 1
выводе порта C
delay(time);

//Вызов функции временной
задержки
PORT_ResetBits(MDR_PORTC, PORT_Pin_0);
//Установить лог "0" на 0
выводе порта C
PORT_SetBits(MDR_PORTC, PORT_Pin_1);
//Установить л
ог "1" на 1
выводе порта C
delay(time);

//Вызов функции временной з
держки
int delay(int a) {for(int i=0; i<=100000*a; i++);}
//Функция программной
временной задержки
Пример 3. Изменение скорости
мерцания светодиодов с помщью
внешних прерываний
Прерывания в данном МК генерируются по уровню. Для проверки
работоспособности программы, необходимо выводы РА0 и РВ10 по
ключить к кнопкам.
#include "MDR32Fx.h"
#include "MDR32F9Qx_port.c"
#include
"MDR32F9Qx_rst_clk.c"
#include "MDR32F9Qx_it.c"
#include "system_MDR32F9Qx.c"
PORT
InitTypeDef
PORT
InitStructure
//Обявление структуры
инициализации портов
int time;

//переменная, необходимая для
формирования времени
свечения светодиодов
void delay(int a) {for(int i=0; i<=10000*a; i++);}
//Функция программной
временной задержки
�� &#x/MCI; 0 ;&#x/MCI; 0 ;//альтернативная функция
PORT_FUNC_ALTER,
переопределенная функция
PORT_FUNC_OVERRID)
PORT_InitStructure.PORT_MODE = PORT_MODE_DIGITAL;
//Настройка режима работы
вывода цифровой (может быть
аналоговый
PORT_MODE_ANALOG)
PORT_InitStructure.PORT_SPEED = PORT_SPEED_SLOW;
Выбор
скорости
медленный
фронт
(100
) (
может
так
быть
отключен
PORT_OUTPUT_OFF,
быстрый
фронт
(20
PORT_SPEED_FAST,
максимально
быстрый
фронт
(10
PORT_SPEED_MAXFAST)
PORT_Init(MDR_PORTE, &PORT_InitStructure);
//Применение заполненной
структуры к выбранному
порту
//******************************
while(1)
time=3; //
Средняя
скорость
мигания
if (PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_5) ==
Bit_RESET)
//Если выполнение команды
чтения вывода 5 порта B
возвращает 0
time=1;

Высокая
скорость
мигания
if (PORT_ReadInputDataBit(MDR_PORTE, PORT_Pin_1) ==
Bit_RESET)
//Если выполнение команды
чтения вывода 1 порта E
возвращает 0
time=6;

//Низкая скорость мигания
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ; //Настройка выводов для кнопок Up и Down
//******************************
PORT_InitStructure.PORT_Pin = (PORT_Pin_5);
Выбор
настраиваемого
вывода
PORT
InitStructure
PORT
PORT
//Настройка вывода порта на
режим выход (может быть
вход
PORT_OE_IN)
PORT_InitStructure.PORT_FUNC = PORT_FUNC_PORT;
//Функция порта
порт (так же
может быть:основная
функция
PORT_FUNC_MAIN,
альтернативная функция
PORT_FUNC_ALTER,
переопределенная функция
PORT_FUNC_OVERRID)
PORT_InitStructure.PORT_MODE = PORT_MODE_DIGITAL;
//Настройка режима работы в
вода цифровой (может быть
аналоговый
PORT_MODE_ANALOG)
PORT_InitStructure.PORT_SPEED = PORT_SPEED_SLOW;
Выбор
скорости
медленный
фронт
(100
) (
может
так
быть
отключен
PORT_OUTPUT_OFF,
быстрый
фронт
(20
PORT_SPEED_FAST,
максимально
быстрый
фронт
(10
PORT_SPEED_MAXFAST)
PORT_Init(MDR_PORTB, &PORT_InitStructure);
//Применение заполненной
структуры к выбранному
порту
PORT_InitStructure.PORT_Pin = (PORT_Pin_1);
Выбор
настраиваемого
вывода
PORT_InitStructure.PORT_OE = PORT_OE_IN;
//Настройка вывода порта на
режим выход (может быть
вход
PORT
_OE_IN)
PORT_InitStructure.PORT_FUNC = PORT_FUNC_PORT;
//Функция порта
порт (так же
может быть:основная
функция
PORT_FUNC_MAIN,
�� &#x/MCI; 0 ;&#x/MCI; 0 ;int time;

//переменная, необходимая для
формирования времени
свечения светодиодов
int main(void)
RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB |
RST_CLK_PCLK_PORTC | RST_CLK_PCLK_PORTE, ENABLE);
//Разрешение тактир
ования
периферии
//Настройка выводов для светодиодов
//******************************
PORT_InitStructure.PORT_Pin = (PORT_Pin_0 | PORT_Pin_1);
Выбор
настраиваемого
вывода
PORT_InitStructure.PORT_OE = PORT_OE_OUT;
//Настройка вывода порта на
режим выход (может быть
вход
PORT_OE_IN)
PORT_InitStructure.PORT_FUNC = PORT_FUNC_PORT;
//Функция порта
порт (так же
может быть:основная
функция
PORT_FUNC_MAIN,
альтернативная функция
PORT_FUNC_ALTER,
переопределенная функция
PORT_FUNC_OVERRID)
PORT_InitStructure.PORT_MODE = PORT_MODE_DIGITAL;
//Настройка режима работы
вывода цифровой (может быть
аналоговый
PORT_MODE_ANALOG)
PORT_InitStructure.PORT_SPEED = PORT_SPEED_SLOW;
Выбор
скорости
медленный
фронт
(100
) (
может
так
быть
отключен
PORT_OUTPUT_OFF,
быстрый
фронт
(20
PORT_SPEED_FAST,
максимально
быстрый
фронт
(10
PORT_SPEED_MAXFAST)
PORT_Init(MDR_PORTC, &PORT_InitStructure);
//Применение заполненной
структуры к выбранному
порту
//******************************
�� &#x/MCI; 0 ;&#x/MCI; 0 ;//Применение заполненной
структуры к выбранному по
//******************************
while(1)
time=2;

//Переменная, отвечающая за
скорость мигания
PORT_SetBits(MDR_PORTC, PORT_Pin_0
);
//Установить лог "1" на 0
выводе порта C
PORT_ResetBits(MDR_PORTC, PORT_Pin_1);
//Установить лог "0" на 1
выводе порта C
delay(time);


//Вызов функции временной
задержки
PORT_ResetBits(MDR_PORTC, PORT_Pin_0);
//Установить лог "0" на 0
выводе порта C
PORT_SetBits(MDR_PORTC, PORT_Pin_1);
//Установить лог "1" на 1
выводе порта C
delay(time);

//Вызов функции временной
задержки
int delay(int a) {for(int i=0; i<=100000*a; i++);}
//Функция программной
временной задержки
Пример 2.
Мерцание светодиодов с разной
скоростью по опросу
кнопок UP и DOWN
Программа осуществляет зажигание светодиодов на выводах
Pin
Pin
#include "MDR32Fx.h"
#include "MDR32F9Qx_port.c"
#include "MDR32F9Qx_rst_clk.c"
#include "system_MDR32F9Qx.c"
PORT
InitTypeDef
PORT
InitStructure
Обявление
структуры
иници
лизации
портов
�� &#x/MCI; 0 ;&#x/MCI; 0 ;#include "MDR32F9Qx_rst_clk.c"
#include "system_MDR32F9Qx.c"
PORT
InitTypeDef
PORT
InitStructure
Объявление
структуры
инициализации
портов
int time;

//переменная, необходимая для
формирования времени
свечения светодиодов
int
main(void)
//Разрешение тактирования периферии
RST
CLK
PCLKcmd
RST
CLK
PCLK
PORTC
ENABLE
);
//Настройка выводов для светодиодов
//******************************
PORT
InitStructure
PORT
Pin
PORT
Pin
_0|
PORT
Pin
_1);
Выбор
настраиваемого
вывода
PORT_InitStructure.PORT_OE = PORT_OE_OUT;
//Настройка вывода порта на
режим выход (может быть
вход
PORT_OE_IN)
PORT_InitStructure.PORT_FUNC = PORT_FUNC_PORT;
//Функция порта
порт (так же
может быть:основная
функция
PORT_FUNC_MAIN,
альтернативная функция
PORT_FUNC_ALTER,
переопределенная функция
PORT_FUNC_OVERRID)
PORT_InitStructure.PORT_MODE = PORT_MODE_DIGITAL;
//Настройка режима работы
вывода цифровой (может быть
аналоговый
PORT_MODE_ANALOG)
PORT_InitStructure.PORT_SPEED = PORT_SPEED_SLOW;
//Выбор скорости медленный
фронт(100нс) (может так же
быть отключен
PORT_OUTPUT_OFF,
быстрый фронт(20нс)
PORT_SPEED_FAST,
максимально быстрый
фронт(10нс)
PORT_SPEED_MAXFAST)
PORT_Init(MDR
_PORTC, &PORT_InitStructure);
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Таблица
Режим мощности передатчика MDR_PORTx
>PWR
Номер бита
�����
1..0
Функциональное
имя бита
�3�:�5�[
�3�:�5�������@
Назначение
Аналогично PWR0
для остальных бит
порта
Режим работы вывода
порта:
зарезервировано
(передатчик отключен);
медленный
фронт
(порядка
100
нс);
быстрый фронт
(порядка 20 нс)
максимально б
стрый фронт (порядка
10 нс)
Таблица
Режим работы входного фильтра MDR_PORTx
>GFEN
Номер бита
������
15..0
Функциональное
имя бита
�*�)��(�1������@
Назначение
Зарезервировано
Режим работы
вхо
ного фильтра:
фильтр выкл
чен;
фильтр включен
(фильтрация и
м-
пульсов до 10 нс)
Пример программ настройки портов ввода
вывода
Пример 1. Мерцание
светодиодов
Программа осуществляет
мерцание
светодиодов на выводах
Pin
Pin
порта С.
#include "MDR32Fx.h"
#include "MDR32F9Qx_port.c"
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Таблица
Аналоговый режим работы порта MDR_PORTx
Номер бита
������
15..0
Функциональное
имя бита
�������@
Назначение
Зарезервировано
Режим работы ко
троллера:
аналоговый;
pbnjh\hc
Таблица
Подтяжка порта MDR_PORTx
>PULL
Номер бита
������
15..0
Функциональное
имя бита
�8�3�����@
�'�2�:�1�������@
Назначение
Разрешение подтяжки
вверх:
подтяжка в п
тание выключ
на;
подтяжка в п
тание включена
(есть подтяжка
~50 кОм)
Разрешение подтяжки
вверх:
подтяжка в ноль
выключена;
подтяжка в ноль
включена (есть
подтяжка ~50
кОм)
Таблица
Режим
работы выходного драйвера MDR_PORTx
>PD
Номер бита
������
15..0
Функциональное
имя бита
�6�+�0�������@
�3��'������@
Назначение
Режим работы входа:
триггер Шмитта в
ключен гистерезис
200 мВ;
триггер Шмитта
включен гистерезис
400 мВ
Режим работы вых
да:
управляемый
драйвер;
открытый сток
�� &#x/MCI; 0 ;&#x/MCI; 0 ;В таблицах 2.3
2.10 представлены
назначения регистров по
ртов
ввода вывода.
Таблица
Данные порта MDR_PORTx
>RXTX
Номер бита
������
15..0
Функциональное имя
бита
RXTX[15:0]
Назначение
Зарезервировано
Данные для выдачи
на выводы порта и
для чтения
Таблица
Направление порта
MDR_PORTx
>OE
Номер бита
������
15..0
Функциональное
имя бита
[15:0]
Назначение
Зарезервировано
Направление пер
е-
дачи данных на в
водах порта:
выход;
\oh^
Таблица
Режим работы порта MDR_PORTx
>FUNC
Номер бита
�����
1..0
Функциональное
имя
бита
�0�2�'�(�[
�0�2�'�(�������@
Назначение
Аналогично
MODE0 для о
тальных бит порта
Режим работы вывода
порта:
порт;
основная фун
ция;
альтернативная
функция;
переопределённая
функция
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис.
ункциональная схема линии порта
Для настройки и работы портов ввода
вывода используются
регистры, представленные в таблице
Таблица
Описание регистров портов ввода
вывода
Название
Описание
MDR_PORTA
Порт А
MDR_PORTB
Порт B
MDR_PORTC
Порт C
MDR_PORTD
Порт D
MDR_PORTE
Порт E
MDR_PORTF
Порт F
RXTX[15:0]
MDR_PORTx
�!�5�;�7�;
��������������������������
�Zggu_�ihjlZ
��2�(������@
�0�'�5�B�3�2�5�7�[
�!�2�(
��������������������������������
GZijZ\e_gb_�ihjlZ
��)�8�1�&������@
�0�'�5�B�3�2�5�7�[
�!�)�8�1�&
��������������������������
J_`bf�jZ[hlu�ih
��$�1�$�/�2�*������@
�0�'�5�B�3�2�5�7�[
�!�$�1�$�/�2�*�
�������������������
:gZeh]h\uc�j_`bf�
jZ[hlu�ihjlZ
��3�8�/�/������@
�0�'�5�B�3�2�5�7�[
�!�3�8�/�/���������������������������Ih^ly`dZ�ihjlZ
��3�'������@
�0�'�5�B�3�2�5�7�[
�!�3�'��������������������������������J_`bf�jZ[hlu�\
oh^gh]h�^jZc\_jZ
�3�:�5���
�0�'�5�B�3�2�5�7�[
�!�3�:�5
����������������������������
J_`bf�fhsghklb�
i_j_^ZlqbdZ
��*�)�(�1������@
�0�'�5�B�3�2�5�7�[
�!�*�)�(�1
��������������������������
J_`bf�jZ[hlu�
\oh^gh]h�nbevljZ
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Окончание таблицы 2.1
Порт
DAC2_OUT
ADDR16
TMR2_CH1
CAN1_RX
DAC2_REF
ADDR17
TMR2_CH1N
CAN1_TX
COMP_IN1
ADDR18
TMR2_CH3
TMR3_CH1
COMP_IN2
ADDR19
TMR2_CH3N
TMR3_CH1N
COMP_REF+
ADDR20
TMR2_CH4N
TMR3_CH2
COMP_REF
ADDR21
TMR2_BLK
TMR3_CH2N
OSC_IN32
ADDR22
CAN2_RX
TMR3_CH3
OSC_OUT32
ADDR23
CAN2_TX
TMR3_CH3N
COMP_IN3
ADDR24
TMR2_CH4
TMR3_CH4
DAC1_OUT
ADDR25
TMR2_CH2
TMR3_CH4N
PE10
DAC1_REF
PE10
ADDR26
TMR2_CH2N
TMR3_ETR
PE11
PE11
ADDR27
nSIRIN1
TMR3_BLK
PE12
PE12
ADDR28
SSP1_RXD
�8�$�5�7��B�5�;
�3�(��
�3�(��
�$�'�'�5��
�6�6�3��B�)�6�6
�8�$�5�7��B�7�;�'
�3�(��
�3�'��
�$�'�'�5��
�7�0�5��B�(�7�5
�6�&�/�
�3�(��
�3�'��
�$�'�'�5��
�(�;�7�B�,�1�7�
�6�'�$�
Порт F
�$�'�'�5�
�6�6�3��7�;�'
�8�$�5�7��B�5�;�'
�$�'�'�5�
�6�6�3��&�/�.
�8�$�5�7��B�7�;�'
�$�'�'�5�
�6�6�3��)�6�6
�&�$�1��B�5�;
�$�'�'�5�
�6�6�3��5�;�'
�&�$�1��B�7�;
�0�2�'�(����@
�$�'�'�5�
�0�2�'�(����@
�$�'�'�5�
�0�2�'�(����@
�$�'�'�5�
�7�0�5��B�&�+�
�$�'�'�5�
�7�0�5��B�&�+��1
�7�0�5��B�&�+�
�$�'�'�5�
�7�0�5��B�&�+�
�7�0�5��B�&�+��1
�$�'�'�5�
�7�0�5��B�&�+��1
�7�0�5��B�&�+�
�3�)��
�3�)��
�$�'�'�5��
�7�0�5��B�&�+�
�7�0�5��B�&�+��1
�3�)��
�3�)��
�$�'�'�5��
�7�0�5��B�&�+��1
�7�0�5��B�(�7�5
�3�)��
�3�)��
�$�'�'�5��
�7�0�5��B�&�+�
�6�6�3��B�)�6�6
�3�)��
�3�)��
�$�'�'�5��
�7�0�5��B�&�+��1
�6�6�3��B�&�/�.
�3�)��
�3�)��
�$�'�'�5��
�7�0�5��B�(�7�5
�6�6�3��B�5�;�'
�3�)��
�3�)��
�$�'�'�5��
�7�0�5��B�%�/�.
�6�6�3��B�7�;�'
На рис.
представлена функциональная схема линии порта вв
вывода.
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Продолжение таблицы 2.1
PB12
PB12
DATA28
SSP1_FSS
SSP2_FSS
PB13
PB13
DATA29
SSP1_CLK
SSP2_CLK
PB14
PB14
DATA30
SSP1_RXD
SSP2_RXD
PB15
PB15
DATA31
SSP1_TXD
SSP2_TXD
Порт
PС0
PС0
READY 17)
SCL1
SSP2_FSS
PС1
PС1
SDA1
SSP2_CLK
PС2
PС2
TMR3_CH1
SSP2_RXD
PС3
PС3
BE0
TMR3_CH1N
SSP2_TXD
PС4
PС4
BE1
TMR3_CH2
TMR1_CH1
PС5
PС5
BE2
TMR3_CH2N
TMR1_CH1N
PС6
PС6
BE3
TMR3_CH3
TMR1_CH2
PС7
PС7
CLOCK
TMR3_CH3N
TMR1_CH2N
PС8
PС8
CAN1_TX
TMR3_CH4
TMR1_CH3
PС9
PС9
CAN1_RX
TMR3_CH4N
TMR1_CH3N
PС10
PС10
TMR3_ETR
TMR1_CH4
PС11
PС11
TMR3_BLK
TMR1_CH4N
PС12
PС12
EXT_INT2
TMR1_ETR
PС13
PС13
EXT_INT4
TMR1_BLK
PС14
PС14
SSP2_FSS
CAN2_RX
PС15
PС15
SSP2_RXD
CAN2_TX
Порт D
PD0
ADC0_REF+
PD0 JB_TMS
TMR1_CH1N
UART2_RXD
TMR3_CH1
PD1
ADC1_REF
PD1 JB_TMS
TMR1_CH1
UART2_TXD
TMR3_CH1N
PD2
ADC2
PD2 JB_TMS
BUSY1
SSP2_RXD
TMR3_CH2
PD3
ADC3
PD3 JB_TMS
SSP2_FSS
TMR3_CH2N
PD4
ADC4
PD4 JB_TMS
TMR1_ETR
nSIROUT2
TMR3_BLK
PD5
ADC5
PD5
CLE
SSP2_CLK
TMR2_ETR
PD6
ADC6
PD6
ALE
SSP2_TXD
TMR2_BLK
PD7
ADC7
PD7
TMR1_BLK
nSIRIN2
UART1_RX
PD8
ADC8
PD8
TMR1_CH4N
TMR2_CH1
UART1_TXD
PD9
ADC9
PD9
CAN2_TX
�7�0�5��B�&�+��1
�6�6�3��B�)�6�6
�3�'��
�$�'�&��
�3�'��
�7�0�5��B�&�+�
�7�0�5��B�&�+�
�6�6�3��B�&�/�.
�3�'��
�$�'�&��
�3�'��
�7�0�5��B�&�+��1
�7�0�5��B�&�+��1
�6�6�3��B�5�;�'
�3�'��
�$�'�&��
�3�'��
�7�0�5��B�&�+�
�7�0�5��B�&�+�
�6�6�3��B�7�;�'
�3�'��
�$�'�&��
�3�'��
�7�0�5��B�&�+��1
�7�0�5��B�&�+��1
�&�$�1��B�7�;
�3�'��
�$�'�&��
�3�'��
�7�0�5��B�&�+�
�7�0�5��B�&�+�
�&�$�1��B�5�;
�3�'��
�$�'�&��
�3�'��
�&�$�1��B�5�;
�%�8�6��
�(�;�7�B�,�1�7�
Таблица 2
Альтернативные
функции
Цифровая функция
Аналоговая
Порт IO
Основная
Альтернативная
Переопред
е-
ленная
Вывод
функция
MODE[1:0]=00
MODE[1:0]=01
MODE[1:0]=10
MODE
[1:0]=11
ANALOG_EN=0
ANALOG_EN=1
ANALOG_EN=1
ANALOG_EN=1
ANALOG_E
N=1
Порт А
�3�$�
�3�$�
�'�$�7�$�
EXT_INT1
PA1
PA1
DATA1
TMR1_CH1
TMR2_CH1
PA2
PA2
DATA2
TMR1_CH1N
TMR2_CH1N
PA3
PA3
DATA3
TMR1_CH2
TMR2_CH2
PA4
PA4
DATA4
TMR1_CH2N
TMR2_CH2N
PA5
PA5
DATA5
TMR1_CH3
TMR2_CH3
PA6
PA6
DATA6
CAN1_TX
UART1_RXD
PA7
PA7
DATA7
CAN1_RX
UART1_TXD
PA8
PA8
DATA8
TMR1_CH3N
TMR2_CH3N
PA9
PA9
DATA9
TMR1_CH4
TMR2_CH4
PA10
PA10
DATA10
nUART1DTR
TMR2_CH4N
PA11
PA11
DATA11
nUART1RTS
TMR2_BLK
PA12
PA12
DATA12
nUART1RI
TMR2_ETR
PA13
PA13
DATA13
nUART1DCD
TMR1_CH4N
PA14
PA14
DATA14
nUART1DSR
TMR1_BLK
PA15
PA15
DATA15
nUART1CTS
TMR1_ETR
Порт B
PB0
PB0
JA_TDO
DATA16
TMR3_CH1
UART1_TXD
PB1
PB1
JA_TMS
DATA17
TMR3_CH1N
UART2_RXD
PB2
PB2
JA_TCK
DATA18
TMR3_CH2
CAN1_TX
PB3
PB3
JA_TDI
DATA19
TMR3_CH2N
CAN1_RX
PB4
PB4
JA_TRST
DATA20
TMR3_BLK
TMR3_ETR
PB5
PB5
DATA21
UART1_TXD
TMR3_CH3
PB6
PB6
DATA22
UART1_RXD
TMR3_CH3N
PB7
PB7
DATA23
nSIROUT1
TMR3_CH4
PB8
PB8
DATA24
COMP_OUT
TMR3_CH4N
PB9
PB9
DATA25
nSIRIN1
EXT_INT4
PB10
PB10
DATA26
EXT_INT2
nSIROUT1
PB11
PB11
DATA27
EXT_INT1
COMP_OUT
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Глава 2
. НАСТРОЙКА ПОРТОВ ВВОДА ВЫВОДА. ПРИМЕРЫ
Порты ввода
вывода MDR_PORTx
Микроконтроллер имеет 6 портов ввода/вывода. Порты 16
разрядные и их выводы мультиплексируются между различными фун
циональными блоками,
управление для каждого вывода отдельное. Для
того, чтобы выводы порта перешли под управление того или иного п
е-
риферийного блока, необходимо
осуществить настройку портов
Рис. 2.1. Схема подключения разъемов
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис.1
. Пример простой программы
Не забываем о том, что в конце каждого файла должна быть пу
с-
тая строка. Keil считает это как
предупреждение, которое частенько
действует на нервы. Конечно
компилироваться будет, но сам факт пр
дупреждения
настораживает.
На этом настройка закончена. Мы можем перекомпилировать наш
проект нажав F7. Если все прошло хорошо, ты мы увидим это.
Рис.
. Информационное окно проекта
�� &#x/MCI; 0 ;&#x/MCI; 0 ;на прямоугольник с «…» внутри. Справа около строчки с подписью
«Inc
lude Paths».
Рис.1
. Окно добавления пути библиотечных файлов
В открывшемся окне нажимаем на иконку с прямоугольником,
слева от крестика. Это создаст пустую строку. В правом углу созданной
строчки жмем на «…». После чего указываем нужную папку, в котор
ой
лежат интересующие нас файлы. После этого жмем «ОК». Папка будет
добавлена. Необходимо добавить все эти пути. Если вы заметили, то все
ссылки кроме одной
относительные. То есть идут от корневого кат
лога. Но 1 идет начиная от «C:
». Это ссылка на сам
каталог с проектом.
Его тоже следует указать.
Жмем «ОК» и переходим в файл main.c.
Компилируем простейшую программу.
�� &#x/MCI; 2 ;&#x/MCI; 2 ;которые позволяют не вдаваясь в структуру контроллера
управлять его периферией (выводы, uart и
т.д.
папку
SMS
IS_and_Drivers
> « Libra
ies
CMSIS
DeviceSupport
1986BE9x
startup
arm
startup_1986be9x.s».
Это файл «стартап». Тут прописаны все
«вектора переходов». Иначе говоря, по любому прерыванию (к
примеру, нажатие кнопки) контроллер возвращается к этой
табл
ице и смотрит, куда ему перейти, чтобы выполнять код
дальше.
папку
SMSIS_and_Drivers
> «Libra
ies
CMSIS
DeviceSupport
1986BE9x
startup
arm
> sy
tem_1986BE9x.c».
Итогом должно стать такое дерево.
Рис.1
. Дерево проекта
Как можно было заметить,
около самого верхнего #include файла
стоит крестик. Keil просто не видит данного файла. Для того, чтобы и
с-
править это, мы должны указать ему, где ему брать этот файл. Для этого
жмем Alt+F7. В открывшемся окне переходим во вкладку C/C++. Для
того, чтобы и
справить это, нужно нажать галочку около надписи «C99
Mode». Это даст возможность писать на более совершенном стандарте
языка Си, чем это можно было делать изначально. Далее следует нажать
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис.
. Добавление библиотек
В открывшемся окне нужно выбрать тип файлов «All files (*.*)».
После чего выбрать 1 или выделить несколько файлов.
Рис.
. Выбор библиотечных файлов
Добавить нужно:
папку
SMSIS_and_Drivers
«Libraies
1986BE9x_StdPeriph_Driver
src
все
файлы
.c».
Тут
хранится аналог SPL у STM32. Проще говоря, это «обертки»,
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис.
. Добавление в проект основного файла программы
main
Далее необходимо добавить фалы библиотеки в проект.
Добавл
ние происходит следующем образом. Щелкаем правой кнопкой по ну
ной папке в дереве проекта и выбираем «A
dd Existing Files to Group
‘Имя группы’…».
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис.
. Настройка проекта
Теперь необходимо добавить к проекту файл в котором будем
присать программу. Правой кнопкой нажимаем на «
Sourge
Group
» и
выбираем «
New
Item
Group
». Выбираем тип файла «С
File
сохраняес в рабочей папке.
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис.
. Выбор микроконтроллера
Нажимем кнопку «
Add
», настройка эмулятора закончена.
Переходим во вкладку «
Utilities
».
Там
ставим точку слева от Use
Target Driver for Flash Programming, после выбираем наш J
LINK. Ну и
на последок
переходим в «
Settings
. Там все должно быть уже настро
но так же, как и в п
редыдущем меню. Но вс
е равно проверяем.
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис.
. Добавление нужного микроконтроллера
Из этого списка выбираем
наш микроконтроллер и жмем ОК. Е
с-
ли микроконтроллера нет, то это значит, что вы не скопировали
FLM
файл в папку Flash описанную в разделе «
Настройка программного пр
дукта
Keil
μVision
».
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис.1.37. Настройка эмулятора
После успешного распознавания контроллера
переходим во
вкладку «Flash Download». Там ставим птичку около «Erase Full Chip»,
как на рисунке, и жмем Add.
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Настраиваем проект. Переходим
вкладку
Project
Options
for
Terget
Target
1’…
Откроется диалоговое окно настроек.
реходим на вкладку
Debug
Вкладка
Debug
разбита на 2 коло
ки: «
Use
Simulator
режим симуляции и «
Use
выбор отладочного
инструмента «эмулятора». Выбираем «
Use
и выбираем «
Link
» эмул
я-
тор.
Рис.
. Выбор эмулятора
После выбора эмулятора нажимем
кнопку «
Setting
настройки.
Настроим эмулятор. П
ереходим на вкладку Debag
поле «SN:» должен
быть сразу показан номер
эмулятора
. Если его нет, то что
то не так с
драйверами. Далее в списке «PORT» нужно сменить JTAG на SW и в
брать частоту в списке 1MHz
. После этого справа должен появиться код
микроконтроллера, как
на (рисунке
1.36
). Если
ничего не появилось, то
нужно проверить правильность выбранного
канала эмулятора «А» или
«В». После
нажать кнопку «RESET» и еще раз выбрать частоту. Если не
помогло, то проверьте, как установлен контроллер в кроватку. Часто
достаточно всего лишь нажать на нее, чтобы ножки «отошли» и «вст
а-
ли» обратно. После чего снова нажать «RESET» выбрать частоту.
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Создание проекта в программном продукте
Keil
Внимение!
если в пути файлов есть русские символы, то проект
не
скомпилируется
Подключим программатор к JTAG_A (верхнему порту) и выста
ляем соответствующее положения на рычагах BOOT
загрузки (Самый
верхний влево, нижние два
вправо). Подключаем питание. Не заб
ваем переключить рычаг выбора источника питания.
Запускаем программный продукт
Keil μVision 5
. Переходим
вкладку
Project
New
μVision
Project
Сохраняем
проект
Далее необходимо выбрать
микроконтроллер. Микроконтроллер
фирмы
Milandr
с я дром
Cortex
3, называние
1986
. Находим
нужный, справа в окошке можно увидеть основные характеристики
микроконтроллера. Нажимаем кнопку «
Рис.
. Выбор
микроконтроллера
Далее
открывается
окно
anage
ime
nvironment
».
В да
ном окне можно выбрать интересующие стандартные библиотеки.
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Настройка программного продукта
Keil
μVision
1.
Необходимо скачать с официального
сайта
: «Software pack для Keil
MDK 5 (MDR32F9Qx, MDR1986VE1T, MDR1986VE3T)», распаковать и
установить. С keil 4
версии
данный файл не
работает
. Только kei
μVision
5.
2. Далее нужно установить 2 файла: «Setup_JLinkARM_V468a» и «MT
Link». Это драйвера для программатора MT
LINK. Их нет на
диске
. После этих действий подключаем MT
LINK к компьютеру, устройс
во должно определиться, но на всякий случай идем в диспетчер ус
ройств и проверяем,
определилось ли устройство
Рис.1
. Диспетчер устройств
копировать файл «MDR32F9x.FLM»
из
диска,
в папку «Flash» в
директории с keil 5. По
умолчанию путь такой
«C:
Keil_v5
ARM
Flash».
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис.
. Окно добавления файлов:
MDR
board
MDR
config
Загрузка программы в микроконтроллер осуществляется в
три этапа (рис.
): компиляция (
Compile
),
создание (
Make
), з
а-
грузка и отладка (
Download
and
Debug
Рис. 1.32
. Панели компиляции и загрузки программы
Далее можно запускать программу, как показано на рис.
1.33
Рис
. Запуск программы
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис.
. Окно добавления файла
system
MDR
Рис.
. Окно добавления файла
startup
MDR
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис.
. Окно добавления файлов:
core
core
cmfunc
core
cminstr
Рис.
. Окно добавления файла
MDR
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис
Меню
Link/J
Trace,
вкладка
Connection
После осуществления всех настроек в контекстном меню
Options»
необходимо нажать правой кнопкой мыши на окно
orkspace
» и добавить файлы стандарных библиотек:
Add
Add
Files
(рис.
1.2
Рис
Меню
Link/J
Trace,
вкладка
Connection
Необходимо добавить файлы как показано на рис.
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Рис. 1.23. Меню
Debbuger
, вкладка
Download
. Окно выбора
flashloader
фирмы «Миландр»
Далее в меню
Link
Trace
во вкладке
connection
необх
димо выбрать
SWD
(рис.
1.2
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис.
. Страница
Debbuger
, вкладка
Setup
В поле
macro
file
) необходимо добавить файл
FlashMDR
(рис. 1
).
Рис.
. Окно добавления
maro
файла
FlashMDR
Во вкладке
Download
меню
Debbuger
следует выбраь нео
ходимыепункты, как показано на рис.
и выбрать
flashloader
фирмы «Миландр» (рис.
1.2
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис.
. Меню
Linker
выбор опции
Override
default
Рис.
Окно выбора
Linker
фирмы «Миландр»
Далее необходимо перейти в меню
Debbuger
. Во вкладке
Setup
расположено поле
Driver
, в котором следует выбрать
Link
Trace
(рис. 1.
Помимо этого, существует еще одна библиотека для микроко
троллеров
F
9
под названием
Standard Peripherals
Library
SPL
). Библиотека
SPL
может использоваться в дополн
ние к
CMSIS
, обеспечивая более быстрый и удобный доступ к п
е-
риферии. Библиотеку
SPL
часто называют набором драйверов к
периферийным модулям.
Для загрузки библиотек нужно перейти на страницу
piler
, выбрать вкладку
Preprocessor
и в соответствующем окне указать
пути к следующим файлам библиотеки
CMSIS
(рис. 1.1
PROJ
DIR
PROJ
DIR
emdr
std
per
master
Config
PROJ
DIR
emdr
std
per
master
CMSIS
CoreSupport
PROJ
DIR$
emdr1986x
std
per
master
CMSIS
CM3
DeviceSupport
MDR32F9Qx
inc
$PROJ_DIR$
emdr1986x
std
per
master
CMSIS
CM3
DeviceSupport
MDR32F9Qx
startup
$PROJ_DIR$
emdr1986x
std
per
master
MDR32F9Qx_StdPeriph_Driver
inc
$PROJ_DIR$
emdr1986x
std
per
master
MDR32F9Qx_StdPeriph_Driver
src
Рис
Содержимое
окна
C/C++ Compiler
вкладки
Preprocessor
Далее нужно перейти в меню
Linker
, где следует выбрать
пункт
Override
default
и выбрать
Linker
как
показано на рис.
1.1
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис
. Окно настройки проекта
В меню
General
Options
во вкладке
Target
выбирается м
дель контроллера:
Device
Milandr
Milandr
1986
(рис.
Рис
. Окно выбора микроконтроллера
Для
дальнейшей
работы
микроконтроллером
необх
димо
подключить
библиотеку,
содержащую
описание
регис
ров,
масок
битов.
Существует
стандартные
библиотеки
ядра
микроконтроллеров серии
Cortex
CMSIS
. Данная аббревиатура
расшифровывается как
Cortex
Microcontroller
Software
Interface
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис
. Окно сохранения проекта
После сохранения проекта будет
открыто его рабочее окно
(рис.
1.1
Рис
Рабочее окно проекта
Далее необходимо настроить проект. Для этого в окне
orkspace
» выберается пункт контекстного меню «
Options
» (рис.
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 3 ;&#x/MCI; 3 ;2. Для создания нового проекта необходимо зайти в меню
Project
выбрать
пункт
Create new project
…»
(рис.
Рис
. Окно создания нового проекта
В п
оявившемся окне (рис. 1.
) необходимо выбрать ша
б-
лон для языка С и тип микроконтроллера (
ARM
). Далее следует
сохранить рабочую область
Workspace
(рис.
1.1
Рис
. Окно выбора языка программирования и микроконтроллера
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рисунок
. Настройки отладчика (программирование)
Создание проекта в программе
IAR
Embedded
Workbench
Создание проекта в среде
IAR Embedded Workbench
осуществл
я-
ется по следующему алгоритму.
Запускаем среду программирования
IAR Embedded
Workbench for ARM
. На рисунке
представлен внешний вид
стартового окна программы.
Рис.1.
. Стартовое окно программы
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рисунок 1
. Настройки линкера
Рисунок
. Настройки отладчика
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Также на отладочной плате присутсвует
разьем для подключения
microSD
карточки
(рис. 1.
Рис. 1
. Схема подключения разъемов
Настройка программы
IAR Embedded Workbench
рхив iar_arm.rar содержит папку arm, эту папку надо скопировать в
папку <Где установлен IAR>. Там уже есть такая папка,
т.е. просто
должны появиться дополнительные файлы и папки в ней.
/arm/src/flashloadert/Milandr
исходники загрузчика флеш
/arm/inc/Milandr
заголовочные файлы для 1986ВЕ9х
/examples/Milandr/coremark_iar
пример
программа
CoreMark
/config/linker/Miland
настройки
линкера
/config/flashloader/Milandr
скомпилированный
загрузчик
настро
ками
/config/devices/Milandr
собственно, само описание МК для IAR
/config/debugger/Milandr
файл с описанием периферии МК для о
ладки
Настройки IAR EWB
В настройках
проекта необходимо произвести настройку параме
ров согласно рис. 1
1.10
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис.
. Сх
емы подключения светодиодов на отладочной плате
Для подключения внешних устройств на плате присутствуют 2
разъема с выводами на них линий портов микроконтроллера (рис.
1.6
Рис. 1.6
. Схема подключения разъемов
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис.
. Схемы подключения кнопок отладочной платы
На отладочном макете имеется два пользовательских светодиода,
подключенные к порту С (рис.
1.5
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис. 1.3. Внешний вид отладочного
макета
Модуль Блок коммутации включает в себя 7 кнопок
RESET
WAKEUP
DOWN
LEFT
RIGHT
SELECT
. Схемы
подключения
кнопок к соответствующим портам микроконтроллера представлены на
рис
унке
1.4
�� &#x/MCI; 2 ;&#x/MCI; 2 ; блок аппаратной защиты памяти MPU;
умножение за один цикл, аппаратная реализация деления.
Память:
встроенная энергонезависимая Flash
память программ размером
128 Кбайт;
встроенное ОЗУ
размером 32 Кбайт;
контроллер внешней шины с поддержкой микрос
хем памяти
СОЗУ, ПЗУ, NAND Flash.
Питание и тактовая частота:
внешнее питание 2,2 ÷ 3,6 В;
встроенный регулируемый стабилизатор напряжения на 1,8 В для
питания ядра;
встроенные схемы контроля п
итания;
встроенные подстраиваемые RC генераторы 8 МГц и 40 кГц;
внешние кварцевые резонаторы на 2 ÷ 16 МГц и 32 кГц;
встроенный умножитель тактовой частоты PLL для ядра;
встроенный умножитель тактовой частоты PLL для USB.
Аналоговые модули:
два
разрядных АЦП (до 16 каналов);
температурный датчик;
двухканальный 12
разрядный ЦАП;
встроенный компаратор.
Периферия:
контроллер DMA с функциями передачи Периферия
Память, П
а-
мять
Память;
два контроллера CAN интерфейса;
контроллер USB интерфейса с функц
иями работы Device и Host;
контроллеры интерфейсов UART, SPI, I2C;
три 16
разрядных таймер
счетчика с функциями ШИМ и регис
рации событий;
до 96 пользовательских линий ввода
вывода.
Отладочные интерфейсы:
последовательные интерфейсы SWD и JTAG.
Описание
отладочного макета
На рис
унке
1.3 представлен внешний вид отладочного макета
микроконтроллера К1986ВЕ92
�� &#x/MCI; 0 ;&#x/MCI; 0 ;граммно
аппаратных комплексов для создания и отладки программного
кода для микроконтроллеров с архитектурой Cortex
M3.
аблица
1.2
Некоторые производители программных продуктов для ARM MCU
Cortex
Производитель
Продукты
Keil Software
Полный комплекс разработки и отладки пр
граммного кода, а также аппаратные средства
программирования и отладки
IAR Systems
Полный
программный комплекс разработки и о
ладки программного кода
CodeSousery
Полнофункциональный комплекс разработки и
отладки GNU G++
Rowley Associates
Полнофункциональный пакет разработки и о
ладки CrossWorks
FreeRTOS.org
Встраиваемые операционные системы
реального
времени RTOS
Pumpkin
Express Logic
RTOS, TCP/IP стеки, файловые системы, USB
стеки
Micrium
RTOS, TCP/IP стеки, файловые системы, USB
стеки, библиотеки для работы с протоколами
CAN и Modbus
CMX Systems
RTOS, TCP/IP стеки, файловые
системы, USB
стеки
Microcontroller
Systeme
RTOS, GUI, файловые системы, USB стеки, JTAG
эмуляторы
Interniche Technogies
RTOS, сетевые стеки и файловые системы
Основные характеристики микроконтроллера К1986ВЕ92QI
Ядро:
ARM 32
битное RISC
ядро Cor
tex™
M3, тактовая частота до
МГц;
производительность 1,
25 DMIPS/МГц;
�� &#x/MCI; 0 ;&#x/MCI; 0 ;прерываний составляет Контроллер Вложенных Векторных Прерыв
а-
ний, который в стандартной реализации под
держивает одно немаск
руемое прерывание и 32 прерывания общего назначения с 8 уровнями
приоритетов (в общем случае число прерываний может достигать 240
при 256 уровнях приоритета). С момента получения прерывания до н
а-
чала выполнения первой команды обработч
ика прерывания затрачив
а-
ется только двенадцать циклов тактового сигнала. Это достигается ча
с-
тично за счет автоматического размещения информации в стеке, осущ
е-
ствляемого внутри ЦПУ микроконтроллера. В случае, когда прерывания
следуют впритык друг за другом,
КВВП использует метод «постановки
в очередь», позволяющий осуществлять обработку каждого из посл
е-
дующих прерываний всего за шесть циклов тактового сигнала. На этапе
обращения к стеку, прерывание с более высоким приоритетом может
получить преимущество пере
д прерыванием с низким приоритетом, что
не влечет за собой затрат дополнительных циклов ЦПУ.
Блок защиты памяти является опциональным компонентом ядра
Cortex
M3. Он позволяет повысить надежность встраиваемых систем за
счет защиты критичной информации, исп
ользуемой операционной си
с-
темой, от действия пользовательских программ.
Доступ к встроенной отладочной системе реализован посредством
порта доступа к отладочной системе (DAP), который с внешней средой
связывается по одному из последовательных интерфейсов:
выводной
последовательный отладочный порт SW или стандартный 5
выводной
последовательный порт JTAG. Появление 2
выводного интерфейса д
е-
лает возможным появление 32
битных микроконтроллеров с числом
выводов менее 10 и существенно упрощает электрическое под
ключение
к отлаживаемому устройству. Для микроконтроллеров с масочным ПЗУ
предусмотрен специальный блок Flash Patch, который во время отладки
позволяет осуществлять выборку инструкций не из ПЗУ, а из статич
е-
ского ОЗУ, тем самым существенно упрощая процедур
у отладки пр
граммного кода для таких микроконтроллеров.
Микроконтроллеры с архитектурой Cortex
M3 стали значител
ным явлением на рынке ARM микроконтроллеров. Ядро микроконтро
лера, построенное на базе Гарвардской архитектуры с использованием
уровневого
конвейера, использует новые решения, такие как предск
а-
зание переходов в командах ветвления, однотактное умножение и дел
е-
ние, показывает впечатляющий уровень производительности, равный
25 DMIPS/МГц.
Немаловажным плюсом архитектуры Cortex
M3 является
широкая
ее поддержка ведущими производителями программного обеспечения.
В таблице 3 перечислены основные производители программных и пр
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Рис.1.2. Адресное пространство процессора Cortex
Традиционные процессоры на базе архитектуры ARM7 поддерж
вают только доступ к выровненным данным, что подразумевает, что с
храняемые и вычитываемые данные должны быть выровнены
по гран
це слова. Процессоры же на базе архитектуры Cortex
М3 позволяют о
ращаться к невыровненным данным и сводят к минимуму временные
задержки, связанные с доступом к данным. В случае, если происходит
обращение к невыровненным данным, это обращение разби
вается на
несколько параллельных обращений к выровненным данным, но этот
процесс является прозрачным для программы пользователя, поскольку
происходит автоматически внутри ядра.
Помимо этого,
процессоры с архитектурой Cortex
М3 поддерж
вают операции 32
разр
ядного умножения за 1 такт, а также знаковое и
беззнаковое деление, которое требует от 2 до 12 тактов в зависимости от
размера операндов. Операция деления происходит быстрее, в случае,
если делимое и делитель имеют небольшой размер.
Cortex поддерживает одн
у систему команд, ARM Thumb
2. Эта
система содержит и 16
и 32
битные команды, сочетая в себе произв
дительность 32
битного ARM с плотностью кода 16
битного Thumb.
Процессор Cortex
M3 содержит более совершенную систему пр
е-
рываний (относительно ARM7), харак
теризующуюся задержкой вызова
процедуры обработки прерывания всего лишь 12 машинных циклов
(для с
равнения, ARM7TDMI
S требует 24
42 цикла). Основу системы
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Ядро Cortex
M3 базируется на Гарвардской архитектуре и имеет
раздельные шины для команд и для данных в отличие от стандартных
ARM процессоров
, использующих фон Неймановскую архитектуру и
совмещенные шину и память как для данных, так и для команд. П
скольку процессоры Cortex
M3 считывают данные и команды одновр
е-
менно, это позволяет производить некоторые операции одновременно и
таким образом
обес
печить конвейерную обработку программ
3]. &#x/MCI; 1 ;&#x/MCI; 1 ;Ядро Cortex
M3 может работать в одном из двух режимов работы:
«Thread» и «Handler», и поддерживает два уровня доступа к коду пр
граммы: привилегированный и н
епривилегированный, что облегчивает
реализацию сложных и открытых систем, не жертвуя при этом защ
щенностью системы. Код программы, исполняемый в непривилегир
ванном режиме, имеет ограниченные возможности по доступу к некот
рым ресурсам и специфическим областям памяти. Режим «Thread» я
ляет
ся типичным режимом работы, в котором код программы может
быть как привилегированным, так и непривилегированным. Переход в
режим «Handler» происходит при возникновении исключительной с
туации (exception); в данном режиме весь код программы выполняется
как
привилегированный. Также предусматривается такое понятие, как
рабочее состояние ядра. Их два: Thumb, в котором выполнение инс
рукций идет обычным путем, и Debug, в котором активизируются
встроенные отладочные возможности ядра.
В отличие от прежних ядер ARM
, в ядре Cortex
M3 стандартиз
вано не только ЦПУ, но и контроллер прерываний, системный таймер и
карта памяти.
Например,
4 Гбайта адресного пространства Cortex
M3
разделено на строго определенные области для кода приложения,
SRAM, перифери
йных и системных
устройств (р
ис.
2).
�� &#x/MCI; 0 ;&#x/MCI; 0 ; &#x/MCI; 1 ;&#x/MCI; 1 ;Процессор на базе
архитектуры Cortex
M3 в своей основе имеет
иерархическую структуру. Она включает в себя ядро CM3Core с разв
той периферией, включающей в себя механизмы управления прерыв
а-
ниями, защиты памяти и внутрисхемной отладки и другие.
Архитектура
процессорного ядра
Cortex
M3 и интегрированные в него компоненты
представлены на рисунке 1.
Рис. 1.1.
Архитектура ядра Cortex
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Глава 1.
МИКРОКОНТРОЛЛЕР
1986
. НАСТРОЙКА
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Описание
процессорного
ядра
Cortex
Cortex
M3
это новое 32
разрядное ARM RISC ядро с гарвар
ской архитектурой. Микроконтроллеры на основе этого ядра выпуск
а-
ется многими фирмами (ST Microelectronics, NXP, TI и др.), что позв
ляет разработчику выбрать наиболее подходящий микроконтроллер.
Данные процессоры спроектированы для достижения высокой про
изв
дительности всей системы в недорогих высокоэкономичных встрое
ных приложениях, таких как системы промышленного контроля, авт
мобильная электроника, проводные и беспроводные телекоммуникац
онные системы, системы управления электроприводами и т.п.
Проце
ссоры на основе архитектуры CortexM3 являются дальне
шим и наиболее прогрессивным развитием классической архитектуры
ARM и имеют более высокую производительность, менее сложную м
дель программирования, прекрасную систему обработки прерываний и
низкую цену.
Некоторые преимущества процессоров на базе архитект
ры Cortex
M3 перед процессорами на базе классической архитектуры
приведены в табл
ице
Таблица 1
Сравнение ядер ARM7TDMI
S и Cortex
Параметр
Ядро
ARM7TDMI
�&�R�U�W�H�[
Y^jh
�$�5�0�Y��7
�$�5�0�Y�
:jobl_dlmjZ
nhg�G_cfZgZ
=Zj\Zj^kdZy
Ih^^_j`b\Z_fu_�kbkl_fu�
dhfZg^
�7�K�X�P�E
�7�K�X�P�E����7�K�X�P�E
Прерывания
FIQ/IRQ
NMI + от 1 до 240 физических
прерываний
Время обработки прерыв
ния
24..42 тактов
12 тактов
Пошаговый режим
Нет
Интегрирован
Защита памяти
Нет
8 региональных устройств з
а-
щиты памяти
Производительность
95 DMIPS/МГц (в реж
и-
ме ARM)
25 DMIPS/МГц
Потребляемая мощность
28 мВт/МГц
19 мВт/МГц
Площадь кристалла, мм²
62 (только ядро)
86 (ядро и стандартная пер
и-
ферия)
�� &#x/MCI; 0 ;&#x/MCI; 0 ;Введение
В настоящее время особой популярностью у разработчиков эле
тронных устройств пользуются так называемые встраиваемые
микр
контроллеры. В мире выпускается большое количество семейств микр
контроллеров, в основном на базе приборов с 8
битной шиной данных и
процессорными RISC
и CISC
ядрами. Их производительность и объем
памяти вполне достаточны для решения множества бытовы
х и промы
ленных задач, а архитектура ядер многих из этих семейств хорошо из
чена пользователями. Для 8
битных микроконтроллеров написано о
ромное количество программ, которые, наряду с многочисленными р
сифицированными описаниями самих этих устройств, сво
бодно досту
ны в сети Интернет.
и 32
битные микроконтроллеры, которые обеспечивают более
высокую производительность,
быстро набирают популярность
. Их пр
менение обусловлено повышенной сложностью решаемых задач, жес
кими требованиями к
производительности встраиваемых контроллеров
управления, необходимостью иметь в электронных устройствах разв
тые пользовательские интерфейсы, предназначенные для отображения
информации, управления, индикации и
т.д.
Типичные для 16
и 32
битных микроконтрол
леров приложения (сотовые телефоны, дисков
ды, модемы и
т.п.
) предъявляют к встраиваемым управляющим ко
троллерам непрерывно возрастающие требования. Особенно важно
обеспечить их высокую эффективность, сохранив при этом низкую
стоимость, отличавшую 8
битны
е микроконтроллеры.
Значительных успехов в области создания 16/32
битных микр
процессорных (микроконтроллерных) ядер добилась британская фирма
Advanced RISC Machines (ARM), специализирующаяся на разработке
микропроцессоров и периферии к ним, и продающая ли
цензии на их
производство другим фирмам
производителям. 32
битные микроко
троллеры, использующие процессорное ядро с архитектурой ARM, пр
обрели широкую популярность у разработчиков. Благодаря высокой
производительности и выгодному соотношению «цена/качест
во», ми
роконтроллеры с ядром ARM представляются многим потребителям
элементной базы весьма перспективными.
Данное учебное пособие посвящено вопросам настройки периф
е-
рийных устройств мик
роконтроллера
1986
его
программир
ванию.
В пособии представле
но большое количество примеров пр
грамм для микроконтроллер
, написанны
на языке
�� &#x/MCI; 1 ;&#x/MCI; 1 ;ОГЛАВЛЕНИЕ
Введение
Глава 1.
МИКРОКОНТРОЛЛЕР
НАСТРОЙКА ПРОГРАММНОГО ОБЕСПЕЧЕНия
Описание процессорного ядра Cortex
M3
Основные характеристики микроконтроллера К1986ве92qi
Описание отладочного
макета
Настройка программы Iar Embedded Workbench
Создание проекта в программе
Iar
Embedded
Workbench
Создание проема в программном продукте
Keil
Μvision
Глава 2.
НАСТРОЙКА ПОРТОВ ВВОДА ВЫВОДА. ПРИМЕРЫ
Порты ввода
вывода Mdr_Portx
Пример программ настройки портов ввода
вывода
Лабораторная работа №1. Порты ввода
вывода
Глава 3.
ТАЙМЕРЫ МИКРОКОНТРОЛЛЕРА К1986ВЕ92QI
Описание таймеров микроконтроллера
Пример программ настройки таймера 1
Лабораторная работа №2. Таймеры
Глава 4.
АНАЛОГОВО
ЦИФРОВЫЕ ПРЕОБРАЗОВАТЕЛИ
МИКРОКОНТРОЛЛЕРА К1986ВЕ92QI
Описание АЦП микроконтроллера
Пример программ настройки АЦП
Лабораторная работа
№3. Аналогово
цифровой преобразователь
Глава 5.
ЦИФРО
АНАЛОГОВЫЙ ПРЕОБРАЗОВАТЕЛЬ
МИКРОКОНТРОЛЛЕРА К1986ВЕ92Qi
Описание ЦАП микроконтроллера
Пример программ настройки ЦАП
Лабораторная работа №3. Цифро
аналоговый преобразователь
Глава 6.
ИНТЕРФЕЙС
UART
МИКРОКОНТРОЛЛЕРА К1986ВЕ92QI
Описание ЦАП микроконтроллера
Пример программ настройки
Uart
Лабораторная работа №3. Интерфейс
Uart
Литература
УДК
681.322 (075.8)
32.973.26-04
73
60
Торгаев
.,
Мусоров
.,
Солдатов
.,
Сорокин
Программирование
микроконтрол
леров
ядром
Cortex-M3
задачах
диагностики
контроля
учебное
пособие
. –
Томск
: STT, 2017. –
104
ISBN 978-5-93629-598-0
Методическое
пособие
предназначено
для
студен
тов
старших
курсов
изучающих
многоразрядные
мик
роконтроллеры
построение
систем
неразрушающего
контроля
нове
пособии
рассмотрены
вопро
программирования
микроконтроллеров
K1986BE92QI.
Представлено
большое
количество
при
меров
программ
настройке
основных
периферийных
устройств
для
данных
микроконтроллеров
Пособие
предназначено
для
студентов
обучаю
щихся
направлениям
11.04.04 «
Электроника
нано
электроника
», 12.04.04 “
Биотехнические
системы
технологии
”.
УДК
681.322 (075.8)
32.973.26-04
73
Рецензенты
Нариманова
. –
канд
физ
мат
доцент
кафедры
ТУСУР
Шульгин
. –
начальник
отдела
управления
персоналом
Полюс
"».
ISBN 978-5-93629-598-0
Торгаев
Мусоров
Солдатов
Сорокин
, 2017
ФГАОУ
, 2017
Оформление
. STT
, 2017
Министерство
образования
науки
Российской
Федерации
ФГАОУ
Национальный
исследовательский
Томский
политехнический
университет
ФГАОУ
Национальный
исследовательский
Томский
государственный
университет
ФГУИ
Институт
оптики
атмосферы
Зуева
Сибирского
отделения
Российской
академии
Торгаев
Мусоров
Солдатов
Сорокин
ПРОГРАММИРОВАНИЕ
МИКРОКОНТРОЛЛЕРОВ
ЯДРОМ
CORTEX-M3
ЗАДАЧАɏ
ДИАГНОСТИКИ
КОНТРОЛЯ
Рекомендовано
качестве
учебного
пособия
Редакционно
издательским
советом
Томского
политехнического
университета
Томск
– 2017

Приложенные файлы

  • pdf 4330567
    Размер файла: 7 MB Загрузок: 0

Добавить комментарий