МИКРОСХЕМА ИНТЕГРАЛЬНАЯ 1921ВК035. Руководство пользователя - часть 1

 

  Главная      Книги - Разные     МИКРОСХЕМА ИНТЕГРАЛЬНАЯ 1921ВК035. Руководство пользователя

 

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

    

 

   

 

   

 

содержание      ..      1       2         ..

 

 

МИКРОСХЕМА ИНТЕГРАЛЬНАЯ 1921ВК035. Руководство пользователя - часть 1

 

 

Содержание
Введение
5
1 Область применения и особенности
6
2 Краткое техническое описание микроконтроллера
7
2.1 Функциональные параметры
7
2.2 Электрические параметры
11
3 Архитектура изделия
13
4 Система управления тактированием и сбросом
14
4.1 Общая система тактирования
14
4.2 PLL
14
4.3 Система слежения за тактовыми сигналами
15
4.4 Сигналы сброса
16
4.5 Прерывания
17
4.6 Тактирование и сброс периферийных блоков
17
5 Система управления питанием
19
5.1 Режим Sleep
19
5.2 Режим Deepsleep
19
6 Организация памяти
21
7 Контроллер флеш-памяти
23
7.1 Основная флеш-память
23
7.2 Загрузочная флеш-память
24
7.3 Сервисный сброс всей флеш-памяти
25
8 Контроллер прямого доступа к памяти
26
8.1 Программное управление модулем DMA
27
8.2 Правила обмена данными
32
8.3 Правила арбитража
33
8.4 Типы циклов
35
8.5 Индикация ошибок
46
9 Прерывания
47
10 Порты ввода-вывода
51
10.1 Функционирование порта
51
10.2 Режим альтернативных функций
52
10.3 Входные фильтры
52
10.4 Прерывания
53
10.5 Генерация аппаратных запросов
54
10.6 Механизм блокировки конфигурации
54
10.7 Механизм маскирования
54
11 Таймеры
56
12 Блоки захвата
57
12.1 Режим захвата времени
58
12.2 Режим работы «генератор ШИМ»
59
12.3 Прерывания
61
13 Модуль квадратурного декодера
62
13.1 Обработчик сигналов входов
62
13.2 Квадратурный преобразователь
63
13.3 Счетчик позиции
65
13.4 Таймер временных отсчетов
70
13.5 Модуль захвата времени
70
13.6 Сторожевой таймер
73
13.7 Система прерываний
73
14 Блоки ШИМ
74
2
14.1 Таймер
75
14.2 Компаратор
78
14.3 Обработчик событий
79
14.4 Пороговый выключатель
82
14.5 Генератор задержки ШИМ
84
14.6 Фильтр коротких импульсов
85
14.7 Модулятор
85
14.8 Детектор сигнала аварии
87
14.9 Триггер событий
88
15 Приемопередатчик UART
92
15.1 Функционирование блока UART
92
15.2 Интерфейс прямого доступа к памяти
96
15.3 Прерывания
97
15.4 Программирование
98
16 Контроллер интерфейса SPI
99
16.1 Структура контроллера SPI
99
16.2 Интерфейс прямого доступа к памяти
101
16.3 Функционирование
101
16.4 Прерывания
105
17 Контроллер интерфейса I2C
107
17.1 Протокол шины
107
17.2 Функциональное описание
114
17.3 Инициализация и функционирование
117
18 Контроллер интерфейса CAN
131
18.1 Протокол CAN
131
18.2 Структура и функционирование контроллера CAN
137
18.3 Узел контроллера CAN
142
18.4 Объекты сообщений
147
18.5 Прием и передача сообщений
151
18.6 Фильтрация сообщений
154
18.7 Удаленные запросы
155
18.8 Дополнительные режимы передачи
156
18.9 FIFO структура объектов сообщений
157
18.10 Режим шлюза
160
18.11 Прерывания объектов сообщений
163
18.12 Программирование контроллера CAN
165
19 Блок АЦП
166
19.1 Секвенсор
167
19.2 Модуль АЦП
174
19.3 Цифровой компаратор
176
19.4 Контроллер прерываний
179
19.5 Примеры работы
181
20 Сторожевой таймер
190
21 Программно-аппаратные средства отладки
191
Заключение
192
Приложение А (обязательное) Регистры микроконтроллера
193
А.1 Регистры контроллера АЦП
193
А.2 Регистры GPIO
208
A.3 Регистры контроллера CAN
230
A.4 Регистры контроллера флеш-памяти
255
A.5 Регистры блока управления системой
261
A.6 Регистры системы управления тактированием и сбросом
265
3
А.7 Регистры системы управления питанием
278
A.8 Регистры сторожевого таймера
280
А.9 Регистры контроллера DMA
284
A.10 Регистры блока UART
294
A.11 Регистры контроллера SPI
303
А.12 Регистры таймера
309
A.13 Регистры блока ШИМ
312
A.14 Регистры квадратурного декодера
335
A.15 Регистры контроллера I2С
350
A.16 Регистры блока захвата
357
Приложение Б (обязательное) Коды состояний функционирования блока I2C
366
Приложение В (обязательное) Регистры прерываний
374
Лист регистрации изменений
376
4
Введение
32-разрядные микроконтроллеры с каждым днем набирают все большую
популярность среди разработчиков различного оборудования и программистов. Они
применяются при разработке и изготовлении электронной техники. Высокая
вычислительная мощность и при этом относительно низкая стоимость делают эти
устройства привлекательными для самого широкого круга разработчиков.
Микросхема 1921ВК035 представляет собой СБИС 32-разрядного микроконтроллера
на базе RISC-ядра, предназначенного для промышленных и потребительских приложений,
включая системы дистанционного мониторинга, контрольно-измерительные приборы,
сетевые устройства, системы автоматизации производственных процессов,
автомобильную электронику, системы управления электродвигателями.
В состав микроконтроллера входит широкий набор цифровой и аналоговой
периферии, в связи с чем он может применяться в различных системах цифровой
обработки сигналов, в том числе требующих точных аналогово-цифровых
преобразований, в системах управления и сбора информации.
В настоящем техническом описании приведено описание архитектуры,
функционального построения и периферии микроконтроллера 1921ВК035. Техническое
описание может служить практическим руководством по применению микроконтроллера
для разработчиков систем на его основе и программистов.
5
1 Область применения и особенности
Сфера применения микроконтроллера довольно широка - средства измерений,
связи, наблюдения, безопасности, автоматизация производства, медицина, энергетика,
промышленность, различные системы управления. Тем не менее, основной областью
применения является электропривод.
Для эффективного управления в электромеханических системах была разработана
дополнительная периферия: блоки ШИМ, блок АЦП с интерфейсом к контроллеру
прямого доступа к памяти, модуль захвата/сравнения, блок импульсного квадратурного
декодера, используемого для обработки сигналов датчиков положения ротора в
высокопроизводительных системах для определения положения, направления и скорости
вращения.
Разработанный микроконтроллер имеет встроенную флэш-память программ
размером
64 Кбайт, которую можно использовать для хранения и загрузки
пользовательского программного обеспечения. Также во флэш-памяти существует особый
защищенный раздел, который может быть использован для хранения начального
загрузчика.
Система тактирования микроконтроллера позволяет использовать различные
источники тактового сигнала, что позволяет расширить набор применений и решаемых
задач пользователя. Микроконтроллер может тактироваться от внутреннего RC-генератора
с частотой 8 МГц, внутреннего осциллятора с внешним кварцевым резонатором, а также
сигналом встроенного генератора PLL. Также существует возможность гибкой настройки
тактовых сигналов для блоков периферии.
Для снижения энергопотребления микросхемы предусмотрена возможность
отключения тактовых сигналов отдельных блоков периферии в случае, если они не
используются пользователем. При переходе процессора в режим пониженного
энергопотребления возможно отключение тактового сигнала ядра (команда WFI или
WFE).
6
2 Краткое техническое описание микроконтроллера
2.1 Функциональные параметры
Структурная схема микроконтроллера показана на рисунке 2.1.
Рисунок 2.1 - Структурная схема микроконтроллера
В состав микроконтроллера входят функциональные элементы (см. рисунок 2.1):
- 32-разрядное процессорное RISC-ядро с поддержкой набора одноцикловых команд
умножения с накоплением, команд централизованного управления потоком данных,
арифметических и логических команд и встроенным модулем обработки команд с
плавающей запятой с одинарной точностью (блок FPU);
- блок управления сбросом и синхронизацией (RCU), имеющий в своем составе
RC-генератор (8 МГц), синтезатор частоты на основе ФАПЧ (PLL) и блок управлнения
тактовыми сигналами (SCM);
- блок управления системой (SIU);
- загрузочная флеш-память (Flash) емкостью 3 Кбайт;
- флеш-память программ объемом 64 Кбайт;
- кэш памяти команд и данных объемом 1 Кбайт каждый;
- ОЗУ объемом 16 Кбайт;
- 16-канальный контроллер прямого доступа к памяти (DMA);
- блок управления энергопотреблением (PMU), позволяющий переводить системные
блоки в режим Powerdown;
- два
16-разрядных порта ввода-вывода с раздельно программируемыми
мультиплексированными выводами общего назначения;
- 4-канальный 12-разрядный АЦП с режимами цифрового компаратора для каждого
из каналов (равно или больше, равно или меньше, попадание в диапазон, выход из
диапазона) и функцией автоматического запуска модулей ШИМ по событию «окончание
преобразования»;
- три двухканальных блока ШИМ
- импульсный квадратурный декодер (QEP) для обработки сигналов датчиков
положения ротора в высокопроизводительных системах для определения положения,
направления и скорости вращения;
7
- три блока захвата;
- четыре 32-разрядных таймера;
- отладочные интерфейсы JTAG и SWD;
- сторожевой таймер;
- два приемопередатчика UART;
- CAN (протокол 2.0b);
- I2C;
- SPI.
Условное графическое обозначение микроконтроллера приведено на рисунке 2.2.
Рисунок 2.2 - Условное графическое обозначение микросхемы (альтернативные
функции выводов портов A и B указаны в таблице 2.1)
Назначение выводов
Функциональное назначение выводов микроконтроллера приведено в таблице 2.1.
После сброса микроконтроллера выводы портов A и B конфигурируются как выводы
общего назначения и находятся в третьем состоянии. Исключение составляют выводы
A2-A6 (конфигурируются как выводы JTAG). Включение/отключение режима
альтернативной
функции
осуществляется
посредством
регистров
ALTFUNCSET/ALTFUNCCLR блоков GPIO. Выводы портов A и B имеют схемы
«Pull-up», подключаемые программно (регистр PULLMODE блока GPIO). При
использовании отладочного интерфейса SWD его вывод SWCLK соответствует выводу
JTAG_TCK, вывод SWDIO соответствует JTAG_TMS
В таблице 2.1 используются обозначения: I - вход, O - выход, Z - третье состояние.
Микросхемы выполнены в металлокерамическом корпусе МК 5162.48-1. Масса
микросхемы - не более 3 г.
8
Таблица 2.1 - Функциональное назначение выводов ИС 1921ВК035
Вывод корпуса
Обозна-
Альтернативная
Функциональное назначение вывода
Номер
Тип
чение
функция
A0
4
I/O/Z
Вход/выход порта A, разряд 0
I2C_SCL
I/O
Вход/выход синхросигнала I2C
A1
5
I/O/Z
Вход/выход порта A, разряд 1
I2C_SDA
I/O
Вход/выход данных I2C
A2
8
I/O/Z
Вход/выход порта A, разряд 2
JTAG_TCK
I
Вход тактового сигнала порта JTAG/
Вход тактового сигнала порта SWD
A3
9
I/O/Z
Вход/выход порта A, разряд 3
JTAG_TMS
I/O
Вход режима порта JTAG/
Вход/выход данных порта SWD
A4
10
I/O/Z
Вход/выход порта A, разряд 4
JTAG_TDI
I
Вход данных порта JTAG
ECAP0_IO
I/O
Вход/выход блока захвата 0
A5
11
I/O/Z
Вход/выход порта A, разряд 5
JTAG_TDO
O
Выход данных порта JTAG /
Вывод SWO блока трассировки
ECAP1_IO
I/O
Вход/выход блока захвата 1
A6
12
I/O/Z
Вход/выход порта A, разряд 6
JTAG_TRST
I
Вход сброса порта JTAG
ECAP2_IO
I/O
Вход/выход блока захвата 2
A7
13
I/O/Z
Вход/выход порта A, разряд 7
PWM_TZ
I
Вход сигнала аварии блоков ШИМ
A8
14
I/O/Z
Вход/выход порта A, разряд 8
PWM0_A
O
Выход линии A блока ШИМ0
A9
15
I/O/Z
Вход/выход порта A, разряд 9
PWM0_B
O
Выход линии B блока ШИМ0
A10
16
I/O/Z
Вход/выход порта A, разряд 10
PWM1_A
O
Выход линии A блока ШИМ1
A11
17
I/O/Z
Вход/выход порта A, разряд 11
PWM1_B
O
Выход линии B блока ШИМ1
A12
20
I/O/Z
Вход/выход порта A, разряд 12
PWM2_A
O
Выход линии A блока ШИМ2
A13
21
I/O/Z
Вход/выход порта A, разряд 13
PWM2_B
O
Выход линии B блока ШИМ2
A14
22
I/O/Z
Вход/выход порта A, разряд 14
TMR0_IN
I
Вход внешней синхронизации таймера 0
A15
23
I/O/Z
Вход/выход порта A, разряд 15
TMR1_IN
I
Вход внешней синхронизации таймера 1
B0
26
I/O/Z
Вход/выход порта B, разряд 0
ADC_CH0
I
Вход АЦП, разряд 0
B1
27
I/O/Z
Вход/выход порта B, разряд 1
ADC_ CH1
I
Вход АЦП, разряд 1
B2
28
I/O/Z
Вход/выход порта B, разряд 2
ADC_ CH2
I
Вход АЦП, разряд 2
B3
29
I/O/Z
Вход/выход порта B, разряд 3
ADC_ CH3
I
Вход АЦП, разряд 3
9
Окончание таблицы 2.1
Вывод корпуса
Функциональное назначение вывода
Обозна-
Альтернативная
Номер
Тип
чение
функция
B4
38
I/O/Z
Вход/выход порта B, разряд 4
SPI_FSS
I
Вход выбора ведомого устройства SPI
B5
39
I/O/Z
Вход/выход порта B, разряд 5
SPI_SCK
I/O
Вход/выход синхросигнала SPI
B6
40
I/O/Z
Вход/выход порта B, разряд 6
SPI_RX
I
Вход данных SPI
B7
41
I/O/Z
Вход/выход порта B, разряд 7
SPI_TX
O
Выход данных SPI
B8
44
I/O/Z
Вход/выход порта B, разряд 8
UART1_TX
O
Выход данных блока UART1
B9
45
I/O/Z
Вход/выход порта B, разряд 9
UART1_RX
I
Вход данных блока UART1
B10
46
I/O/Z
Вход/выход порта B, разряд 10
UART0_TX
O
Выход данных блока UART0
QEP_S
I
Вход/выход стробирования квадратурного
декодера
B11
47
I/O/Z
Вход/выход порта B, разряд 11
UART0_RX
I
Вход данных блока UART0
QEP_I
I
Индексный вход квадратурного декодера
B12
48
I/O/Z
Вход/выход порта B, разряд 12
CAN1_RX
I
Вход данных CAN1
QEP_B
I
Вход сигнала направления вращения ротора
B13
1
I/O/Z
Вход/выход порта B, разряд 13
CAN1_TX
O
Выход данных CAN1
QEP_A
I
Вход синхросигнала квадратурного декодера
B14
2
I/O/Z
Вход/выход порта B, разряд 14
CAN0_RX
I
Вход данных CAN0
B15
3
I/O/Z
Вход/выход порта B, разряд 15
CAN0_TX
O
Выход данных CAN0
LDOC
-
32
-
Вывод регулятора напряжения питания для
подключения внешнего конденсатора 4,7 мкФ
SERVEN
-
36
I/
Вход выбора сервисного режима/
O
Выход программируемого тактового сигнала
CLKOUT
NMI
-
37
I
Вход внешнего немаскируемого прерывания
(активный ноль)
RESET
-
33
I
Вход внешнего сброса (активный ноль)
XI_OSC
-
35
I
Вход дополнительного тактового сигнала/
Вывод для подключения кварцевого резонатора
XO_OS
-
34
-
Вывод для подключения кварцевого
C
резонатора
AVDD
-
24
-
Аналоговое питание 3,3В
AGND
-
25
-
Аналоговая земля
VDD
-
7, 19,
-
Цифровое питание 3,3В
31, 43
GND
-
6, 18,
-
Цифровая земля
30, 42
10
Особенности системы питания
На плате вывод питания VDDA может быть объединен с выводами питания VDD
(при этом должны быть приняты меры для снижения помех по питанию).
Выключение питания микроконтроллера должно проводиться путем полного снятия
напряжения как с выводов питания и так всех остальных выводов микросхемы. Подача
напряжения на функциональные вывода микросхемы при выключенном питании
недопустимо.
2.2 Электрические параметры
Номинальное значение напряжения питания по выводам VDD, AVDD должно быть
3,3 В ± 10 %.
Значение суммарного максимального тока по выводам портов А и B не должно
превышать 50 мА.
Допустимая максимальная разность значений напряжений питания по выводам
VDD, AVDD составляет 50 мВ.
Амплитудное значение пульсации напряжения питания должно быть не более 50 мВ.
Значения предельно допустимых электрических режимов эксплуатации в диапазоне
рабочих температур среды соответствуют нормам, приведенным в таблице 2.2.
Таблица 2.2 - Значения предельно допустимых электрических режимов эксплуатации
Буквен-
Предельно
Предельный
ное
допустимый
режим
Наименование параметра режима,
обозна-
режим
единица измерения
чение
Не
не
пара-
не более
не более
менее
менее
метра
Напряжение питания по выводам VDD, В
UCC1
3,0
3,6
-0,3
4,4
Напряжение питания по выводу AVDD, В
UCC3
3,0
3,6
-0,3
4,4
Входное напряжение низкого уровня, В
UIL1
-0,5
0,8
-0,6
-
Входное напряжение высокого уровня, В
UIH1
0,2×UCC1
-
UCC1
UCC1+0,6
+1
Входное напряжение высокого уровня по выводам
UIH2
тактового сигнала, В
0,7×UCC1
UCC1
-
UCC1+0,6
Выходной ток низкого уровня в режиме
IOL1
повышенной нагрузочной способности, мА
-
6
-
8
Выходной ток высокого уровня в режиме
IOH1
повышенной нагрузочной способности, мА
-6
-
-8
-
Частота следования импульсов тактовых сигналов,
fCI
МГц
0,001
100
-
-
Частота внешнего кварцевого резонатора, МГц
8
24
Длительность фронта и спада тактового сигнала, нс
tLH1,
tHL1
-
5
-
-
Длительность фронта и спада входных сигналов,
tLH2,
кроме тактового, нс
tHL2
-
5
-
-
Примечание - Значение суммарного максимально допустимого тока по
выводам
А0 - А15 и В0 - В15 не более 50 мА.
Электрические параметры микросхем при приемке и поставке соответствуют
нормам, приведенным в таблице 2.3.
11
Таблица 2.3 - Электрические параметры микросхем при приемке и поставке
Буквенное
Норма
Темпе-
Наименование параметра,
обозначе-
параметра
ратура
единица измерения, режим измерения
ние
не
не
среды,
параметра
менее
более
ºС
Выходное напряжение низкого уровня по
выводам портов A и B, В,
UOL1
-
0,4
UCC1 = 3,0 В, IOL1 = 6 мА
Выходное напряжение высокого уровня по
выводам портов A и B, В,
UOH1
UCC1-
-
UCC1 = 3,0 В, IOL1 = 6 мА
0,9
Ток утечки низкого уровня по выводам
IILL
портов A и B с отключенными схемами «Pull-
-10
-
up», «Pull-down», мкА,
UCC1 = 3,6 В, UIL = 0 В
Ток утечки высокого уровня по выводам
IILH
портов A и B с отключенными схемами «Pull-
-
10
up», «Pull-down», мкА,
UCC1 = 3,6 В, UCC2 = 3,3 В, UIH = 3,6 В
Входной ток низкого уровня по выводам
IIL
портов A и B с подключенной схемой «Pull-
-200
10
up», мкА,
-60 ± 3
UCC1 = 3,6 В, UCC2 = 3,3 В, UIL = 0 В
25 ± 10
Входной ток высокого уровня по выводам
IIH
125 ±
портов A и B с подключенной схемой «Pull-
-10
200
3
down», мкА,
UCC1 = 3,6 В, UCC2 = 3,3 В, UIL = 3,6 В
Выходной ток низкого уровня по выводам
IOZL
портов A и B, находящимся в
-10
-
третьем состоянии, мкА,
UCC1 = 3,6 В, UCC2 = 3,3 В, UOL = 0 В
Выходной ток высокого уровня по выводам
IOZH
портов A и B, находящимся в третьем состоянии,
-
10
мкА,
UCC1 = 3,6 В, UCC2 = 3,3 В, UOH = 3,6 В
Динамический ток потребления по выводу
IUCC1
-
0,050
UCC1 в активном режиме, А
Общие гармонические искажения АЦП, дБ,
THD
-
-72
UCC1 = 3,3 В, fS = 1 МГц
Отношение сигнал/(шум + искажения) в
SINAD
канале АЦП, дБ,
68
-
UCC1 = 3,3 В, fS = 1 МГц
Интегральные нелинейности АЦП, МЗР,
INL
-1.5
+1.5
UCC1 = 3,3 В, fS = 1 МГц
Дифференциальные нелинейности АЦП,
DNL
-1
+1
МЗР,
UCC1 = 3,3 В, fS = 1 МГц
Примечание - Параметры IILL, IILH, IOZL, IOZН при температуре минус 60
ºС не измеряются, а гарантируются нормами при температуре (25 ± 10) ºС.
12
3 Архитектура изделия
Микроконтроллер 1921ВК035 структурно представляет собой мультистадийный
RISC процессор. Ядро полностью реализует наборы команд Thumb и Thumb2.
Поддержка DSP-инструкций и наличие модуля операций с плавающей запятой
существенно ускоряет обработку потоковых данных, что в свою очередь делает
микроконтроллер весьма привлекательным для использования в системах управления и
обработки информации.
Микроконтроллер способен параллельно выполнять четыре операции сложения/
вычитания c
8-разрядными операндами или две операции сложения/вычитания с
16-разрядными операндами. Также реализовано умножение за один цикл, при этом для
16-разрядных чисел возможно параллельное исполнение двух операций. Из особенностей
следует отметить аппаратное умножение 32-разрядных чисел за 1 цикл, а также деление
32-разрядных чисел, занимающее от 2 до 12 циклов.
Блок коммутации микроконтроллера
Все устройства микроконтроллера соединены между собой через блок коммутации.
На рисунке
3.1 приведена схема соединения основных и периферийных блоков
микроконтроллера внутри блока коммутации.
Рисунок 3.1 - Схема соединения блоков внутри блока коммутации
13
4 Система управления тактированием и сбросом
4.1 Общая система тактирования
В контроллере предусмотрена развитая подсистема управления тактовыми
сигналами и сигналами сброса (RCU), см. рисунок 4.1.
Основными тактовыми сигналами, которые используются в схеме являются:
- OSICLK - тактовый сигнал внутреннего RC-генератора;
- OSECLK - внешний тактовый сигнал с выводов XI_OSC и XO_OSC;
- PLLCLK - тактовый сигнал на выходе PLL;
- PLLDIVCLK - тактовый сигнал с выхода PLL прошедший через дополнительный
делитель;
- SYSCLK - системный тактовый сигнал (выбранный блоком SCM на рисунке);
- PCLK - периферийный тактовый сигнал APB шины;
- HCLK - системный тактовый сигнал AHB шины;
- FCLK (так же SYSCLK) - неотключаемый системный тактовый сигнал.
Рисунок 4.1 - Схема синхронизации
4.2 PLL
В качестве опорного сигнала PLL можно выбрать один из источников, выбор
осуществляется полем REFSRC регистра PLLCFG.
Выходная частота PLL определяется согласно формуле
Fout = Fin ×M
×1
(5.1)
N
2OD
Коэффициенты N, M, OD задаются соответствующими полями регистра PLLCFG.
Существуют следующие ограничения параметров:
- Коэффициент деления 1 ≤ N ≤ 63.
- Коэффициент деления 2 ≤ M ≤ 63.
- Входная частота должна находиться в диапазоне 4-64 МГц.
- Значение частоты Fin/N должно быть в диапазоне 4-20 МГц.
- Значение частоты Fin*M/N должно быть в диапазоне 120-200 МГц.
- Значение выходной частоты Fout должно быть в диапазоне 15-200 МГц.
Настройку блока PLL необходимо делать до того, как его тактовый сигнал будет
выбран в качестве рабочей частоты системы или одного из блоков. При правильной
14
установке всех значений и выходе PLL на рабочий режим, будет установлен бит LOCK в
регистре PLLCFG. После установления рабочего режима можно разрешить выход частоты
из блока битом OUTEN. Также есть возможность прохождения сигнала сквозь блок без
изменений (bypass режим), для установления которого можно воспользоваться битом
BYPASS.
Также присутствует внешний делитель частоты, управляемый битами регистра
PLLDIV. Для тактирования различных блоков и модулей контроллера можно выбрать как
сигнал PLLCLK, так и PLLDIVCLK независимо друг от друга.
4.3 Система слежения за тактовыми сигналами
Система слежения осуществляет контроль источников тактовых сигналов и
позволяет обрабатывать исключительные ситуации, связанные с их пропаданием (срыв
генерации PLL, ненадежный контакт с внешним резонатором и т.п.).
Текущий статус тактовых сигналов можно установить, прочитав соответствующие
биты xGOOD и xFAIL регистра SYSCLKSTAT, где x - OSECLK, PLLCLK, PLLDIVCLK.
Бит xGOOD будет установлен, если соответствующий тактовый сигнал стабильно
работает, и будет сброшен при его сбое. Бит xFAIL имеет обратное поведение -
устанавливается при сбое, сбрасывается при нормальной работе тактового сигнала.
Время реакции системы слежения на исчезновение тактового сигнала настраивается
с помощью полей регистра SECPRD, и, по умолчанию, равно 256 тактам OSICLK. Реакция
на любое пропадание тактового сигнала на меньшее время будет отсутствовать.
Минимальная частота, за которой может осуществляться слежение - 20 кГц.
Значение минимально возможного времени реакции вычисляется по формуле
(результата округляется до целого в большую сторону)
SECPRD_MIN = (4×Tref + 6×Tclk) / Tref,
(4.2)
где Tref - величина периода опорной тактовой частоты OSICLK;
Tclk - величина периода контролируемой тактовой частоты;
Например, если необходима максимально быстрая реакция на пропадание частоты
100 МГц на выходе PLL (Tclk = 10 нс) при OSICLK 8 МГц (Tref = 125 нс), то необходимо
в поле PLLCLK регистра SECPRD0, записать значение SECPRD_MIN = 5, вычисленное по
(4.2).
Стоит отметить, что SECPRD_MIN является лишь временем детектирования сбоя,
сам переход в аварийный режим (переключение системной частоты на OSICLK) займет
дополнительно не более 14 тактов OSICLK.
Кроме слежения за каждым из источников тактового сигнала по отдельности,
система отслеживания позволяет контролировать текущий системный тактовый сигнал
SYSCLK.
Включение контроля SYSCLK осуществляется установкой бита SECEN регистра
SYSCLKCFG.
При сбое будет осуществлен аварийный переход системной частоты на OSICLK и
будет выработано немаскируемое прерывание NMI совместно с установкой флага
прерывания SYSFAIL в регистре INTEN (флаг сбрасывается записью единицы).
Текущий статус системного тактового сигнала доступен в бите SYSFAIL регистра
SYSCLKSTAT - при сбое этот бит установится, и будет держаться установленным пока
пользователь вручную не перейдет на любой из доступных стабильных источников,
записав в поле SYSSEL регистра SYSCLKCFG новое значение (при сбое поле сохраняет
старое значение источника системной частоты). В том числе возможен переход и на
OSICLK, несмотря на то, что в аварийном режиме схема уже тактируется этим сигналом -
это позволит сбросить бит SYSFAIL регистра SYSCLKSTAT.
15
Прямой переход из аварийного состояния к тактированию от вызвавшего сбой, но
уже восстановившегося, источника - невозможен. Если это необходимо сделать, то
сначала нужно перейти на один из стабильных источников (например, OSICLK), и лишь
затем начать переход на бывший «сбойным», но восстановившийся источник.
При переходе контроллера в аварийное состояние по тактированию требуется
обязательно перейти на стабильный источник тактирования (бит xGOOD для него будет
установлен), например на OSICLK (SYSSEL = 0). Если аварийный источник возобновил
тактирование, то снова перейти на него можно записав поле SYSSEL регистра
SYSCLKCFG на номер соответствующего источника.
4.4 Сигналы сброса
Сброс может осуществляться как внешним сигналом c вывода RESET, так и
встроенным монитором питания POR (PowerOn Reset). Активный уровень сигнала сброса
- низкий.
Помимо внешнего сброса существуют два внутренних источника сброса - по
запросу процессора и по переполнению сторожевого таймера.
На рисунке 4.2 показана диаграмма срабатывания POR при изменении питания. В
таблице 4.1 указаны динамические и электрические параметры монитора питания во
время сброса.
Рисунок 4.2 - Диаграмма сигнала сброса POR при изменении питания 3,3 В
Таблица 4.1 - Динамические и электрические параметры монитора питания
Наименование параметра,
Обозначение
Миним.
Номин.
Макс.
единица измерения
Отключение схемы сброса, В
Vthrise
1,18
1,25
1,32
Срабатывание схемы сброса, В
Vthfall
1,14
1,20
1,26
Задержка срабатывания, мкс
Tdel
70
110
200
Также в контроллере есть возможность сброса по получению сигнала LOCKUP от
ядра. Данный сигнал возникает в случае невосстановимого системного исключения
(Unrecoverable exception), если контроллер не может из него выйти. Установка бита
LOCKUPEN в регистре SYSRSTCFG разрешит автоматический сброс после получения от
ядра сигнала LOCKUP.
В регистре SYSRSTSTAT содержится набор флагов, по которым можно установить
причину последнего произошедшего сброса. В случае нормальной загрузки после подачи
питания будет установлен флаг POR. Так как сброс вызван срабатыванием схемы POR
(PowerON Reset).
16
4.5 Прерывания
В контроллере есть два прерывания, связанных с работой блока RCU. Первое -
непосредственно RCU Interrupt. Выбрать источники, влияющие на него можно в регистре
INTEN - события появления или пропадания одного из тактовых сигналов, выход PLL в
рабочий режим. Все события сопровождаются флагами в регистре INTSTAT.
Второе прерывание связано с пропаданием текущего системного тактового сигнала
SYSCLK. В случае если была включена система слежения за тактовым сигналом (бит
SECEN регистра SYSCLKCFG) возникнет прерывание, соответствующее вектору
немаскируемого прерывания NMI, и будет установлен соответствующий флаг в регистре
INTSTAT.
4.6 Тактирование и сброс периферийных блоков
Для некоторых периферийных блоков система тактирования предусматривает выбор
независимого тактового источника. У блоков WATCHDOG, TRACE, UART, SPI, ADC и
блока формирования внешнего сигнала CLKOUT есть соответствующие регистры, в
которых можно включать тактирование, выбирать его источник, и настраивать
отключаемый делитель. Источник тактирования выбирается независимо для каждого из
блоков с помощью его собственного селектора, показанного на рисунке 4.3.
Рисунок 4.3 - Схема селектора дополнительного синхросигнал блока
Для остальных блоков, а именно CAP, TMR, I2C, QEP, PWM, и для блоков,
относящихся к AHB периферии (GPIO, CAN), тактирование подается установкой
соответствующего бита в CLKCFG, см. таблицу 4.2.
Таблица 4.2 - Тактовые сигналы периферийных блоков.
Периферийный блок
Тактовый сигнал
Делитель
Управляющий регистр
ADC
ACLK
1-63
ADCCFG
SPI
SPICLK
1-63
SPICFG
UART
UARTCLK
1-63
UARTCFG
WATCHDOG
WDTCLK
1-63
WDTCFG
CLOCKOUT
CLKOUT
1-7
CLKOUTCFG
TRACE
TRACECLK
1-63
TRACECFG
TIMER
PCLK
-
PCLKCFG, PRSTCFG
PWM
PCLK
-
PCLKCFG, PRSTCFG
I2C
PCLK
-
PCLKCFG, PRSTCFG
QEP
PCLK
-
PCLKCFG, PRSTCFG
CAP
PCLK
-
PCLKCFG, PRSTCFG
GPIO
HCLK
-
HCLKCFG, HRSTCFG
CAN
HCLK
-
HCLKCFG, HRSTCFG
17
По умолчанию, на всех периферийных блоках отключено тактирование, и все они
находятся в состоянии сброса. Для начала работы нужно подать тактовый сигнал, а также
вывести блок из состояния сброса, осуществив запись единиц в соответствующие биты
регистров RSTCFG.
18
5 Система управления питанием
В контроллере предусмотрены несколько режимов функционирования для
уменьшения потребляемой энергии в тех задачах, где ядро не должно постоянно работать,
например, во время ожидания прихода внешнего события. К ним относятся:
- режим Sleep (ядро остановлено, периферия работает);
- режим Deepsleep (ядро остановлено, периферия переведена в режим Powerdown).
Контроль режимов энергопотребления осуществляется с помощью системы
управления питанием (PMU).
5.1 Режим Sleep
Вход в режим Sleep производится при выполнении инструкции WFI (Wait For
Interrupt) или WFE (Wait For Event) при сброшенном бите SLEEPDEEP регистра SCR
блока SCB ядра. В этом режиме прекращается тактирование ядра, но вся периферия
продолжает полностью функционировать.
В зависимости от состояния бита SLEEPONEXIT (регистр SCR блока SCB ядра)
возможны 2 режима входа в этот режим:
- SLEEPONEXIT=0 - вход в режим Sleep производится как только была выполнена
инструкция WFI или WFE, при выходе продолжает исполняться программа, прерванная
одной из инструкций выше;
- SLEEPONEXIT=1 - вход в режим Sleep осуществляется не только при выполнении
соответствующих инструкций, но и каждый раз при выходе из последнего активного
обработчика прерываний (ядро просыпается только для обработки прерываний).
Выход из режима Sleep производится различными путями, в зависимости от того,
какая инструкция была использована для входа.
Если для входа в режим Sleep была использована инструкция WFI, то приход любого
разрешенного прерывания в NVIC вызовет выход из режима, одновременно с переходом в
соответствующий обработчик.
Если была использована инструкция WFE, то выход произойдет либо по
разрешенному прерыванию NVIC (аналогично WFI) либо по событию, которое может
быть сгенерировано несколькими путями.
Если установлен бит SEVONPEND регистра SCR блока SCB ядра, то событием
будет являться приход любого запрещенного прерывания в NVIC (разрешенного лишь в
периферийном модуле, а не в NVIC). При этом, по выходу необходимо будет сбрасывать
соответствующие флаги прерывания как в периферийном модуле, так и в регистрах NVIC
(регистры ICPR).
Также событием для выхода из режима Sleep является сигнал RXEV, который может
быть сгенерирован в GPIOA или GPIOB. Дополнительно сигнал RXEV от необходимого
порта должен быть разрешен установкой бита GPIOAEV или GPIOBEV в регистре
RXEVEN блока PMU. В этом случае выход из Sleep будет произведен наиболее быстро,
так как время на вход/выход в прерывание тратиться не будет.
5.2 Режим Deepsleep
В этом режиме тактирование ядра останавливается, а также происходит переход в
режим Powerdown следующих периферийных блоков (по умолчанию): MFLASH, PLL,
EXTOSC.
Вход в режим Deepsleep производится при выполнении инструкции WFI (Wait For
Interrupt) или WFE (Wait For Event) при установленном бите SLEEPDEEP регистра SCR
блока SCB ядра.
19
Если для входа в режим Deepsleep была использована инструкция WFI, то приход
любого разрешенного прерывания в NVIC вызовет выход из режима, одновременно с
переходом в соответствующий обработчик.
Если для входа в режим Deepsleep была использована инструкция WFE, то приход
любого разрешенного события RXEV от портов ввода-вывода вызовет выход из режима.
Перед тем как осуществить вход в этот режим необходимо провести некоторые
подготовительные операции.
Необходимо включить PMU, установив бит EN в регистре CFG блока PMU. В
противном случае переход в Deepsleep будет невозможен.
С помощью сброса битов PLLPD, MFLASHPD, EXTOSCPD в регистре PDEN блока
PMU можно отключить перевод соответствующих блоков в режим Powerdown при входе в
Deepsleep - они продолжат свое функционирование. Например, если оставить активным
внешний осциллятор, периферия, использующая его в качестве тактового сигнала
продолжит функционировать.
Необходимо настроить значение длительности выхода из Deepsleep - выход
периферийных блоков из Powerdown требует некоторого времени (для каждого блока
разное), поэтому в регистр PUDEL блока PMU должно быть внесено значение большее
либо равное самой большой величине задержки среди блоков, для которых активен
Powerdown. Значение вносится в тактах тактового сигнала OSICLK. В таблице
5.1
представлены типовые величины задержек. По умолчанию, PUDEL содержит значение
1680, т.к. возможность активации Powerdown включена для PLL.
Таблица 5.1 - Настройка времени выхода из Powerdown для некоторых блоков
Время выхода из
Значение для PUDEL, такты
Периферийный блок
Powerdown, мкс
OSICLK (OSICLK=8МГц)
PLL
210
1680
MFLASH
15
120
EXTOSC
0
0
20
6 Организация памяти
Память микроконтроллера имеет предопределенное
32-разрядное адресное
пространство с областями: программ, данных, периферии и внутренних ресурсов, жестко
соединенных с процессором. Адресное пространство разбито на четыре основных области
(см. таблицу 6.1).
Таблица 6.1 - Общая организация памяти микроконтроллера
Адресное пространство
Описание
E0000000h - FFFFFFFFh
Системная область
40000000h - 400FFFFFh
Регистры управления периферийными блоками
20000000h - 20003FFFh
Внутреннее ОЗУ 16 Кбайт
Флеш-память
00000000h - 0000FFFFh
(Шина выборки инструкций I-Code + шина данных D-Code)
Системная область делится на две части. Первая часть, объемом 1 Мбайт, занимает
диапазон адресов E0000000h - E007FFFFh и зарезервирована для «личной» периферийной
шины PPB (Private Peripheral Bus). PPB шина используется для выборки/записи данных и
отладочного доступа
- для периферии. Эта область рассматривается как строго
упорядоченная память. Часть ее адресов (E000E000h - E000EFFFh) занимает пространство
управления системы SCS, в котором находятся регистры блока управления системой SCB,
контроллера прерываний NVIC, системного таймера SysTick, средств отладки и другие.
Байты регистров SCS всегда располагаются в порядке «младший - старший» независимо
от того, какой формат представления данных принят для остальной памяти. Доступ к
большинству регистров возможен только полными двойными словами (32 бита), все
исключения из этого правила оговариваются специально. Попытка кода обратиться к
области PPB обычно вызывает прерывание по ошибке шины; исключениями являются
возможность доступа к регистру STIR, если это разрешено соответствующим битом
регистра CCR, и доступность отладочных регистров. Вторая часть является памятью
устройств, занимает область E0100000h - FFFFFFFFh и является системным регионом
ядра.
Регистры периферийных блоков микроконтроллера доступны в адресном
пространстве 40000000h - 4000FFFFh. Карта размещения блоков микроконтроллера в
памяти представлена в таблице 6.2.
Таблица 6.2 - Регистры периферийных блоков
Адресное пространство
Название блока
Описание
40053000h - 40053FFFh
ECAP2
Блок захвата 2
40052000h - 40052FFFh
ECAP1
Блок захвата 1
40051000h - 40051FFFh
ECAP0
Блок захвата 0
40050000h - 40050FFFh
I2C
Последовательный интерфейс
I2C
4004F000h - 4004FFFFh
QEP
Квадратурный декодер
4004E000h - 4004EFFFh
PWM2
Блок ШИМ 2
4004D000h - 4004DFFFh
PWM1
Блок ШИМ 1
4004C000h - 4004CFFFh
PWM0
Блок ШИМ 0
4004B000h - 4004BFFFh
TMR3
Блок таймера 3
4004A000h - 4004AFFFh
TMR2
Блок таймера 2
21
Продолжение таблицы 6.2
40049000h - 40049FFFh
TMR1
Блок таймера 1
40048000h - 40048FFFh
TMR0
Блок таймера 0
40047000h - 40047FFFh
SPI
Последовательный интерфейс
SPI
40046000h - 40046FFFh
UART1
Последовательный
приемопередатчик UART 1
40045000h - 40045FFFh
UART0
Последовательный
приемопередатчик UART 0
40044000h - 40044FFFh
DMA
Контроллер прямого доступа к
памяти
40043000h - 40043FFFh
WDT
Сторожевой таймер
40042000h - 40042FFFh
PMU
Блок управления питанием
40041000h - 40041FFFh
RCU
Блок управления
тактированием и сбросом
40040000h - 40040FFFh
SIU
Блок системных функций
40030000h - 4003FFFFh
MFLASH
Флеш-память
40020000h - 4002FFFFh
CAN
Контроллер CAN
40011000h - 40011FFFh
GPIOB
Порт B
40010000h - 40010FFFh
GPIOA
Порт A
40000000h - 4000FFFFh
ADC
Блок АЦП
22
7 Контроллер флеш-памяти
7.1 Основная флеш-память
Основная флеш-память может использоваться для хранения программ и данных
пользователя. Размер основной флеш-памяти составляет 64 Кбайт (64 страницы по 1
Кбайт) и в адрессном пространстве она занимает диапазон с 0000h по FFFFh.
Чтение флеш-памяти осуществляется через две шины AHB - I-code (команды) и
D-code (данные). Чтение D-code шины имеет приоритет. На обеих шинах при попытке
записи в любую область, чтении из несуществующей области, чтении во время, когда
флеш занята (стирание, запись), транзакция проходит успешно с неопределенными
данными на выходе.
Память доступна для чтения, записи, полного и постраничного стирания через
регистры данных DATA1 и DATA0, адреса ADDR, команд CMD, статуса STAT блока
MFLASH. Запись необходимо производить в предварительно очищенную ячейку памяти.
Стирание памяти осуществляется полностью или постранично.
Минимальное время чтения данных из флэш-памяти составляет около 30 нс.
Поэтому, исходя из выбраной рабочей частоты, следует задать количество
дополнительных тактов ожидания, необходимое для стабильного чтения из флэш-памяти.
Данный параметр заносится в поле LAT регистра CTRL
Таблица 7.1 - Значения параметра LAT в зависимости от частоты
Тактовая частота,
Количество дополнительных тактов ожидания при чтении
не более, МГц
флэш-памяти
120
3
90
2
60
1
30
0
Примечание - Значение параметра после сброса равно 1
Операция предвыборки
При запросе данных на шине по адресу, по которому не осуществлялась
предвыборка, выполняются следующие действия.
1 Сигнал готовности на шине устанавливается в ноль и задерживает транзакцию.
2 По запрашиваемому адресу считываются два двойных слова (64 бит) данных из
флеш-памяти. Далее эти данные записываются во внутренний первый буфер.
3 Требуемое слово передается на шину AHB, и сигнал готовности устанавливается в
единицу.
4 Сразу после установки сигнала готовности, из флеш-памяти считываются два
двойных слова данных по следующему адресу. Данные сохраняются во втором буфере.
Если во время считывания этих данных появляются запросы по адресам, сохраненным в
первом буфере, ответ возникает мгновенно, если по другим адресам, то готовность на
шине устанавливается в ноль и происходит ожидание завершения считывания во второй
буфер и далее возврат к действию 2.
5 Если приходят запросы по адресам, сохраненным в первом буфере, ответ
возникает мгновенно, если по адресам находящимся во втором буфере, ответ также
возникает мгновенно. Далее переписывается первый буфер значением второго и
считывается следующий адрес из флеш-памяти. Если приходят запросы по адресам не из
первого и второго буферов, то возврат к действию 1.
23
Операция кэширования
Основная флэш-память дополнена блоками кэш-памяти по 1 Кб на каждую из шин
I-code и D-code. Доступ к этим блокам осуществляется за 1 такт системной частоты. При
первом обращении к адресу, его данные параллельно заносятся и в кэш-память и
сохраняются там. Если в дальнейшем произойдет повторное обращение к тому же адресу,
данные будут прочитаны уже из кэша, обращения к медленной флэш-памяти не будет. Но
данные в кэше, которые были запрошены давно, могут быть вытесненны более свежими
данными, обращение к которым было позже. Таким образом, кэшированная информация
постоянно обновляется, но участки программного кода, вызываемые чаще всего, с
большей вероятностью окажутся в кэше. За счет этого достигается повышенная скорость
выполнения такого кода.
Предвыборка и кэш на каждую из шин I-code и D-code включается отдельно в
регистре CTRL. Перед включением кэша необходимо сбросить его, установив
соответствующий бит FLUSH регистра CTRL. Во время процедуры сброса бит BUSY
соответствующего регистра статуса кэша будет держаться в
1. После успешного
завершения сброса будет сброшен и данный бит, после чего можно продолжать
выполнение основной программы.
7.2 Загрузочная флеш-память
Загрузочная флеш-память (NVR область) может использоваться для хранения
пользовательской программы-загрузчика, которая посредством одного из имеющихся
интерфейсов получает данные для прошивки основной памяти. Размер загрузочной флеш-
памяти составляет 4 Кбайт (4 страницы по 1 Кбайт каждая). Но для программы-загрузчика
доступно только первые
3 Кбайта. Верхний килобайт отведен под хранение
пользовательских данных, а в его первом байте (абсолютный адрес C00h) располагается
конфигурационное слово CFGWORD, содержащее параметры загрузки и защиты
контроллера. Описание битов CFGWORD представлено в таблице 7.2.
Таблица 7.2 - Конфигурационное слово CFGWORD
CFGWORD
+ С00h (смещение относительно начального адреса NVR области)
Поле
Биты
Описание
BMODEDIS
4
Бит источника загрузки
0
Загрузка из NVR области
1
Загрузка из основной флеш-памяти (по умолчанию)
FLASHWE
3
Бит включения защиты основной флеш-памяти
0
Запрет записи и стирания основного блока флеш-памяти
1
Защита выключена (по умолчанию)
NVRWE
2
Бит включения защиты NVR области флеш-памяти
0
Запрет записи и стирания NVR блока флеш-памяти
1
Защита выключена (по умолчанию)
DEBUGEN
1
Бит разрешения работы системы отладки ядра
0
Откладка отключена
1
Откладка включена (по умолчанию)
JTAGEN
0
Бит разрешения работы пинов JTAG/SWD
0
Работа запрещена
1
Работа разрешена (по умолчанию)
7-5
Зарезервировано
24
По умолчанию, после стирания CFGWORD включена загрузка из основной памяти.
Чтобы использовать загрузчик, необходимо сбросить в нем бит BMODEDIS. Тогда при
загрузке произойдет подмена первых 4 Кбайт основной флэш на область загрузочной
флэш. Т.е при обращении по адресам 00000000h-00000FFFh будут прочитаны данные из
загрузочной флэш, а выше 00001000h - из основной флэш (см. рисунок 7.1).
Рисунок 7.1 - Подмена адресов загрузочной и основной флэш
При этом, обе области полностью доступны для чтения, записи, стирания через
регистровый интерфейс MFLASH.
Есть возможность после отработки программы-загрузчика сразу перезапустить
контроллер с области основной флэш. Для этого необходимо установить бит BMDIS
регистра BDIS блока MFLASH и подать команду программной перезагрузки контроллера
(установить бит SYSRESETREQ регистра AIRCR ядра). Устройство перезагрузится уже с
основной флэш, без подмены адресного пространства. Данная комбинация действий будет
работать только до внешней сброса или сброса по питанию контроллера. После внешней
перезагрузки при сброшеном бите BMODEDIS загрузка опять начнется с загрузочной
флэш-памяти. Чтобы отключить полностью старт с загрузочной флэш, необходимо
вернуть бит BMODEDIS в 1. Это возможно выполнив стирание соответствующей
страницы, всей загрузочной флэш или сервисное стирание всего контроллера.
7.3 Сервисный сброс всей флеш-памяти
1. Во время сброса микроконтроллера анализируется состояние вывода SERVEN.
Если вывод находится в состоянии логической единицы (подтянут к 3,3 В), то загрузочная
и основная флеш-памяти переводятся в режим, в котором чтение запрещено (при чтении
возвращаются нули).
2. Далее по отладочному интерфейсу (SWD или JTAG) должна быть подана команда
записи значения
00000001h в регистр SERVCTL блока SIU, после чего будет
активировано полное стирание. По завершению процесса стирания в этом же регистре
выставится флаг DONE
Примечание - Если полное стирание не требуется, во время сброса на выводе
SERVEN должен удерживаться логический ноль.
25
8 Контроллер прямого доступа к памяти
Основные свойства и отличительные особенности:
- 16 канала DMA;
- каждый канал DMA имеет свои сигналы управления передачей данных и
программируемый уровень приоритета;
- каждый уровень приоритета обрабатывается исходя из уровня приоритета,
определяемого номером канала DMA;
- поддержка различного типа передачи данных в пределах внутреннего ОЗУ:
память - память, память - периферия, периферия - память;
- поддержка различных типов циклов DMA;
- поддержка передачи данных различной разрядности;
- каждому каналу DMA доступна первичная и альтернативная структура
управляющих данных канала;
- все данные канала хранятся во внутреннем ОЗУ в структуре управляющих данных
канала;
- разрядность данных приемника равна разрядности данных передатчика;
- количество передач в одном цикле DMA может программироваться от 1 до 1024;
- инкремент адреса передачи может быть больше, чем разрядность данных;
- возможность начать передачи по сигналам от блоков: UART, SPI, ADC, TMR,
PWM, QEP.
Аппаратные источники запросов каналов DMA указаны в таблице 8.1.
Таблица 8.1 - Аппаратные источники запросов каналов DMA
Номер
Аппаратный источник
Описание
канала
запросов
0
UART0_TX
Канал DMA от UART0 по передаче
1
UART1_TX
Канал DMA от UART1 по передаче
2
UART0_RX
Канал DMA от UART0 по приему
3
UART1_RX
Канал DMA от UART1 по приему
4
ADC_SEQ0
Канал DMA от секвенсора 0 блока АЦП
5
ADC_SEQ1
Канал DMA от секвенсора 1 блока АЦП
6
SPI_TX
Канал DMA от SPI по передаче
7
SPI_RX
Канал DMA от SPI по приему
В соответсвии с регистром
Каналы DMA с конфигурируемыми источниками
8-15
DMAMUX блока SIU
запросов
26
8.1 Программное управление модулем DMA
Контроллер DMA выполняет передачи 8-, 16- и 32-разрядных данных. Разрядность
данных источника и приемника должны быть одинаковыми.
Контроллер DMA позволяет управлять инкрементом адреса при чтении данных из
источника и при записи данных в приемник. Инкремент адреса зависит от разрядности
передаваемых данных: минимальная величина инкремента адреса всегда соответствует
разрядности передаваемых данных; максимальная величина - одно слово. Контроллер
DMA может быть настроен на работу с фиксированным адресом (например, для работы c
FIFO).
Контроллер DMA имеет возможность обслуживать сигналы запроса на одиночный
обмен SREQ и запроса на пакетный обмен BREQ блоков UART, SPI. Блок ADC
генерирует только запросы на пакетный обмен BREQ.
Каждому каналу DMA соответствуют две структуры управляющих данных:
первичная и альтернативная. В ОЗУ должна быть отведена область для хранения этих
структур.
На рисунке 8.1 показана область памяти, необходимая контроллеру для структур
управляющих данных каналов, при использовании всех 16 каналов и опциональной
альтернативной структуры данных.
Рисунок 8.1 - Карта памяти для 16 каналов DMA, включая
альтернативную структуру
Объем структуры, показанной на рисунке 8.1, составляет 512 байт. Контроллер
использует младшие разряды адреса для доступа ко всем элементам структуры
управляющих данных, и поэтому разрешенные значения базового адреса для первичной
структуры управляющих данных XXXXX000h, XXXXX200h, XXXXX400h и т.д..
Базовый адрес для первичной структуры управляющих данных возможно установить
путем записи соответствующего значения в регистр BASEPTR.
В таблице 8.2 перечислены разряды адреса, обеспечивающие контроллеру доступ к
различным элементам структуры управляющих данных.
27
Таблица
8.2
- Разряды адреса, используемые для доступа к управляющим данным
16 каналов
Разряды адреса
Обозначение
Биты
Действие
S
9
Выбор структуры управляющих данных
0
Первичная
1
Альтернативная
CHNL
8-4
Выбор канала
Допустимые значения 0h-18h
EL
3-0
Выбор управляющего элемента
0h
Указатель конца данных источника
4h
Указатель конца данных приемника
8h
Конфигурация структуры управляющих данных
Ch
Не используется. Контроллер не имеет доступа к этому адресу
Не обязательно вычислять базовый адрес альтернативной структуры управляющих
данных, он вычисляется автоматически и помещается в регистр ALTBASEPTR.
Любая из структур управляющих данных каждого канала состоит из двух указателей
адреса (приемника и источника данных) и ячейки управления канала.
Управление канала (CHANNEL_CFG)
32-разрядная ячейка памяти, содержащая конфигурационную информацию для
осуществления передач DMA (на рисунке 8.1 отмечена как «Управление»). В начале
цикла DMA или начале 2R передачи контроллер DMA считывает значение этой ячейки.
После выполнения 2R или N передач он сохраняет обновленное ее значение обратно в
память. Структура регистра CHANNEL_CFG приведена в таблице 8.3.
Таблица 8.3 - Структура управляющих данных канала
CHANNEL_CFG
28
Продолжение таблицы 8.3
Поле
Биты
Описание
dst_inc
31-30
Шаг инкремента адреса приемника.
Код, записанный в поле dst_inc, задает шаг, который в свою
очередь зависит от разрядности данных источника
Разрядность данных источника
Код
Байт
Слово (16 бит)
Двойное слово (32 бита)
00
Шаг - байт
Зарезервировано
Зарезервировано
01
Шаг - слово (16 бит)
Зарезервировано
10
Шаг - двойное слово (32 бита)
11
Нет инкремента. Адрес остается равным значению ячейки
DST_DATA_END_PTR
dst_size
29-28
Разрядность данных приемника.
Значение этого поля должно быть равно значению поля src_size
Примечание - Если контроллер обнаруживает неравные
значения этих полей, он при ближайшем обновлении поля N-1
устанавливает значение поля dst_size, равное src_size
src_inc
27-26
Шаг инкремента адреса источника.
Код, записанный в поле, src_inc задает шаг, который в свою
очередь зависит от разрядности данных источника
Разрядность данных источника
Код
Байт
Слово (16 бит)
Двойное слово (32 бита)
00
Шаг - байт
Зарезервировано
Зарезервировано
01
Шаг - слово (16 бит)
Зарезервировано
10
Шаг - двойное слово (32 бита)
11
Нет инкремента. Адрес остается равным значению ячейки
SRC_DATA_END_PTR
src_size
25-24
Разрядность данных источника
00
Байт
01
Слово (16 бит)
10
Двойное слово (32 бита)
11
Зарезервировано. Не использовать!
dst_prot_ctrl
23-21
Задает параметры защиты шины AHB-Lite при записи данных в
приемник
Биты поля dst_prot_ctrl
23
22
21
0
Доступ не
Доступ не
Доступ
кэшируется
буферизуется
непривилегированный
1
Доступ
Доступ
Доступ
кэшируется
буферизуется
привилегированный
src_prot_ctrl
20-18
Задает параметры защиты шины AHB-Lite при чтении данных из
источника
Биты поля src_prot_ctrl
20
19
18
0
Доступ не
Доступ не
Доступ
кэшируется
буферизуется
непривилегированный
1
Доступ
Доступ
Доступ
кэшируется
буферизуется
привилегированный
29
Продолжение таблицы 8.3
Поле
Биты
Описание
R_power
17-14
Параметр R.
Задает количество передач канала DMA до выполнения
контроллером процедуры арбитража (переарбитрации).
Количество передач равно 2R
Код
Количество передач
0h
1 (арбитраж производится после каждой передачи DMA)
1h
2
2h
4
3h
8
4h
16
5h
32
6h
64
7h
128
8h
256
9h
512
Ah - Fh
1024 (арбитраж не производится, так как максимальное
количество передач DMA равно 1024)
Примечание - Необходимо с осторожностью устанавливать
большие значения R для низкоприоритетных каналов, так как это
может привести к невозможности обслуживать запросы по
высокоприоритетным каналам
N-1
13-4
Перед выполнением цикла DMA эти разряды указывают общее
количество передач DMA, из которых состоит цикл
Код
Количество передач
000h
1
001h
2
3FFh
1024
Примечание - Контроллер обновит это поле перед тем, как
произвести процесс арбитража. Это позволяет контроллеру хранить
количество оставшихся передач DMA до завершения всего цикла
DMA
next_use_bur
3
Контролирует установку соответствующий каналу бита в регистре
st
USEBURSTSET, если контроллер работает в периферийном
режиме «разборка-сборка» и завершает цикл DMA, используя
альтернативные управляющие данные
Примечание
- Перед завершением цикла DMA,
использующего альтернативные управляющие данные, контроллер
сбрасывает соответствующий каналу бит в регистре
USEBURSTSET, если количество оставшихся передач DMA
меньше, чем 2R. Программирование бита next_use_burst определяет,
будет ли контроллер дополнительно переопределять состояние
бита в регистре USEBURSTSET.
Если контроллер выполняет цикл DMA в периферийном режиме
«разборка-сборка», то после окончания цикла, использующего
альтернативные управляющие данные, дальнейшие действия будут
зависеть от состояния бита next_use_burst
30
Окончание таблицы 8.3
Поле
Биты
Описание
next_use_bur
3
0
Контроллер не изменяет значение соответствующего каналу
st
бита в регистре USEBURSTSET.
Если бит CHi в USEBURSTSET сброшен, то при выполнении
циклов DMA c использованием альтернативных управляющих
данных контроллер отвечает, как на запросы BREQ, так и
запросы SREQ от периферии
1
Контроллер изменяет значение соответствующего каналу бита
в регистре USEBURSTSET, а именно - устанавливает бит.
Поэтому для оставшихся циклов DMA с использованием
альтернативных управляющих данных контроллер реагирует
только на запросы BREQ от периферии
cycle_ctrl
2-0
Поле задания типа цикла DMA
000b
Недействительный.
Структура управляющих данных канала в запрещенном
состоянии
001b
Основной
010b
Авто-запрос
011b
«Пинг-понг»
100b
Работа с памятью в режиме «разборка-сборка» с
использованием первичных управляющих данных канала
101b
Работа с памятью в режиме «разборка-сборка» с
использованием альтернативных управляющих данных
канала
110b
Работа с периферией в режиме «разборка-сборка» с
использованием первичных управляющих данных канала
111b
Работа с периферией в режиме «разборка-сборка» с
использованием альтернативных управляющих данных
канала
Примечание - После завершения всего цикла передач DMA
контроллер устанавливает значение поля cycle_ctrl в 000b, переводя
тем самым тип цикла в «недействительный». Это позволяет
избежать повторения выполненной передачи DMA.
Указатель конца данных источника (SRC_DATA_END_PTR) и указатель конца
данных приемника (DST_DATA_END_PTR)
32-разрядные ячейки памяти, которые содержат адрес месторасположения конца
данных источника и приемника, соответственно. Перед тем, как контроллер выполнит
передачу DMA, необходимо определить их значения. Контроллер считывает значения
этих областей перед началом 2R передач DMA.
Для вычисления адреса источника передачи DMA контроллер выполняет сдвиг
влево значения N-1 на количество разрядов, соответствующее полю src_inc, и затем
вычитает получившееся значение от значения SRC_DATA_END_PTR.
Подобным образом вычисляется начальный адрес приемника передачи и контроллер
DMA выполняет сдвиг влево значения N-1 на количество разрядов, соответствующее
полю dst_inc, и затем вычитает получившееся значение от значения
DST_DATA_END_PTR.
31
8.2 Правила обмена данными
Следует избегать адресации к зарезервированным или неиспользованным адресам,
так как это может привести к непредсказуемым результатам.
Необходимо заполнять неиспользуемые или зарезервированные разряды регистров
нулями при записи и игнорировать значения таких разрядов при считывании.
Системный сброс или сброс по установке питания сбрасывает все регистры в
состояние 00000000h, если не указано иное.
Контроллер DMA использует правила обмена данными (см. таблицу 8.4), при
соблюдении следующих условий:
- канал DMA включен (установлены, соответствующие каналу, биты в регистре
ENSET и MASTEREN в регистре CFG);
- запросы канала не замаскированы (сброшен, соответствующий каналу, бит в
регистре REQMASKSET).
Таблица 8.4 - Перечень правил, при которых передача по каналам разрешена и запросы
не маскируются (i - номер канала)
Номер
Описание
правила
1
Если канал не активен (передача не идет в данный момент), то установка бита
CHi в регистре SWREQ или запрос от соответствующей периферии,
инициирует передачу по каналу i
2
Одновременно активен может быть только один канал
3
Если запрос от периферии происходит в момент, когда канал активен, то
контроллер обслужит этот запрос после завершения текущей передачи
4
Если приходит сразу несколько запросов от периферии для одного канала в
момент, когда канал активен, то контроллер обслужит только первый запрос
после завершения текущей передачи
5
Для циклов DMA, отличных по типу от периферийного режима «разборка-
сборка», по окончании 2R передач контроллер сбрасывает бит CHi в регистре
USEBURSTSET, если количество оставшихся передач меньше, чем 2R,
позволяя периферии завершить передачи, используя как SREQ запросы, так и
BREQ.
В периферийном режиме «разборка/сборка» контроллер сбрасывает бит CHi в
регистре USEBURSTSET только, если количество оставшихся передач с
использованием альтернативной структуры управляющих данных меньше, чем
2R
6
Контроллер игнорирует запрос SREQ, если бит CHi регистра WAITONREQ
сброшен или установлен бит CHi регистра USEBURSTSET
7
Необходимо
с
осторожностью
устанавливать
разряды
регистра
USEBURSTSET. Если значение, указанное в регистре N-1 меньше, чем
значение 2R, то контроллер не очистит разряды USEBURSTSET и поэтому
одиночные запросы SREQ будут запрещены. Если программные запросы через
регистр SWREQ не генерируются, и периферия не осуществляет запросов на
пакетную обработку BREQ, то контроллер никогда не выполнит необходимых
передач
32
Окончание таблицы 8.4
Номер
Описание
правила
8
Для типов циклов DMA, отличных от периферийного режима «разборка-
сборка», если придет запрос SREQ, то контроллер выполнит одну передачу.
В периферийном режиме «Исполнение с изменением конфигурации», если
придет запрос SREQ, контроллер выполняет 2R передач с использованием
первичной структуры управляющих данных. Затем без осуществления
арбитража выполняет одну передачу, используя альтернативную структуру
управляющих данных
9
Для типов циклов DMA, отличных от периферийного режима «разборка-
сборка», если одновременно пришли запросы SREQ и BREQ, то приоритет
предоставляется BREQ, и контроллер выполняет 2R DMA передач (или число
передач, указанное в поле N-1).
В периферийном режиме «разборка-сборка», если одновременно пришли
запросы SREQ и BREQ, то приоритет также предоставляется BREQ, и
контроллер выполняет 2R передач с использованием первичной структуры
управляющих данных. Затем без осуществления арбитража выполняет 2R
передач (или число передач, указанное в поле N-1), используя альтернативную
структуру управляющих данных
10
В периферийном режиме «разборка-сборка», если бит next_use_burst в
CHANNEL_CFG установлен, то контроллер устанавливает соответствующий
каналу бит в регистре USEBURSTSET после окончания цикла DMA,
использующего альтернативные управляющие данные
11
Когда установлен бит CHi регистра REQMASKSET, контроллер игнорирует
запросы SREQ и BREQ
При отключении канала (бит CHi регистра ENSET сброшен) контроллер DMA
осуществляет передачи согласно правилам, представленным в таблице 8.5.
Таблица 8.5 - Перечень правил осуществления передач для запрещенных каналов
Номер
Описание
правила
1
Если приходит запрос на пакетную обработку BREQ от периферии, то
происходит вызов прерывания канала DMA (если было включено). Это
позволяет сигнализировать о запросе, даже если канал выключен
2
Если приходит запрос на одиночную передачу SREQ от периферии, то
происходит вызов прерывания канала DMA (если было включено) при условии,
что бит CHi регистра WAITONREQ установлен, а бит CHi регистра
USEBURSTSET сброшен. Это позволяет сигнализировать о запросе, даже если
канал выключен
8.3 Правила арбитража
Контроллер имеет возможность настройки момента арбитража при передачах DMA.
Эта возможность позволяет уменьшить время отклика при обслуживании каналов с
высоким приоритетом.
Контроллер имеет настройки, которые определяют количество передач по шине
AHB-Lite до повторения арбитража (переарбитрации). Это значение задается параметром
R (поле R_power в регистре CHANNEL_CFG структуры управляющих данных канала).
Количество транзакций одного канала до переарбитрации при этом равно 2R. Например,
если R = 4, то арбитраж будет проводиться через каждые 16 передач DMA.
33
Необходимо с осторожностью устанавливать большие значения R для
низкоприоритетных каналов, так как это может привести к невозможности обслуживать
запросы по высокоприоритетным каналам.
При N > 2R (N - номер передачи) и если результат деления 2R на N не целое число,
контроллер всегда выполняет последовательность из 2R передач до тех пор, пока не станет
верным N < 2R. Контроллер выполняет оставшиеся N передач в конце цикла DMA.
Приоритет
При проведении арбитража определяется канал для обслуживания в следующем
цикле DMA. На выбор следующего канала влияют:
- номер канала;
- уровень приоритета, присвоенного каналу.
Каждому каналу может быть присвоен уровень приоритета по умолчанию или
высокий. Изменение уровня приоритета осуществляется установкой соответствующего
бита CHi (i - номер канала) в регистрах PRIORITYSET и PRIORITYCLR. Канал 0 имеет
наивысший уровень приоритета.
Порядок каналов по уменьшению уровня приоритета представлен в таблице 8.6.
После окончания цикла DMA контроллер выбирает следующий для обслуживания
канал из всех включенных каналов DMA. Рисунок 8.2 иллюстрирует процесс выбора
следующего канала для обслуживания.
Рисунок 8.2 - Алгоритм выбора (полинга) следующего канала для обслуживания
34
Таблица 8.6 - Распределение приоритетов
Номер
Состояние бита CHi
Порядок
канала
в регистре
Уровень приоритета
изменения уровня
CHi
PRIORITYSET
приоритета
0
1
Высокий
Наивысший
1
1
Высокий
2
1
Высокий
3
1
Высокий
14
1
Высокий
15
1
Высокий
0
0
По умолчанию
1
0
По умолчанию
2
0
По умолчанию
3
0
По умолчанию
14
0
По умолчанию
15
0
По умолчанию
Низший
8.4 Типы циклов
Для всех типов циклов DMA повторный арбитраж происходит после 2R передач
DMA. Если установить длинный период арбитража на низкоприоритетном канале, то это
заблокирует все запросы на обработку от других каналов до тех пор, пока не будут
выполнены 2R передач DMA по данному каналу. Поэтому, устанавливая значение R,
необходимо учитывать, что это может привести к повышенному времени отклика на
запрос на обработку от высокоприоритетных каналов.
Поддерживаются следующие типы циклов DMA:
- недействительный (структура управляющих данных канала в запрещенном
состоянии);
- основной;
- авто-запрос;
- «пинг-понг»;
- работа с памятью в режиме «разборка-сборка» (scatter-gather);
- работа с периферией в режиме «разборка-сборка».
Задание типа цикла DMA осуществляется программированием поля cycle_ctrl
регистра CHANNEL_CFG структуры управляющих данных канала.
Недействительный цикл
После окончания цикла DMA контроллер устанавливает тип цикла в значение
«недействительный» для предотвращения повтора выполненного цикла DMA.
Основной цикл
В данном режиме контроллер работает либо с первичными, либо с альтернативными
управляющими данными канала, совершая по 2R передач по каждому запросу.
Перед началом работы необходимо включить контроллер DMA и разрешить работу
канала: установить соответствующий каналу бит в регистре ENSET и бит MASTEREN в
регистре CFG, а также проверить, что запросы канала не замаскированы (сброшен
соответствующий каналу бит в регистре REQMASKSET).
35
После того, как разрешена работа канала, цикл DMA выглядит следующим образом:
1 Контроллер ожидает получения запроса (программного либо от периферии) на
обработку. Если запрос получен, то контроллер переходит к шагу 2.
2 Контроллер выполняет 2R передач. Если число оставшихся передач 0, контроллер
переходит к шагу 4, иначе выполняется шаг 3.
3 Происходит осуществление арбитража: если высокоприоритетный канал выдает
запрос на обработку, то контроллер начинает обслуживание этого канала, иначе
происходит ожидание очередного запроса на обработку по каналу, и если периферийный
блок или программа его выдает, то контроллер переходит к шагу 2.
4 Контроллер указывает центральному процессору на завершение цикла DMA.
Вызывается соответствующее каналу прерывание (если было включено).
Авто-запрос
Контроллеру необходим лишь одиночный запрос для разрешения работы и
выполнения цикла DMA. Такая работа позволяет выполнять передачу больших пакетов
данных без существенного увеличения времени отклика на обслуживание
высокоприоритетных запросов и не требует множественных запросов на обработку от
программы или периферийных блоков. Контроллер позволяет выбрать для использования
либо первичную, либо альтернативную структуру управляющих данных канала.
Перед началом работы необходимо включить контроллер DMA и разрешить работу
канала: установить соответствующий каналу бит в регистре ENSET и бит MASTEREN в
регистре CFG, а также проверить, что запросы канала не замаскированы (сброшен,
соответствующий каналу, бит в регистре REQMASKSET).
После того, как разрешена работа канала, цикл DMA выглядит следующим образом:
1 Контроллер ожидает получения запроса (программного либо от периферии) на
обработку. Если запрос получен, то контроллер переходит к шагу 2.
2 Контроллер выполняет 2R передач. Если число оставшихся передач 0, контроллер
переходит к шагу 4, иначе выполняется шаг 3.
3 Осуществление арбитража: если высокоприоритетный канал выдает запрос на
обработку, то контроллер начинает обслуживание этого канала, иначе контроллер
переходит к шагу 2.
4 Контроллер указывает центральному процессору на завершение цикла DMA.
Вызывается соответствующее каналу прерывание (если было включено).
Отличие от режима «основной» состоит в том, что в режиме «авто-запрос»
контроллер позволит осуществить все N транзакций по одному запросу, в то время как в
основном режиме по каждому запросу будет выполняться лишь 2R передач.
«Пинг-понг»
Контроллер выполняет цикл DMA, используя одну из первичных структур
управляющих данных, а затем выполняет еще один цикл DMA, используя альтернативную
структуру управляющих данных. Контроллер выполняет циклы DMA с переключением
структур до тех пор, пока не считает режим «недействительный» или «основной», или
пока процессор не запретит работу канала.
На рисунке 8.3 показан пример функционирования контроллера DMA в режиме
«пинг-понг». Пояснения к рисунку 8.3 представлены в виде таблицы 8.7.
36
Рисунок 8.3 - Пример функционирования контроллера в режиме «пинг-понг»
Таблица 8.7 - Пояснения к схеме на рисунке 8.3
Шаг
Действия процессора и контроллера
A
Процессор включает контроллер DMA и разрешает работу канала.
В программе устанавливаются первичная структура управляющих данных для
шага А и альтернативная структура управляющих данных для шага В. Это
позволит контроллеру переключиться к шагу В незамедлительно после
выполнения шага А, при условии, что контроллер не получит запрос на обработку
от высокоприоритетного канала.
Контроллер получает запрос и выполняет четыре передачи DMA.
Контроллер выполняет арбитраж. После получения запроса на обработку от этого
же канала, контроллер продолжает цикл в ситуации отсутствия
высокоприоритетных запросов.
Контроллер выполняет оставшиеся 2 передачи DMA.
Контроллер входит в процедуру арбитража. Если прерывание включено, то произойдет
его вызов.
Примечание - После выполнения шага А процессор может установить
первичные управляющие данные канала для шага С. Это позволит контроллеру
переключиться к шагу С незамедлительно после выполнения шага В, при условии,
что контроллер не получит запрос на обработку от высокоприоритетного канала.
После получения нового запроса на обработку от канала при условии его
наивысшего приоритета исполняется шаг В.
37
Окончание таблицы 8.7
Шаг
Действия процессора и контроллера
B
Контроллер выполняет четыре передачи DMA.
Контроллер выполняет арбитраж. После получения запроса на обработку от этого
же канала контроллер продолжает цикл в ситуации отсутствия
высокоприоритетных запросов.
Контроллер выполняет четыре передачи DMA.
Контроллер выполняет арбитраж. После получения запроса на обработку от этого
же канала контроллер продолжает цикл в ситуации отсутствия
высокоприоритетных запросов.
Контроллер выполняет оставшиеся четыре передачи DMA.
Контроллер входит в процедуру арбитража. Если прерывание включено, то произойдет
его вызов.
Примечание - После выполнения шага В процессор может установить
альтернативные управляющие данные канала для шага D.
После получения нового запроса на обработку от канала при условии его
наивысшего приоритета исполняется шаг С.
C
Контроллер выполняет две передачи DMA.
Контроллер входит в процедуру арбитража. Если прерывание включено, то произойдет
его вызов.
Примечание - После выполнения шага С процессор может установить
первичные управляющие данные канала для шага E.
После получения нового запроса на обработку от канала при условии его
наивысшего приоритета исполняется шаг D.
D
Контроллер выполняет четыре передачи DMA.
Контроллер выполняет арбитраж. После получения запроса на обработку от этого
же канала контроллер продолжает цикл в ситуации отсутствия
высокоприоритетных запросов.
Контроллер выполняет оставшуюся передачу DMA.
Контроллер входит в процедуру арбитража. Если прерывание включено, то произойдет
его вызов.
Примечание - После получения нового запроса на обработку от канала
при условии его наивысшего приоритета исполняется шаг E.
E
Контроллер выполняет четыре передачи DMA.
Контроллер выполняет арбитраж. После получения запроса на обработку от этого
же канала контроллер продолжает цикл в ситуации отсутствия
высокоприоритетных запросов.
Контроллер выполняет оставшиеся три передачи DMA.
Контроллер входит в процедуру арбитража. Если прерывание включено, то произойдет
его вызов
Если контроллер получит новый запрос на обработку от данного канала и этот
запрос будет самым приоритетным, контроллер предпримет попытку выполнения
следующего шага. Однако из-за того, что процессор не установил альтернативные
управляющие данные и по окончании шага D контроллер установил поле cycle_ctrl
альтернативной управляющей структуры в состояние 000b, передачи DMA прекращаются.
38
Работа с памятью в режиме «разборка-сборка»
Алгоритм работы данного режима является оптимальным именно для работы с
памятью, но несмотря на это, его использование возможно для любого типа передачи
данных: память - память, периферия - память, память - периферия, с помощью как
программных запросов, так и запросов от периферии.
В данном режиме контроллер использует первичные управляющие данные для
программирования альтернативных управляющих данных.
Контроллер, получая начальный запрос на обработку, выполняет четыре передачи
DMA, заполняя альтернативную структуру канала данными, доступными для первичной
управляющей структуры. По окончании этих передач контроллер входит в процедуру
арбитража, и если более высокоприоритетных запросов не обнаружено, начинает цикл
DMA, используя обновленные альтернативные управляющие данные. После - арбитраж,
затем контроллер выполняет еще четыре передачи DMA, вновь заполняя альтернативную
структуру данными с помощью первичной структуры.
Контроллер продолжает выполнять циклы DMA, меняя структуры управляющих
данных, пока не произойдет одно из следующих условий:
- передача с использованием альтернативной управляющей структуры будет
выполнена в режиме цикла «основной»;
- контроллер считает «неправильную» структуру управляющих данных. После
исполнения контроллером N передач с использованием первичных управляющих данных
он делает эти управляющие данные «неправильными» путем записи в поле cycle_ctrl
значения 000b.
Контроллер устанавливает прерывание канала DMA в этом режиме работы только
тогда, когда последний цикл передач DMA выполняется с использованием режима
«основной». Также необходимо помнить, что для режима «основной» авто-запросы не
действуют.
В таблице 8.8 указаны константы, которые должны быть записаны пользователем в
регистр CHANNEL_CFG первичной структуры управляющих данных канала для работы с
памятью в режиме «разборка-сборка».
Таблица 8.8 - Конфигурация первичной структуры управляющих данных канала для
работы с памятью в режиме «разборка-сборка»
CHANNEL_CFG
Поле
Биты
Конс-
Пояснение
танта
dst_inc
31-30
10b
Контроллер производит инкремент адреса с шагом в
двойное слово
dst_size
29-28
10b
Контроллер осуществляет передачу двойным словом
src_inc
27-26
10b
Контроллер производит инкремент адреса с шагом в
двойное слово
src_size
25-24
10b
Контроллер осуществляет передачу двойными словами.
dst_prot_ctrl
23-21
-
Управление защитой шины при записи данных в
приемник. Задается пользователем
src_prot_ctrl
20-18
-
Управление защитой шины при чтении данных из
источника. Задается пользователем
39
Окончание таблицы 8.8
Конс-
Поле
Биты
Пояснение
танта
R_power
17-14
0010b
Контроллер выполняет четыре передачи DMA (2R = 22 = 4)
N-1
13-4
-
Настраивает контроллер на выполнение N передач DMA.
Так как поле R_power задает значение 2, то необходимо
задавать значение N, кратное 4. Число, равное N/4, это
количество раз, которое нужно настраивать
альтернативные управляющие данные.
Задается пользователе.
next_use_burst
3
0
Для данного режима бит должен быть сброшен
cycle_ctrl
2-0
100b
Контроллер
работает
с
памятью
в
режиме
«разборка/сборка»
с
использованием
первичных
управляющих данных канал.
В указатель конца данных источника SRC_DATA_END_PTR первичной структуры
необходимо записать адрес конца области памяти, в которой последовательно
расположено нужное количество наборов управляющих данных для программирования
альтернативной структуры канала.
В указатель конца данных приемника DST_DATA_END_PTR первичной структуры
необходимо записать адрес конца альтернативной управляющей структуры используемого
канала.
На рисунке 8.4 показан пример функционирования контроллера в режиме «разборка-
сборка». Пояснения к рисунку 8.4 приведены ниже.
Рисунок 8.4 - Пример функционирования контроллера в режиме
«разборка-сборка»
40
Инициализация
1 Первичная структура управляющих данных настраивается для работы с памятью в
режиме «разборка-сборка» путем записи в cycle_ctrl значения 100b. Так как управляющие
данные канала состоят из четырех слов, R_power = 0010b. Поскольку количество задач
равно четырем, то N = 16, т. е. в значение поля N-1 = 00Fh.
2 Управляющие данные для шагов A, B, C, D располагаются в области ОЗУ. Адрес
конца этой области заносится в регистр SRC_DATA_END_PTR первичных управляющих
данных. Пример размещения и заполнения управляющих данных для альтернативной
структуры показан в таблице 8.9. Исходя из примера, в регистр SRC_DATA_END_PTR
первичной управляющей структуры необходимо занести значение 2000015Ch.
Таблица
8.9
- Пример размещения управляющих данных для альтернативной
структуры
Адрес
Тип данных
Регистр
Значение
ОЗУ
Управляющие
2000015Ch
Не используется
XXXXXXXXh
данные для
20000158h
CHANNEL_CFG
cycle_ctrl = 001b, 2R = 4, N = 4
задачи D
20000154h
DST_DATA_END_PTR
2000DE00h
20000150h
SRC_DATA_END_PTR
2000D000h
Управляющие
2000016Ch
Не используется
XXXXXXXXh
данные для
20000168h
CHANNEL_CFG
cycle_ctrl = 101b, 2R = 8, N = 5
задачи C
20000164h
DST_DATA_END_PTR
2000CE00h
20000160h
SRC_DATA_END_PTR
2000C000h
Управляющие
2000017Ch
Не используется
XXXXXXXXh
данные для
20000178h
CHANNEL_CFG
cycle_ctrl = 101b, 2R = 2, N = 8
задачи B
20000174h
DST_DATA_END_PTR
2000BE00h
20000170h
SRC_DATA_END_PTR
2000B000h
Управляющие
2000018Ch
Не используется
XXXXXXXXh
данные для
20000188h
CHANNEL_CFG
cycle_ctrl = 101b, 2R = 4, N = 3
задачи A
20000184h
DST_DATA_END_PTR
2000AE00h
20000180h
SRC_DATA_END_PTR
2000A000h
В регистр DST_DATA_END_PTR первичной структуры необходимо занести адрес
конца альтернативной структуры управляющих данных используемого канала. Например,
при использовании канала 9 в регистр DST_DATA_END_PTR необходимо занести
значение XXXXX29Ch.
3 Включается контроллер DMA и разрешается работа канала путем установки
соответствующего каналу бита в регистре ENSET и бита MASTEREN в регистре CFG.
Также необходимо удостовериться, что запросы канала не замаскированы (сброшен
соответствующий каналу бит в регистре REQMASKSET).
41
Функционирование
1 Первичная структура, копирование данных задачи А. По получении первого
запроса на обслуживание контроллер выполняет четыре передачи DMA. Эти передачи
записывают альтернативную структуру управляющих данных для задачи А. Контроллер
генерирует автозапрос для канала, после чего проводит процедуру арбитража.
Далее контроллер выполняет задачу А с использованием альтернативных данных, по
окончании генерирует автозапрос для канала и проводит процедуру арбитража.
2 Первичная структура, копирование данных задачи B. По получении автозапроса
контроллер выполняет четыре передачи DMA. Эти передачи записывают альтернативную
структуру управляющих данных для задачи B. Контроллер генерирует автозапрос для
канала, после чего проводит процедуру арбитража.
Далее контроллер выполняет задачу B с использованием альтернативных данных, по
окончании генерирует автозапрос для канала и проводит процедуру арбитража.
3 Первичная структура, копирование данных задачи C. По получении автозапроса на
обслуживание контроллер выполняет четыре передачи DMA. Эти передачи записывают
альтернативную структуру управляющих данных для задачи C. Контроллер генерирует
автозапрос для канала, после чего проводит процедуру арбитража.
Далее контроллер выполняет задачу C с использованием альтернативных данных, по
окончании генерирует автозапрос для канала и проводит процедуру арбитража.
4 Первичная структура, копирование данных задачи D. По получении автозапроса на
обслуживание контроллер выполняет четыре передачи DMA. Эти передачи записывают
альтернативную структуру управляющих данных для задачи D. Контроллер записывает в
cycle_ctrl первичных данных значение 000b для индикации о том, что эта структура
управляющих данных является «неправильной». Далее контроллер генерирует автозапрос
для канала, после чего проводит процедуру арбитража.
Далее контроллер выполняет задачу D, используя тип цикла «основной». По
завершении задачи генерирует прерывание канала DMA (если было включено) и входит в
процедуру арбитража. Цикл работы с памятью в режиме «разборка-сборка» завершен.
Работа с периферией в режиме «разборка-сборка»
Алгоритм работы данного режима является оптимальным именно для работы с
периферией, но несмотря на это, его использование возможно для любого типа передачи
данных: память - память, периферия - память, память - периферия, с помощью, как
программных запросов, так и запросов от периферии.
В данном режиме контроллер использует первичные управляющие данные для
программирования альтернативных управляющих данных.
Контроллер, получая начальный запрос на обработку, выполняет 4 передачи DMA,
заполняя альтернативную структуру канала данными, доступными для первичной
управляющей структуры. По окончании этих передач контроллер без осуществления
арбитража начинает цикл DMA, используя обновленные альтернативные управляющие
данные. После - арбитраж, затем контроллер выполняет еще 4 передачи DMA, вновь
заполняя альтернативную структуру данными с помощью первичной структуры. Это
единственный случай, при котором контроллер не осуществляет процедуру арбитража
после выполнения передачи DMA, используя первичные управляющие данные.
Контроллер продолжает выполнять циклы DMA, меняя структуры управляющих
данных, пока не произойдет одно из следующих условий:
- передача с использованием альтернативной управляющей структуры будет
выполнена в режиме цикла «основной»;
- контроллер считает «неправильную» структуру управляющих данных. После
исполнения контроллером N передач с использованием первичных управляющих данных
он делает эти управляющие данные «неправильными» путем записи в поле cycle_ctrl
значения 000b.
42
Контроллер устанавливает прерывание канала DMA в этом режиме работы только
тогда, когда последний цикл передач DMA выполняется с использованием режима
«основной» Также необходимо помнить, что для режима «основной» авто-запросы не
действуют.
В таблице 8.10 указаны константы, которые должны быть записаны пользователем в
регистр CHANNEL_CFG первичной структуры управляющих данных канала для работы с
периферией в режиме «разборка-сборка».
Таблица 8.10 - Конфигурация первичной структуры управляющих данных канала для
работы с периферией в режиме «разборка-сборка»
CHANNEL_CFG
Поле
Биты
Конс-
Пояснение
танта
dst_inc
31-30
10b
Контроллер производит инкремент адреса с шагом в
двойное слово
dst_size
29-28
10b
Контроллер осуществляет передачу двойным словом
src_inc
27-26
10b
Контроллер производит инкремент адреса с шагом в
двойное слово
src_size
25-24
10b
Контроллер осуществляет передачу двойными словами
dst_prot_ctrl
23-21
-
Управление защитой шины при записи данных в
приемник. Задается пользователем
src_prot_ctrl
20-18
-
Управление защитой шины при чтении данных из
источника. Задается пользователем
R_power
17-14
0010b
Контроллер выполняет четыре передачи DMA
(2R = 22 = 4)
N-1
13-4
-
Настраивает контроллер на выполнение N передач DMA.
Так как поле R_power задает значение , равное двум, то
необходимо задавать значение N, кратное четырем.
Число, равное N/4, это количество раз, которое нужно
настраивать альтернативные управляющие данные.
Задается пользователем
next_use_burst
3
0
Для данного режима бит должен быть сброшен
cycle_ctrl
2-0
110b
Контроллер работает с периферией в режиме «разборка-
сборка» с использованием первичных управляющих
данных канала
В указатель конца данных источника SRC_DATA_END_PTR первичной структуры
необходимо записать адрес конца области памяти, в которой последовательно
расположено нужное количество наборов управляющих данных для программирования
альтернативной структуры канала.
В указатель конца данных приемника DST_DATA_END_PTR первичной структуры
необходимо записать адрес конца альтернативной управляющей структуры используемого
канала.
На рисунке
8.5 показан пример функционирования контроллера в режиме
«разборка-сборка».
43
Рисунок 8.5 - Пример функционирования контроллера в режиме работы
с периферией «разборка-сборка»
Инициализация
1 Первичная структура управляющих данных настраивается для работы с
периферией в режиме «разборка-сборка» путем записи в cycle_ctrl значения 110b. Так как
управляющие данные канала состоят из четырех слов, R_power = 0010b. Поскольку
количество задач равно четырем, то N = 16, т. е. в значение поля N-1 = 00Fh.
2 Управляющие данные для шагов A, B, C, D располагаются в области ОЗУ. Адрес
конца этой области заносится в регистр SRC_DATA_END_PTR первичных управляющих
данных. Пример размещения и заполнения управляющих данных для альтернативной
структуры, показан в таблице 8.11. Исходя из примера, в регистр SRC_DATA_END_PTR
необходимо занести значение 2000015Ch.
Таблица
8.11
- Пример размещения управляющих данных для альтернативной
структуры
Тип данных
Адрес ОЗУ
Регистр
Значение
Управляющие
2000015Ch
Не используется
XXXXXXXXh
данные для
20000158h
CHANNEL_CFG
cycle_ctrl = 001b, 2R = 4, N = 4
задачи D
20000154h
DST_DATA_END_PTR
2000DE00h
20000150h
SRC_DATA_END_PTR
2000D000h
Управляющие
2000016Ch
Не используется
XXXXXXXXh
данные для
20000168h
CHANNEL_CFG
cycle_ctrl = 111b, 2R = 8, N = 5
задачи C
20000164h
DST_DATA_END_PTR
2000CE00h
20000160h
SRC_DATA_END_PTR
2000C000h
44
Окончание таблицы 8.11
Тип данных
Адрес ОЗУ
Регистр
Значение
Управляющие
2000017Ch
Не используется
XXXXXXXXh
данные для
20000178h
CHANNEL_CFG
cycle_ctrl = 111b, 2R = 2, N = 8
задачи B
20000174h
DST_DATA_END_PTR
2000BE00h
20000170h
SRC_DATA_END_PTR
2000B000h
Управляющие
2000018Ch
Не используется
XXXXXXXXh
данные для
20000188h
CHANNEL_CFG
cycle_ctrl = 111b, 2R = 4, N = 3
задачи A
20000184h
DST_DATA_END_PTR
2000AE00h
20000180h
SRC_DATA_END_PTR
2000A000h
В регистр DST_DATA_END_PTR первичной структуры необходимо занести адрес
конца альтернативной структуры управляющих данных используемого канала. Например,
при использовании канала 9 в регистр DST_DATA_END_PTR необходимо занести
значение XXXXX29Ch.
3 Включается контроллер DMA и разрешается работа канала путем установки
соответствующего каналу бита в регистре ENSET и бита MASTEREN в регистре CFG.
Также необходимо удостовериться, что запросы канала не замаскированы (сброшен
соответствующий каналу бит в регистре REQMASKSET).
Функционирование
1 Первичная структура, копирование данных для задачи А. По получении запроса на
обслуживание контроллер выполняет четыре передачи DMA. Эти передачи записывают
альтернативную структуру управляющих данных для задачи А.
Далее контроллер сразу же выполняет задачу А и по окончании проводит процедуру
арбитража. После выставления нового запроса на обслуживание, при условии, что этот
запрос является наиболее приоритетным, процесс продолжается.
2 Первичная структура, копирование данных для задачи B. Контроллер выполняет
четыре передачи DMA. Эти передачи записывают альтернативную структуру
управляющих данных для задачи B.
Далее контроллер выполняет задачу B. Для завершения задачи необходимо три
запроса (программных или от периферии). По окончании контроллер проводит процедуру
арбитража. После выставления нового запроса на обслуживание, при условии, что этот
запрос является наиболее приоритетным, процесс продолжается.
3 Первичная структура, копирование данных для задачи C. Контроллер выполняет
четыре передачи DMA. Эти передачи записывают альтернативную структуру
управляющих данных для задачи C.
Далее контроллер выполняет задачу C и по окончании проводит процедуру
арбитража.
После выставления периферией нового запроса на обслуживание, при условии, что
этот запрос является наиболее приоритетным, процесс продолжается.
4 Первичная структура, копирование данных для задачи D. Контроллер выполняет
четыре передачи DMA. Эти передачи записывают альтернативную структуру
управляющих данных для шага D. Контроллер записывает в cycle_ctrl первичных данных
значение 000b для индикации о том, что эта структура управляющих данных является
«неправильной».
Далее контроллер выполняет задачу D, используя основной цикл DMA, входит в
прерывание канала DMA (если включено) и запускает процедуру арбитража. Цикл работы
с периферией в режиме «разборка-сборка» завершен.
45
8.5 Индикация ошибок
Контроллер может отключить канал DMA Сi в следующих случаях:
- при завершении цикла DMA;
- при чтении режима канала «недействительный»;
- при появлении ошибки на шине AHB-Lite.
Как только контроллер получает сообщение об ошибке по шине AHB-Lite, он
отключает канал, в котором обнаружена ошибка и устанавливает флаг ERRCLR в
одноименном регистре.
Для того чтобы определить канал, в котором произошла ошибка, программа,
выполняемая процессором, должна всегда хранить данные о каналах, которые недавно
вызывали прерывания, т. е. завершали работу и отключались.
Алгоритм определения канала с ошибкой:
- необходимо прочитать регистр ENSET с целью создания текущего списка
отключенных каналов;
- процессор должен сравнить список выключенных каналов, полученный в
результате чтения регистра ENSET, с данными о каналах, которые недавно вызывали
прерывания. Канал, который отключился и по которому отсутствуют данные о вызове
прерывания, это и есть канал, с которым связана ошибка.
В контроллере DMA присутствует возможность использования режимов защиты
шины AHB-Lite: при записи в приемник, при чтении из источника и при обращении к
структурам управляющих данных каналов. Защита шины в каждой из ситуаций
настраивается индивидуально. Доступными режимами защиты являются: кэширование,
буферизация, привилегированный доступ.
Защита шины при записи в приемник настраивается полем dst_prot_ctrl в ячейке
CHANNEL_CFG структуры управляющих данных канала.
Защита шины при чтении из источника настраивается полем src_prot_ctrl в ячейке
CHANNEL_CFG структуры управляющих данных канала.
Защита шины при обращении контроллера к структурам управляющих данных
каналов настраивается полем CHPROT в регистре CFG.
46
9 Прерывания
Таблица прерываний представляет собой перечень адресов, соответствующих
определенным обработчикам прерываний (см. таблицу 9.1).
Таблица 9.1 - Таблица прерываний
Номер
Смещение
Обозначение
Описание
вектора
-
0000h
SP
Вершина стека
-
0004h
Reset
Сброс
-
0008h
NMI
Немаскируемое прерывание NMI
-
000Ch
HardFault
Любой отказ, если соответствующий
обработчик не может быть запущен
-
0010h
MemManage
Прерывание по отказу системы управления
памятью
-
0014h
BusFault
Прерывание по отказу шины AHB
-
0018h
UsageFault
Прерывание по ошибке программы
-
001Ch-
-
Зарезервировано
0028h
-
002Ch
SVCall
Обработка прерываний, вызванных
инструкцией SVC
-
0030h
DebugMonitor
Прерывание монитора отладки
-
0034h
-
Зарезервировано
-
0038h
PendSV
Прерывание системного уровня.
В приложении используется вызов
«Супервизор», если этот запрос
обслуживается базовой операционной
системой
-
003Ch
SysTick
Прерывание системного уровня.
Прерывание вызывается таймером SysTick
0
0040h
WDT
Прерывание блока сторожевого таймера
1
0044h
RCU
Прерывание блока RCU
2
0048h
MFLASH
Прерывание контроллера флеш-памяти
3
004Ch
GPIOA
Прерывание порта A
4
0050h
GPIOB
Прерывание порта B
5
0054h
DMA_CH0
Прерывания контроллера DMA по каналам
6
0058h
DMA_CH1
7
005Ch
DMA_CH2
8
0060h
DMA_CH3
9
0064h
DMA_CH4
10
0068h
DMA_CH5
11
006Ch
DMA_CH6
12
0070h
DMA_CH7
13
0074h
DMA_CH8
14
0078h
DMA_CH9
15
007Ch
DMA_CH10
16
0080h
DMA_CH11
17
0084h
DMA_CH12
47
Продолжение таблицы 9.1
Номер
Смещение
Обозначение
Описание
вектора
18
0088h
DMA_CH13
Прерывания контроллера DMA по каналам
19
008Ch
DMA_CH14
20
0090h
DMA_CH15
21
0094h
TMR0
Прерывание таймера 0
22
0098h
TMR1
Прерывание таймера 1
23
009Ch
TMR2
Прерывание таймера 2
24
00A0h
TMR3
Прерывание таймера 3
25
00A4h
UART0_TD
Прерывание UART 0 по окончанию передачи
26
00A8h
UART0_RX
Прерывание UART 0 по заполнению FIFO
27
00ACh
UART0_TX
Прерывание UART 0 по опустошению FIFO
28
00B0h
UART0
Общее прерывание блока UART 0
29
00B4h
UART1_TD
Прерывание UART 1 по окончанию передачи
30
00B8h
UART1_RX
Прерывание UART 1 по заполнению FIFO
31
00BCh
UART1_TX
Прерывание UART 1 по опустошению FIFO
32
00C0h
UART1
Общее прерывание блока UART 1
33
00C4h
SPI
Общее прерывание контроллера SPI
34
00C8h
SPI_RX
Прерывание SPI по заполнению FIFO
35
00CCh
SPI_TX
Прерывание SPI по опустошению FIFO
36
00D0h
I2C
Прерывание контроллера I2C
37
00D4h
ECAP0
Прерывание блока захвата 0
38
00D8h
ECAP1
Прерывание блока захвата 1
39
00DCh
ECAP2
Прерывание блока захвата 2
40
00E0h
PWM0
Общее прерывание блока ШИМ 0
41
00E4h
PWM0_HD
Прерывание схему удержания блока ШИМ 0
42
00E8h
PWM0_TZ
Прерывание детектора аварий блока ШИМ 0
43
00ECh
PWM1
Общее прерывание блока ШИМ 1
44
00F0h
PWM1_HD
Прерывание схему удержания блока ШИМ 1
45
00F4h
PWM1_TZ
Прерывание детектора аварий блока ШИМ 1
46
00F8h
PWM2
Общее прерывание блока ШИМ 2
47
00FCh
PWM2_HD
Прерывание схему удержания блока ШИМ 2
48
0100h
PWM2_TZ
Прерывание детектора аварий блока ШИМ 2
49
0104h
QEP
Прерывание квадратурного декодера
50
0108h
ADC_SEQ0
Прерывание секвенсора 0 блока АЦП
51
011Сh
ADC_SEQ1
Прерывание секвенсора 1 блока АЦП
52
0120h
ADC_DC
Прерывание компараторов блока АЦП
53
0124h
CAN0
Прерывания контроллера CAN
54
0128h
CAN1
55
012Ch
CAN2
56
0130h
CAN3
57
0134h
CAN4
58
0138h
CAN5
59
013Ch
CAN6
60
0140h
CAN7
61
0144h
CAN8
62
0148h
CAN9
63
014Ch
CAN10
48
Окончание таблицы 9.1
Номер
Смеще
Обозначение
Описание
вектора
ние
64
0150h
CAN11
Прерывания контроллера CAN
65
0154h
CAN12
66
0158h
CAN13
67
015Ch
CAN14
68
0160h
CAN15
69
0164h
FPU
Прерывание исключений блока FPU
Первоначально адрес начала таблицы прерываний 00000000h.
Таблица векторов может быть размещена по другому адресу в памяти программ или
в ОЗУ. В случае размещения таблицы прерываний в области ОЗУ появляется возможность
изменять обработчики прерываний в процессе выполнения программы. Положение
таблицы векторов в памяти определяется регистром VTOR, см. таблицу 9.2.
Таблица 9.2 - Регистр смещения таблицы векторов
VTOR
E000_ED08h
Сброс: 00000000h
Окончание таблицы 9.2
Поле
Биты
Описание
TBLOFF
31-8
Биты 31-8 адреса таблицы векторов
0
7-0
Младший байт адреса таблицы векторов.
Всегда должен быть равен 00h.
Обработчики прерываний можно динамически менять, но при этом обязательно
следует располагать следующие элементы:
- начальное значение основного указателя стека;
- вектор сброса Reset;
- вектор NMI;
- вектор исключения HardFault.
Остальные прерывания не могут генерироваться, пока не будут разрешены.
Контроллер прерываний NVIC
Контроллер обеспечивает:
- программное задание уровня приоритета независимо для каждого прерывания в
диапазоне от 0 до 3 (прерывание с уровнем 0 имеет наивысший приоритет);
- генерирование сигнала прерывания по фронту и по уровню сигнала;
- динамическое изменение приоритета прерываний;
49
- разделение по группам с одинаковым приоритетом и по подгруппам внутри одной
группы;
- передача управления из одного обработчика в другой без восстановления
контекста.
Процессор автоматически сохраняет в стеке свое состояние при входе в обработчик
прерывания и восстанавливает свое состояние после завершения обработки прерывания,
т. е. без необходимости программирования этих операций.
Обработка прерываний по уровню и по фронту
Контроллер прерываний поддерживает прерывания, как по фронту, так и по уровню.
Прерывание по фронту - импульсное прерывание, которое может иметь длительность
большую или равную длительности такта системной частоты.
Прерывание по уровню возникает до тех пор, пока устройством удерживается
заданный уровень сигнала. Если прерывание по уровню не было снято до завершения
работы обработчика прерываний, то контроллер NVIC вновь начинает его обработку.
В случае прихода импульсного прерывания от любого источника в момент
обработки предыдущего, в контроллере устанавливается флаг, сигнализирующий о
приходе нового прерывания, которое будет обработано после завершения обработки
текущего прерывания. В случае, если контроллер NVIC находится в состоянии ожидания
и приходит импульсное прерывание от того же источника, обработка выполнится только
один раз.
Для управления прерываниями используются пять групп регистров ISER, ICER,
ISPR, ICPR и IABR. Подробное описание в приложении В.
50
10 Порты ввода-вывода
В состав микроконтроллера входят два 16-разрядных порта ввода-вывода: порт A,
порт B.Структуры портов и функционирование идентичны.
Каждый цифровой вывод порта микроконтроллера может использоваться как
двунаправленный вывод общего назначения (режим GPIO). Помимо этого, все выводы
имеют альтернативую функцию. Исключением являются выводы 0-3 порта B, которые
имеют аналоговую функцию - с ними мультиплексированы каналы АЦП.
По умолчанию, порты находятся в сбросе и не тактируются. Активировать порты
можно с помощью соответсвующих бит регистров HCLKCFG, HRSTCFG блока RCU.
10.1 Функционирование порта
Полученные данные сохраняются в регистре DATA порта. Данные для передачи
записываются в регистр DATAOUT порта. Существует возможность модификации
состояния регистра DATAOUT путем записи единиц в: регистр DATAOUTSET для
установки соответствующих бит, регистр DATAOUTCLR для сброса бит, регистр
DATAOUTTGL для инверсии бит.
На рисунке
10.1 приведена структурная схема вывода цифрового порта
микроконтроллера. Схемы всех выводов идентичны.
Рисунок 10.1 - Вывод цифрового порта микроконтроллера и управляющие регистры
Схема состоит из двунаправленной площадки вывода, фильтра входных сигналов,
мультиплексора выбора режима работы (режим GPIO либо режим альтернативной
функции).
Для каждого вывода задается режим работы, номер альтернативной функции,
нагрузочная способность и быстродействие вывода, режим подтяжки, а также
производится настройка порта на работу в режиме с открытым стоком/истоком. Входной
сигнал может подаваться для дальнейшей обработки как напрямую (асинхронный вход),
так и проходить обработку через фильтр.
После сброса все выводы кроме выводов JTAG, конфигурируются как выводы
общего назначения (режим GPIO) и находятся в третьем состоянии. Перед тем как
51
взаимодействовать с выводом как цифровым входом, выходом или альтернативной
функций необходимо разрешить цифровую работу вывода, записав единицы в
соответствующие разряды регистра DENSET. Для сброса установленных бит следует
записать единицы в регистр DENCLR. При использовании аналоговой входной функции
необходимо запретить цифровую работу всех соответствующих выводов,
мультиплексированных с каналами выбранного АЦП.
Выбор нагрузочной способности и быстродействия вывода определяется полями
регистра DRIVEMODE, а режим подтяжки конфигурируется регистром PULLMODE.
Разрешение работы выходных каскадов определяется состоянием бит регистра
OUTENSET (для сброса установленных бит следует записать единицы в регистр
OUTENCLR), а их режим (пуш-пул, открытый сток/исток) состоянием полей в регистре
OUTMODE.
Режим работы входной цепи настраивается с помощью регистра INMODE.
10.2 Режим альтернативных функций
Для перевода желаемого вывода порта в режим альтернативной функции
необходимо установить соответствующий бит в регистре ALTFUNCSET порта. Для
отключения альтернативной функции нужно записать единицу в соответствующий бит
регистра ALTFUNCCLR.
Входы и выходы периферийных блоков в процессе работы коммутируются с
выводами микроконтроллера при условии, что для этих выводов включен режим
альтернативной функций.
10.3 Входные фильтры
Ко всем площадкам выводов подключены входные фильтры. На рисунке 10.4
показана структурная схема фильтра нулевого вывода порта А (в названии регистров
присутствует «0», указывая на управляющие регистры порта А).
Рисунок 10.4 - Структурная схема фильтра вывода порта
Входной сигнал с вывода порта может приниматься как напрямую (асинхронный
режим), так и пересинхронизироваться (синхронизироваться с тактовой частотой работы
микроконтроллера). Управление осуществляется регистрами SYNCSET/SYNCLCR.
Дополнительно есть возможность включения накопления трех или шести отсчетов
входного сигнала для помехоустойчивости вывода. Если результаты всех отсчетов
52
совпадают, сигнал передается дальше по схеме, в противном случае состояние сигнала не
меняется. Временные интервалы между отсчетами задаются в количестве тактов
системной частоты посредством регистра QUALSAMPLE. Временной интервал задается
один для всех выводов порта.
Включение фильтра и задание режима его работы осуществляется посредством
регистров QUALSET/QUALCLR и QUALMODESET/QUALMODECLR соответственно.
Одновременно оба режима активны быть не могут - при установленных единицах в
одних и тех же разрядах SYNCSET и QUALSET сигнал будет проходить напрямую со
входа фильтра на его выход.
10.4 Прерывания
Каждый из выводов способен генерировать прерывание. На рисунке 10.5 показана
структурная схема блока генерации прерываний.
Рисунок 10.5 - Блок генерации прерываний
Схема вывода позволяет также осуществлять гибкое управление прерываниями и
задавать, по какому аппаратному событию генерировать прерывание (по какому фронту
или уровню). При возникновении прерывания в регистре INTSTATUS устанавливается
соответствующий флаг, и выставляется прерывание в контроллере прерываний NVIC.
Прерывание может быть сгенерировано программно записью единицы в соответствующий
бит регистра INTSTATUS.
Прерывание может быть сброшено программно записью единицы в
соответствующий бит регистра INTCLEAR. Для разрешения прерывания вывода порта
следует записать единицу в соответствующий выводу бит регистра INTENSET, а для
запрета прерывания - единицу в бит регистра INTENCLR.
Для задания типа события (уровень или фронт), по которому генерируется
прерывание, используется регистры INTTYPESET, для задания полярности
(низкий/высокий уровень или положительный/отрицательный фронт) используется
INTPOLSET, а для сброса настроек - INTTYPECLR и INTPOLCLR, соответственно.
Существует возможность организации прерывания по обоим фронтам - сначала
необходимо задать тип прерывания - фронт (запись в INTTYPESET), а затем записать
соответствующие единицы в INTEDGESET. В этом режиме состояние регистра
полярности INTPOLSET игнорируется. Отключить режим генерации прерывания по
обоим фронтам можно записью в INTEDGECLR, в таком случае для генерации в
дальнейшем будет использована текущая настройка полярности (INTPOLSET).
В режиме прерываний по уровню состояние INTEDGESET не влияет на их
генерацию.
53
10.5 Генерация аппаратных запросов
Кроме генерации прерываний, порты также имеют возможностей генераций
запросов к другой периферии. Генерация запроса происходит по условиям возникновения
прерывания на выбранном выводе, при этом не важно, маскировано само прерывание или
нет (состояние INTENSET), влияние оказывают только настройки генерации прерывания
(INTTYPESET, INTPOLSET, INTEDGESET).
Для того чтобы в соответствии с настройками прерывания генерировался BREQ
запрос к DMA необходимо осуществить запись единиц в DMAREQSET. Отключение
генерации запросов к DMA осуществляется через DMAREQCLR.
Для того чтобы в соответствии с настройками прерывания сгенерировался запрос
начала преобразования АЦП необходимо осуществить запись единиц в ADCSOCSET.
Отключение генерации запросов начала преобразования АЦП осуществляется через
ADCSOCLR.
Для того чтобы в соответствии с настройками прерывания сгенерировался запрос
RXEV к ядру необходимо осуществить запись единиц в RXEVSET. Отключение
генерации запросов RXEV к ядру осуществляется через RXEVCLR.
10.6 Механизм блокировки конфигурации
Для защиты конфигурации выводов от несанкционированного изменения реализован
механизм блокировки.
Блокировка конфигурации осуществляется записью соответствующих единиц в
регистр LOCKSET, сброс блокировки - в регистр LOCKCLR. При включенной блокировке
игнорируется запись во все биты и поля настройки маскированных выводов - доступны
для записи лишь регистры INTSTATUS и QUALSAMPLE.
По умолчанию, все выводы являются разблокированными, а запись а регистры
LOCKSET/LOCKCLR игнорируется. Для того чтобы сделать доступными для изменения
регистры LOCKSET/LOCKCLR, необходимо в регистр LOCKKEY занести значение
ключа ADEADBEEh. Если необходимо снова защитить от изменений регистры
LOCKSET/LOCKCLR, то достаточно записать в LOCKKEY любое значение, отличное от
ключа.
Текущий статус защиты регистров LOCKSET/LOCKCLR можно узнать, прочитав
регистр LOCKKEY - значение 00000001h соответствует снятой защите, 00000000h -
установленной.
10.7 Механизм маскирования
Для управления состоянием выводов порта дополнительно используется механизм
маскирования. Он позволяет устанавливать желаемый уровень сигнала на нужном выводе,
не затрагивая состояние других выводов. 16-разрядный порт условно разбивается на
старший и младший байты; для доступа по маске к младшему байту используются массив
регистров MASKLB, а к старшему - MASKHB.
Каждый массив состоят из 256 регистров, каждый регистр имеет порядковый номер
(от 00h до FFh), который является маской. Так, например, для порта А выделены две
области памяти с адресами 40010400h - 400107FCh для младшего байта и 40010800h -
40010BFCh для старшего. Биты с 9 по 2 адреса являются маской. Таким образом, адресу
40010400h соответствует маска
00h (MASKLB[0x00]), адресу
40010404h
-
01h
(MASKLB[0x01]) и т. д.
Для того чтобы изменить состояние выводов порта с использованием маски, нужно
записать новое значение в соответствующий элемент масива (MASKLB или MASKHB) с
порядковым номером, совпадающим со значением маски.
54
Разряды порта, закрытые «нулями» маски, останутся неизменными, а остальные
примут новые значения. На рисунке 10.6 показан механизм маскирования младшего байта
порта А.
Рисунок 10.6 - Механизм изменения состояния младшего байта
порта А с маскированием
Для изменения
0,
1,
6 и 7 битов регистра порта нужно использовать маску
11000011b. Эта маска является частью (биты с 9 по 2) адреса 4001070Ch (дополнительно,
механизм вычисления маски указан на рисунке 10.6). Новое значение XX90h данных,
которое требуется передать в порт (при этом старший байт числа не важен) нужно
записать в ячейку с адресом 4001070Ch. Далее это значение будет аппаратно маскировано
и размещено в регистре порта DATAOUT.
Аналогично выполняется маскирование старшего байта (см. рисунок 10.7). Разница
лишь в том, что в данном случае берется старший байт нового значения, а младший не
важен.
Рисунок 10.7 - Механизм изменения состояния старшего байта
порта А с маскированием
55
11 Таймеры
Микроконтроллер содержит четыре блока
32-разрядных таймеров. Все блоки
идентичны.
Счетчик таймера работает по системному тактовому сигналу. Кроме этого, таймер
может управляться внешним сигналом, а также синхронизироваться по внешнему
сигналу. На рисунке 11.1 представлена функциональная схема таймера.
Рисунок 11.1 - Функциональная схема таймера
Управление таймером осуществляется посредством регистра CTRL. Начальное
значение задается регистром VALUE. Для включения таймера нужно установить бит ON.
Счетчик таймера декрементируется от значения заданного регистром VALUE до нуля на
частоте тактового сигнала микроконтроллера. По достижении нуля счетчик таймера
загружается значением, заданным регистром перезагрузки LOAD, и если разрешено битом
INTEN, генерируется прерывание. При возникновении прерывания устанавливается флаг
INT в регистре INTSTATUS.
Для каждого таймера имеется свой внешний вход синхронизации TMR_IN,
выведенный на альтернативную функцию порта микроконтроллера.
Если установлен бит EXTINEN, то счетчик таймера работает на частоте тактового
сигнала микроконтроллера, только если сигнал на входе имеет уровень логической
единицы.
Если одновременно установлены биты EXTINEN и EXTINCLK, то тактирование
счетчика таймера происходит по положительному фронту внешнего сигнала,
приходящего на вход TMR_IN. При этом частота внешнего сигнала должна быть как
минимум в два раза меньше частоты системного тактового сигнала.
С помощью таймера возможно генерировать запроса DMA. Если записать в поле EN
регистра DMAREQ единицу, то по достижении счетчиком нуля будет генерироваться
запрос по соответствующему каналу DMA. Выбор необходимого канала выполняется с
помощью поля SRCSELx (x - номер канала, от 8 до 15) регистра DMAMUX блока SIU.
Также таймер может выдавать строб для запуска измерения АЦП. Если записать в
поле EN регистра ADCSOC единицу, то по достижении счетчиком нуля будет
генерироваться сигнал запуска АЦП.
56
12 Блоки захвата
В микроконтроллере реализованы три блока захвата. Все блоки идентичны.
Блоки захвата используются для:
- вычисления скорости вращения вала ротора (с использованием датчиков Холла);
- вычисления промежутков времени между срабатыванием позиционных датчиков;
- вычисления периода и скважности импульсов.
Возможности блока захвата:
- 32-разрядный таймер, с разрешающей способностью 10 нс (на 100 МГц);
- четыре 32-разрядных регистра захвата времени;
- выбор полярности фронта для обработки каждого из четырех последовательных
событий;
- источники прерываний по каждому из четырех событий;
- однократный захват значений времени до четырех событий;
- режим цикличной работы по событиям, с переписыванием значений (кольцевой
буфер);
- режимы захвата абсолютного и относительного значений времени;
- альтернативный режим работы, если не задействована функция захвата времени -
одноканальный выход ШИМ.
Функциональная схема блока захвата представлена на рисунке 12.1.
Рисунок 12.1 - Схема блока захвата
Для начала работы с блоками захвата необходимо подать тактирование - установить
соответсвующие биты в регистре PCLKCFG блока RCU и снять сброс - установить
соответствующие биты регистра PRSTCFG.
57
Каждый блок захвата имеет один вывод ECAP_IO, соединенный с выводом
микроконтроллера (альтернативная функция). В зависимости от режима работы блока
захвата вывод является входом внешнего события или выходом генерируемого сигнала
ШИМ. Чтобы переключить альтернативную функцию на сигналы блоков ECAPx по
соответсвующим выводам, необходимо установить бит ECAPxEN в регистре REMAPAF
блока SIU.
12.1 Режим захвата времени
Режим захвата времени выбран по умолчанию. Вывод ECAP_IO функционирует как
вход.
Предварительный делитель
В случае, если события на входе ECAP_IO приходят слишком часто и требуется
уменьшить их частоту, используется предварительный делитель событий (импульсов),
состоящий из собственно делителя и мультиплексора. В предварительном делителе
используется счетчик, который производит выборку одного события из каждых 2 - 63
входных. Значение делителя задается полем PRESCALE регистра ECCTL0. В случае если
задано значение 00h, то делитель выключен и входной сигнал поступает на детекторы
фронта напрямую.
Для примера на рисунке 12.2 показаны несколько вариантов сигналов на выходе
делителя, в зависимости от заданного значения N.
Рисунок 12.2 - Формы сигналов на выходе делителя в зависимости от значения N
Захват значения таймера
С выхода делителя сигнал поступает на четыре детектора фронта, каждый из
которых управляется соответствующим битом CAPnPOL. Далее, если установлен бит
CAPLDEN и обнаружен заданный фронт сигнала, формируется соответствующее событие.
Возможно одновременное формирование до четырех событий (EV0 - EV3), и по
переднему фронту каждого события происходит захват значения таймера TSCTR в
соответствующий регистр захвата (CAP0 - CAP3).
Регистр захвата перезаписывается новым захваченным значением каждый раз при
возникновении соответствующего события.
Однократный захват
Однократный захват выбирается битом CONTOST регистра ECCTL1 и включается
записью единицы в бит REARM с последующей установкой бита CAPLDEN (установится
аппаратно). В этом режиме происходит запуск двухразрядного счетчика событий EV0 -
EV3. Количество подсчитываемых событий от одного до четырех задается полем
STOPWRAP. Подсчитывается каждое из сформированных событий и одновременно
происходит захват значения таймера в соответствующие регистры захвата. Как только
количество событий совпадет со значением STOPWRAP, события EV0 - EV3 больше не
58
формируются, значение таймера захватывается регистрами CAP0 - CAP3 и далее
регистры не перезаписываются.
Для повторного запуска следует записать единицу в бит REARM (это обнулит
счетчик и включит режим), после чего - разрешить формирование событий EV0 - EV3
установкой бита CAPLDEN.
Циклический захват
Циклический захват выбран по умолчанию. После установки бита CAPLDEN
начинается обработка событий EV0 - EV3 и захват значения таймера. Количество
подсчитываемых событий от одного до четырех задается полем STOPWRAP.
Регистр захвата перезаписывается новым захваченным значением каждый раз при
возникновении соответствующего события.
Примечение - В обоих режимах захвата значение поля STOPWRAP не оказывает
никакого влияния на счетчик и состояние бита CAPLDEN.
Таймер
Таймер представляет собой
32-разрядный счетчик, работающий на системной
частоте. Контроль работы таймера осуществляет блок управления таймером. Счетчик
таймера включается битом TSCTRSTOP и инкрементируется, начиная со значения
00000000h до значения FFFFFFFFh, после чего сбрасывается.
Чтобы синхронизировать работу таймера с другими блоками счетчик таймера может
быть в любой момент загружен новым значением, которое предварительно записывается в
теневой регистр CTRPHS. Загрузка может быть активирована как программно - запись
единицы в бит SWSYNC регистра ECCTL1, так и аппаратно - приход синхроимпульса по
входу SYNCI. Разрешение синхронизации осуществляется установкой бита SYNCIEN.
Блок захвата также может генерировать сигнал синхронизации SYNCO. Источник
выбирается полем SYNCOSEL - либо используется SYNCI или SWSYNC, либо событие
CTR=PRD генерации ШИМ.
Входы и выходы синхронизации блоков захвата подключены по цепочке (рисунок
12.3).
Рисунок 12.3 - Подключение сигналов синхронизации блоков захвата
Таймер может быть сброшен (с предварительным захватом его значения) при
формировании событий EV0 - EV3. Указать событие можно установкой
соответствующего бита CTRRSTn (n от 0 до 3) в регистре EECTL0. Так, например, если
установлен бит CTRRST2, то при формировании события EV2 произойдет захват
значения таймера в регистр CAP2 и сброс таймера.
Регистры CAP0 - CAP3
32-разрядные регистры, сохраняющие (захватывающие) значение счетчика таймера в
момент появления положительного фронта сигнала события EVn (n от 0 до 3), доступны
только для чтения.
12.2 Режим работы «генератор ШИМ»
Выбирается установкой бита CAPAPWM в регистре ECCTL1. Вывод ECAP_IO
функционирует как выход. Блок захвата в этом случае используется как одноканальный
32-разрядный генератор ШИМ-сигнала.
59
Таймер и регистры захвата
Функционирует как
32-разрядный инкрементный счетчик, работающий на
системной частоте. После включения счетчик таймера считает от значения 00000000h до
значения, которое задается регистром CAP0. Как только значения счетчика и регистра
совпадают, счетчик сбрасывается.
Регистр CAP0 является регистром периода таймера, а регистр CAP1 - регистром
сравнения. Регистры CAP2 и CAP3 являются регистрами отложенной загрузки для
регистров CAP0 и CAP1, соответственно. Все регистры доступны как для записи, так и
для чтения.
Запись в регистр CAP0 является мгновенной загрузкой, которая аппаратно
дублируется записью в регистр CAP2. Аналогично для пары CAP1, CAP3.
Запись в регистры CAP2 и CAP3 является отложенной загрузкой. Как только
значение счетчика таймера достигает значения периода CAP0, возникает событие
CTR = PRD, по которому происходит сброс таймера и перегрузка значений из CAP2 и
CAP3 в регистры CAP0 и CAP1 (на рисунке 12.1 отмечено стрелками черного цвета).
Регистры CAP0 и CAP1 должны быть обязательно инициализированы до начала
запуска таймера. При дальнейшей работе можно изменять значения только регистра
отложенной загрузки.
Генерация ШИМ
После инициализации регистров CAP0 и CAP1 запускается счетчик таймера.
Текущее значение счетчика CTR посредством двух компараторов сравнивается
одновременно со значением PRD регистра периода CAP0 и значением CMP регистра
сравнения CAP1 (на рисунке 12.1 отмечено черным цветом).
Как только возникает событие CTR = CMP, сигнал на выходе ECAP_IO переводится
в ноль. Далее сигнал удерживается в нуле до тех пор, пока счетчик таймера не достигнет
значения периода. При возникновении события CTR = PRD сигнал переводится в
единицу. Одновременно с этим происходит сброс таймера и перезагрузка регистров CAP0
и CAP1. Управлять полярностью сигнала можно битом APWMPOL. На рисунке 12.4
представлен пример формирования ШИМ-сигнала с активным высоким уровнем сигнала
(по умолчанию, APWMPOL = 0).
Рисунок 12.4 - Пример формирования ШИМ-сигнала
На рисунке 12.4 период таймера задан как CAP0 = 000007000h. Начальное значение
сравнения CAP1 = 00000400h. Пока таймер считает, в регистр CAP2 загружается новое
значение 00000500h для отложенной загрузки. По достижении значения сравнения сигнал
на выходе ECAP_IO переводится в низкий уровень. По окончании периода происходит
сброс таймера и загрузка значения 00000500h (из регистра CAP2) в регистр CAP1 и
перевод сигнала на выходе ECAP_IO в высокий уровень.
60
Таким образом, можно достаточно гибко управлять как длительностью импульсов,
изменяя период работы таймера, так и скважностью при постоянном периоде.
12.3 Прерывания
Источники прерываний блока захвата:
- события EV0 - EV3;
- переполнение счетчика таймера (CTROVF);
- события CTR = PRD;
- события CTR = CMP.
Каждое из семи прерываний имеет бит маски в регистре ECEINT, флаг прерывания в
регистре ECFLG, бит сброса флага в регистре ECCLR и бит программного прерывания в
регистре ECFRC. На рисунке 12.5 показан пример для прерывания по событию EV1.
Рисунок 12.5 - Пример управления прерыванием EV1
Все прерывания по событиям поступают на блок управления прерываниями и
обрабатываются, как сказано выше. При возникновении любого из этих прерываний в
регистре PEINT устанвливается флаг PEINT и генерируется прерывание блока захвата, см.
рисунок 12.6.
Рисунок 12.6 - Общая схема управления прерываниями
Примечание - Программа обслуживания прерывания должна сбрасывать флаг
PEINT во избежание повторного обслуживания прерывания от блока захвата. Для сброса
флага следует записать единицу в нулевой бит регистра PEINT.
61
13 Модуль квадратурного декодера
Квадратурный декодер преобразует цифровой сигнал с датчика положения вала,
позволяя вычислять скорость, направление вращения, а также текущее положение вала.
Рисунок 13.1 - Схема квадратурного декодера с мультиплексором
входных/ выходных сигналов
В состав квадратурного декодера входят (см. рисунок 13.1):
- настраиваемый обработчик сигналов входов;
- квадратурный преобразователь;
- счетчик позиции/блок управления;
- модуль захвата времени;
- таймер временных отсчетов;
- сторожевой таймер.
По умолчанию, модуль находится в сбросе и не тактируется. Разрешить
тактирование и снять сброс можно, установив соответсвующие биты в регистрах
PCLKCFG и PRSTCFG блока RCU.
Чтобы переключить альтернативную функцию на сигналы QEP по соответсвующим
выводам, необходимо установить бит QEPEN в регистре REMAPAF блока SIU.
13.1 Обработчик сигналов входов
Квадратурный декодер использует два квадратурных вывода контроллера,
работающих на вход. Также, имеются специальный индексный вывод и вывод
стробирования, которые могут работать на вход и выход.
QEP_A и QEP_B - в квадратурном режиме это два входа. Сигналы на входах
сдвинуты по фазе на 90 градусов и по ним можно определить скорость и направление
вращения ротора (см. рисунок 13.2). В режиме счета/направления сигналы на входах
используются как тактовый и сигнал направления вращения ротора, по которым также
можно вычислить скорость вращения.
QEP_I - индексный вход. Сигнал на входе сигнализирует о полном обороте ротора.
Позволяет сбрасывать счетчик позиции поворота ротора.
QEP_S - пользовательский вход стробирования. Сигнал на входе может сбросить
или защелкнуть счетчик позиции. Применяется при использовании концевых
выключателей.
62
Сигналы на входах могут быть проинвертированы. Инверсия включается установкой
соответствующего бита в регистре QDECCTL.
Установкой бита SWAP можно включить обратный счет, т. е. программно подать
сигнал с вывода QEP_A на вход QВ квадратурного преобразователя, а сигнал с вывода
QEP_B подать на вход QА (входы A и B меняются местами).
Рисунок 13.2 - Диаграмма входных сигналов
13.2 Квадратурный преобразователь
На рисунке 13.3 показана схема квадратурного преобразователя.
Рисунок 13.3 - Схема квадратурного преобразователя
Режимы работы
Квадратурный преобразователь поддерживает четыре режима работы:
- режим квадратурного счета;
- режим счета/направления;
- режим счета вверх;
63
- режим счета вниз.
Выбор режима зависит от значения поля QSRC регистра QDECCTL.
Режим квадратурного счета
Квадратурный преобразователь формирует сигнал направления вращения, тактовый
сигнал и сигнал направления счета (вверх/вниз) для счетчика позиции.
Рисунок 13.4 - Временная диаграмма и автомат состояний работы
в квадратурном режиме счета
Направление вращения ротора определяется по порядку смены передних и задних
фронтов на входах QEP_A и QEP_B. К примеру, если за передним фронтом сигнала на
входе QEP_A следует передний фронт сигнала на входе QEP_B (см. рисунок 13.4), то
направление вращения следует считать прямым, а счетчик позиции работает на
увеличение. Если же за передним фронтом сигнала на входе QEP_B следует передний
64
фронт сигнала на входе QEP_A, то направление вращения следует считать инверсным, а
счетчик позиции работает на уменьшение. Если на обоих выводах зафиксировано
одновременно два фронта, то такое состояние считается ошибочным.
Квадратурный преобразователь выдает четыре счетных импульса на один период
входного сигнала, поскольку использует для счета передний и задний фронт сигналов.
Режим счета/направления
В этом режиме вывод QEP_A работает как вход тактовых импульсов, а вывод
QEP_B - как вход задания направления счета. Счетчик позиции в этом режиме работает
по каждому переднему фронту сигнала на входе QEP_A.
Режим вверх
Режим используется для вычисления частоты следования импульсов на вывод
QEP_A. Фронт задается битом XCR регистра QDECCTL. Счетчик всегда работает на
увеличение.
Режим вниз
Режим используется для вычисления частоты следования импульсов на выводе
QEP_A. Фронт задается битом XCR. Счетчик всегда работает на уменьшение.
13.3 Счетчик позиции
Работа счетчика позиции контролируется посредством регистров QEPCTL и
QPOSCTL, которыми задается режим счета, сброса и хранения, а также логика для
формирования внешнего сигнала синхронизации.
Режимы сброса счетчика позиции
Счетчик позиции может накапливать результат в течение многих оборотов вала, а
может подсчитывать позицию только за один оборот, сбрасываясь каждый раз по
событию прихода индексной метки. В зависимости от назначения могут использоваться
следующие способы сброса счетчика позиции:
- по сигналу индексации;
- по переполнению;
- только по первому сигналу индексации;
- по таймеру временных отсчетов.
Режим задается полем PCRM регистра QEPCTL.
Счетчик сбрасывается в ноль при его переполнении или при превышении значения
регистра максимального значения QPOSMAX. Флаг прерывания, возникающего при
переполнении счетчика, устанавливается в регистре QFLG.
Режим сброса по сигналу индексации
Режим сброса по сигналу индексации включен по умолчанию.
При получении сигнала с вывода индексации QEP_I при счете вверх счетчик
обнулится по следующему фронту сигнала тактирования QCLK. Если же сигнал
индексации был получен при счете вниз, то в счетчик будет загружено значение
QPOSMAX (см. рисунок 13.5).
При получении первого сигнала индексации, схема дожидается любого изменения на
квадратурных входах и запоминает значение этого события - фронт, активный вывод
(QEP_A или QEP_B), а также направление вращения. Этот момент времени называется
маркером индексации. При появлении этого события устанавливается бит FIMF регистра
QEPSTS, а направление вращения сохраняется в бите FIDF. В дальнейшем, сброс счетчика
65
будет производиться только в присутствии сигнала индекса и соответствия сохраненным
значениям маркера индексации. Если направление вращения изменится, то для
формирования сброса сохраненное в маркере значение фронта (передний или задний
фронт) меняется на обратное. Это сделано с целью привязки индекса к квадратурному
сигналу QA/QB, а также для более точной обработки индексации, чтобы исключить
влияние ширины импульса на выводе индексации. Сохраненные значения используются
при сбросе по маркеру индексации (в случае, если поле в регистре QEPCTL поле
IEL=11b).
Рисунок 13.5 - Временная диаграмма сброса по сигналу индексации
По каждому сигналу индексации, включая маркер индексации, содержимое счетчика
сохраняется в регистре QPOSILAT, а направление вращения - в бите QDLF регистра
QEPSTS. Если при сохранении значение счетчика QPOSCNT не равно ни нулю, ни
значению QPOSMAX, то выставляется флаг ошибки счетчика позиции (бит PCEF в
регистре QEPSTS) и флаг прерывания (бит PCE в регистре QFLG). Флаг ошибки счетчика
позиции обновляется с каждым индексом, а флаг прерывания может быть сброшен только
программно.
Поле настройки события индексации для сохранения счетчика позиции IEL (регистр
QEPCTL) игнорируется. Также только в этом режиме могут устанавливаться флаг ошибки
счетчика позиции PCEF и флаг соответствующего прерывания.
66

 

 

 

 

 

 

 

 

содержание      ..      1       2         ..

 

//////////////////////////////////////////