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

 

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

 

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

 

   

 

   

 

содержание      ..     3      4      5      6     ..

 

 

 

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

 

 

 

 

65 

Функционирование 
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. 

 

 

66 

Контроллер  устанавливает  прерывание  канала  DMA  в  этом  режиме  работы  только 

тогда,  когда  последний  цикл  передач  DMA  выполняется  с  использованием  режима 
«основной»  Также  необходимо  помнить,  что  для  режима  «основной»  авто-запросы  не 
действуют. 

В таблице 8.10 указаны константы, которые должны быть записаны пользователем в 

регистр CHANNEL_CFG первичной структуры управляющих данных канала для работы с 
периферией в режиме «разборка-сборка». 

 

Т а б л и ц а   8 . 1 0   – Конфигурация первичной структуры управляющих данных канала для 
работы с периферией в режиме «разборка-сборка» 

 

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  Контроллер выполняет 4 передачи DMA (2

R

 = 2

2

 = 4)  

N-1 

13-4 

– 

Настраивает контроллер на выполнение N передач DMA.  
Так как поле R_power задает значение 2, то необходимо 
задавать значение N, кратное 4. Число, равное N/4, это 
количество раз, которое нужно настраивать 
альтернативные управляющие данные.  
Задается пользователем 

next_use_burst  3 

Для данного режима бит должен быть сброшен 

cycle_ctrl  

2-0 

110b 

Контроллер  работает  с  периферией  в  режиме  «разборка-
сборка»  с  использованием  первичных  управляющих 
данных канала

 

 
В  указатель  конца  данных  источника  SRC_DATA_END_PTR  первичной  структуры 

необходимо  записать  адрес  конца  области  памяти,  в  которой  последовательно 
расположены  нужное  количество  наборов  управляющих  данных  для  программирования 
альтернативной структуры канала. 

В указатель конца данных приемника  DST_DATA_END_PTR первичной структуры 

необходимо записать адрес конца альтернативной управляющей структуры используемого 
канала. 

На  рисунке  8.5  показан  пример  функционирования  контроллера  в  режиме   

«разборка-сборка». 

 
 

 

 

67 

 

 

Рисунок 8.5 –

 

Пример функционирования контроллера в режиме работы с 

периферией «разборка-сборка» 

 
Инициализация 
1 Первичная  структура  управляющих  данных  настраивается  для  работы  с 

периферией в режиме «разборка-сборка» путем записи в cycle_ctrl значения 110b. Так как 
управляющие данные канала состоят из 4 слов, R_power = 0010b. Поскольку количество 
задач равно 4, то N = 16, т. е. в значение поля N–1 = 00Fh. 

2 Управляющие данные для шагов A, B, C, D располагаются в области ОЗУ. Адрес 

конца этой области заносится в регистр SRC_DATA_END_PTR первичных управляющих 
данных.  Пример размещения и заполнения управляющих данных для альтернативной 
структуры, показан в таблице 8.11. Исходя из примера, в регистр SRC_DATA_END_PTR 
необходимо занести значение  2000015Ch. 
 
Т а б л и ц а   8 . 1 1   –  Пример  размещения  управляющих  данных  для  альтернативной 
структуры 

Тип данных 

Адрес ОЗУ 

Регистр 

Значение 

Управляющие 
данные для 
задачи D 

2000015Ch 

Не используется 

XXXXXXXXh 

20000158h 

CHANNEL_CFG 

cycle_ctrl = 001b, 2

R

 = 4, N = 4 

20000154h 

DST_DATA_END_PTR 

2000DE00h 

20000150h 

SRC_DATA_END_PTR 

2000D000h 

Управляющие 
данные для 
задачи C 

2000016Ch 

Не используется 

XXXXXXXXh 

20000168h 

CHANNEL_CFG 

cycle_ctrl = 111b, 2

R

 = 8, N = 5 

20000164h 

DST_DATA_END_PTR 

2000CE00h 

20000160h 

SRC_DATA_END_PTR 

2000C000h 

 
 
 

 

 

68 

Окончание таблицы 8.11 

Тип данных 

Адрес ОЗУ 

Регистр 

Значение 

Управляющие 
данные для 
задачи B 

2000017Ch 

Не используется 

XXXXXXXXh 

20000178h 

CHANNEL_CFG 

cycle_ctrl = 111b, 2

R

 = 2, N = 8 

20000174h 

DST_DATA_END_PTR 

2000BE00h 

20000170h 

SRC_DATA_END_PTR 

2000B000h 

Управляющие 
данные для 
задачи A 

2000018Ch 

Не используется 

XXXXXXXXh 

20000188h 

CHANNEL_CFG 

cycle_ctrl = 111b, 2

R

 = 4, N = 3 

20000184h 

DST_DATA_END_PTR 

2000AE00h 

20000180h 

SRC_DATA_END_PTR 

2000A000h 

 

В  регистр  DST_DATA_END_PTR  первичной  структуры  необходимо  занести  адрес 

конца альтернативной структуры управляющих данных используемого канала. Например, 
при  использовании  канала  9  в  регистр  DST_DATA_END_PTR  необходимо  занести 
значение XXXXX29Ch. 

3 Включается  контроллер  DMA  и  разрешается  работа  канала  путем  установки 

соответствующего каналу бита в регистре CHNL_ENABLE_SET и бита MASTER_ENBL в 
регистре CFG. Также необходимо удостовериться, что запросы канала не замаскированы 
(сброшен соответствующий каналу бит в регистре CHNL_REQ_MASK_SET). 

 
Функционирование 
1 Первичная структура, копирование данных для задачи А. По получении запроса на 

обслуживание  контроллер  выполняет  4  передачи  DMA.  Эти  передачи  записывают 
альтернативную структуру управляющих данных для задачи А. 

Далее контроллер сразу же выполняет задачу А и по окончании проводит процедуру 

арбитража.  После  выставления  нового  запроса  на  обслуживание,  при  условии,  что  этот 
запрос является наиболее приоритетным, процесс продолжается. 

2 Первичная структура, копирование данных для задачи B. Контроллер выполняет 4 

передачи  DMA.  Эти  передачи  записывают  альтернативную  структуру  управляющих 
данных для задачи B.  

Далее  контроллер  выполняет  задачу  B.  Для  завершения  задачи  необходимо  три 

запроса (программных или от периферии). По окончании контроллер проводит процедуру 
арбитража.  После  выставления  нового  запроса  на  обслуживание,  при  условии,  что  этот 
запрос является наиболее приоритетным, процесс продолжается. 

3 Первичная структура, копирование данных для задачи C. Контроллер выполняет 4 

передачи  DMA.  Эти  передачи  записывают  альтернативную  структуру  управляющих 
данных для задачи C. 

Далее  контроллер  выполняет  задачу  C  и  по  окончании  проводит  процедуру 

арбитража.  

После выставления периферией нового запроса на обслуживание, при  условии, что 

этот запрос является наиболее приоритетным, процесс продолжается. 

4 Первичная структура, копирование данных для задачи D. Контроллер выполняет 4 

передачи  DMA.  Эти  передачи  записывают  альтернативную  структуру  управляющих 
данных для шага D. Контроллер записывает в cycle_ctrl первичных данных значение 000b 
для индикации о том, что эта структура управляющих данных является «неправильной».  

Далее  контроллер  выполняет  задачу  D,  используя  основной  цикл  DMA,  входит  в 

прерывание канала DMA (если включено) и запускает процедуру арбитража. Цикл работы 
с периферией в режиме «разборка-сборка» завершен. 
 
 
 

 

 

69 

8.5

 

Индикация ошибок 

Контроллер может отключить канал DMA Сi в следующих случаях: 
- при завершении цикла DMA; 
- при чтении режима канала «недействительный»; 
- при появлении ошибки на шине AHB-Lite. 
Как  только  контроллер  получает  сообщение  об  ошибке  по  шине  AHB-Lite,  он 

отключает  канал,  в  котором  обнаружена  ошибка  и  устанавливает  флаг  ERR_CLR  в 
одноименном регистре. 

Для  того  чтобы  определить  канал,  в  котором  произошла  ошибка,  программа, 

выполняемая  процессором,  должна  всегда  хранить  данные  о  каналах,  которые  недавно 
вызывали прерывания, т. е. завершали работу и отключались. 

Алгоритм определения канала с ошибкой: 
-  необходимо  прочитать  регистр  CHNL_ENABLE_SET  с  целью  создания  текущего 

списка отключенных каналов; 

-  процессор  должен  сравнить  список  выключенных  каналов,  полученный  в 

результате чтения регистра CHNL_ENABLE_SET, с данными о каналах, которые недавно 
вызывали прерывания. Канал, который отключился и по которому отсутствуют данные о 
вызове прерывания, это и есть канал, с которым связана ошибка. 

В  контроллере  DMA  присутствует  возможность  использования  режимов  защиты 

шины  AHB-Lite:  при  записи  в  приемник,  при  чтении  из  источника  и  при  обращении  к 
структурам  управляющих  данных  каналов.  Защита  шины  в  каждой  из  ситуаций 
настраивается  индивидуально.  Доступными  режимами  защиты  являются:  кэширование, 
буферизация, привилегированный доступ. 

Защита  шины  при  записи  в  приемник  настраивается  полем  dst_prot_ctrl  в  ячейке 

CHANNEL_CFG структуры управляющих данных канала. 

Защита  шины  при  чтении  из  источника  настраивается  полем  src_prot_ctrl  в  ячейке 

CHANNEL_CFG структуры управляющих данных канала. 

Защита  шины  при  обращении  контроллера  к  структурам  управляющих  данных 

каналов настраивается полем CHNL_PROT_CTRL в регистре CFG. 

 

 

 

70 

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 

0040h 

WWDG 

Прерывание блока сторожевого таймера 

0044h 

I2C0 

Прерывание блока I2C_0 

0048h 

I2C1 

Прерывание блока I2C_1 

004Ch 

TIM0 

Прерывание таймера 0 

0050h 

TIM1 

Прерывание таймера 1 

0054h 

TIM2 

Прерывание таймера 2 

0058h 

DMA_Stream0 

Прерывания контроллера DMA 

005Ch 

DMA_Stream1 

0060h 

DMA_Stream2 

0064h 

DMA_Stream3 

10 

0068h 

DMA_Stream4 

11 

006Ch 

DMA_Stream5 

12 

0070h 

DMA_Stream6 

13 

0074h 

DMA_Stream7 

14 

0078h 

DMA_Stream8 

15 

007Ch 

DMA_Stream9 

16 

0080h 

DMA_Stream10 

17 

0084h 

DMA_Stream11 

 

 
 

 

 

71 

Продолжение таблицы 9.1 

Номер 

вектора 

Смещение 

Обозначение 

Описание 

18 

0088h 

DMA_Stream12 

Прерывания контроллера DMA 

19 

008Ch 

DMA_Stream13 

20 

0090h 

DMA_Stream14 

21 

0094h 

DMA_Stream15 

22 

0098h 

DMA_Stream16 

23 

009Ch 

DMA_Stream17 

24 

00A0h 

DMA_Stream18 

25 

00A4h 

DMA_Stream19 

26 

00A8h 

DMA_Stream20 

27 

00ACh 

DMA_Stream21 

28 

00B0h 

DMA_Stream22 

29 

00B4h 

DMA_Stream23 

30 

00B8h 

UART0_MS 

Прерывания блока UART 0 

31 

00BCh 

UART0_RX 

32 

00C0h 

UART0_TX 

33 

00C4h 

UART0_RT 

34 

00C8h 

UART0_E 

35 

00CCh 

UART0 

36 

00D0h 

UART1_MS 

Прерывания блока UART 1 

37 

00D4h 

UART1_RX 

38 

00D8h 

UART1_TX 

39 

00DCh 

UART1_RT 

40 

00E0h 

UART1_E 

41 

00E4h 

UART1 

42 

00E8h 

UART2_MS 

Прерывания блока UART 2 

43 

00ECh 

UART2_RX 

44 

00F0h 

UART2_TX 

45 

00F4h 

UART2_RT 

46 

00F8h 

UART2_E 

47 

00FCh 

UART2 

48 

0100h 

UART3_MS 

Прерывания блока UART 3 

49 

0104h 

UART3_RX 

50 

0108h 

UART3_TX 

51 

010Ch 

UART3_RT 

52 

0110h 

UART3_E 

53 

0114h 

UART3 

54 

0118h 

PWM0 

Общее прерывание блока 0 ШИМ 

55 

011Ch 

PWM0_HD 

Общее прерывание блока 0 ШИМ высокого 
разрешения 

56 

0120h 

PWM0_TZ 

Прерывание детектора аварий блока 0 ШИМ 

57 

0124h 

PWM1 

Общее прерывание блока 1 ШИМ 

58 

0128h 

PWM1_HD 

Общее прерывание блока 1 ШИМ высокого 
разрешения 

59 

012Ch 

PWM1_TZ 

Прерывание детектора аварий блока 1 ШИМ 

60 

0130h 

PWM2 

Общее прерывание блока 2 ШИМ 

61 

0134h 

PWM2_HD 

Общее прерывание блока 2 ШИМ высокого 
разрешения 

62 

0138h 

PWM2_TZ 

Прерывание детектора аварий блока 2 ШИМ 

 

 

72 

Продолжение таблицы 9.1 

Номер 
вектора 

Смещение 

Обозначение 

Описание 

63 

013Ch 

PWM3 

Общее прерывание блока 3 ШИМ 

64 

0140h 

PWM3_HD 

Общее прерывание блока 3 ШИМ высокого 
разрешения 

65 

0144h 

PWM3_TZ 

Прерывание детектора аварий блока 3 ШИМ 

66 

0148h 

PWM4 

Общее прерывание блока 4 ШИМ 

67 

014Ch 

PWM4_HD 

Общее прерывание блока 4 ШИМ высокого 
разрешения 

68 

0150h 

PWM4_TZ 

Прерывание детектора аварий блока 4 ШИМ 

69 

0154h 

PWM5 

Общее прерывание блока 5 ШИМ 

70 

0158h 

PWM5_HD 

Общее прерывание блока 5 ШИМ высокого 
разрешения 

71 

015Ch 

PWM5_TZ 

Прерывание детектора аварий блока 5 ШИМ 

72 

0160h 

PWM6 

Общее прерывание блока 6 ШИМ 

73 

0164h 

PWM6_HD 

Общее прерывание блока 6 ШИМ высокого 
разрешения 

74 

0168h 

PWM6_TZ 

Прерывание детектора аварий блока 6 ШИМ 

75 

016Ch 

PWM7 

Общее прерывание блока 7 ШИМ 

76 

0170h 

PWM7_HD 

Общее прерывание блока 7 ШИМ высокого 
разрешения 

77 

0174h 

PWM7_TZ 

Прерывание детектора аварий блока 7 ШИМ 

78 

0178h 

PWM8 

Общее прерывание блока 8 ШИМ 

79 

017Ch 

PWM8_HD 

Общее прерывание блока 8 ШИМ  высокого 
разрешения 

80 

0180h 

PWM8_TZ 

Прерывание детектора аварий блока 8 ШИМ 

81 

0184h 

ADC_SEQ0 

Прерывание блока АЦП 

82 

0188h 

ADC_SEQ1 

83 

018Ch 

ADC_SEQ2 

84 

0190h 

ADC_SEQ3 

85 

0194h 

ADC_SEQ4 

86 

0198h 

ADC_SEQ5 

87 

019Ch 

ADC_SEQ6 

88 

01A0h 

ADC_SEQ7 

89 

01A4h 

ADC_CompInt 

Прерывание компараторов блока АЦП 

90 

01A8h 

CAP0 

Прерывание блока захвата CAP_0 

91 

01ACh 

CAP1 

Прерывание блока захвата CAP_1 

92 

01B0h 

CAP2 

Прерывание блока захвата CAP_2 

93 

01B4h 

CAP3 

Прерывание блока захвата CAP_3 

94 

01B8h 

CAP4 

Прерывание блока захвата CAP_4 

95 

01BCh 

CAP5 

Прерывание блока захвата CAP_5 

96 

01C0h 

QEP0 

Прерывание квадратурного декодера QEP_0 

97 

01C4h 

QEP1 

Прерывание квадратурного декодера QEP_1 

98 

01C8h 

BootFlash 

Прерывание контроллера загрузочной флеш-памяти 

99 

01CCh 

CMP0 

Прерывание блока аналогового компаратора 0 

100 

01D0h 

CMP1 

Прерывание блока аналогового компаратора 1 

101 

01D4h 

CMP2 

Прерывание блока аналогового компаратора 2 

102 

01D8h 

SPI0 

Прерывание контроллера SPI_0 

103 

01DCh 

SPI1 

Прерывание контроллера SPI_1 

104 

01E0h 

SPI2 

Прерывание контроллера SPI_2 

 

 

73 

Окончание таблицы 9.1 

Номер 

вектора 

Смещение  Обозначение 

Описание 

105 

01E4h 

SPI3 

Прерывание контроллера SPI_3 

106 

01E8h 

UserFlash 

Прерывание контроллера пользовательской флеш-памяти 

107 

01ECh 

GPIOA 

Прерывание контроллера GPIO порта А 

108 

01F0h 

GPIOB 

Прерывание контроллера GPIO порта B 

109 

01F4h 

GPIOC 

Прерывание контроллера GPIO порта C 

110 

01F8h 

GPIOD 

Прерывание контроллера GPIO порта D 

111 

01FCh 

GPIOE 

Прерывание контроллера GPIO порта E 

112 

0200h 

GPIOF 

Прерывание контроллера GPIO порта F 

113 

0204h 

GPIOG 

Прерывание контроллера GPIO порта G 

114 

0208h 

GPIOH 

Прерывание контроллера GPIO порта H 

115 

020Ch 

Ethernet 

Прерывание контроллера Ethernet 

116 

0210h 

CAN0 

Прерывания контроллера CAN 

117 

0214h 

CAN1 

118 

0218h 

CAN2 

119 

021Ch 

CAN3 

120 

0220h 

CAN4 

121 

0224h 

CAN5 

122 

0228h 

CAN6 

123 

022Ch 

CAN7 

124 

0230h 

CAN8 

125 

0234h 

CAN9 

126 

0238h 

CAN10 

127 

023Ch 

CAN11 

128 

0240h 

CAN12 

129 

0244h 

CAN13 

130 

0248h 

CAN14 

131 

024Ch 

CAN15 

132 

0250h 

RTC 

Прерывание блока RTC 

133 

0254h 

USB 

Прерывание контроллера USB OTG 

 

Первоначально адрес начала таблицы прерываний 00000000h. 
Таблица векторов может быть размещена по другому адресу в памяти программ или 

в ОЗУ. В случае размещения таблицы прерываний в области ОЗУ появляется возможность 
изменять  обработчики  прерываний  в  процессе  выполнения  программы.  Положение 
таблицы векторов в памяти определяется регистром VTOR, см. таблицу 9.2. 
 
Т а б л и ц а   9 . 2  – Регистр смещения таблицы векторов 

 

VTOR 

E000_ED08h 

Сброс: 00000000h 

 

 

7

6

5

4

3

2

1

0

15

14

13

12

11

10

9

8

23

22

20

19

18

17

16

31

30

29

28

27

26

25

24

21

з ч

TBLOFF

з ч

TBLOFF

0

 

 

74 

Окончание таблицы 9.2 

Поле 

Биты 

Описание 

TBLOFF 

31-10 

Биты 31-10 адреса таблицы векторов 

9-0 

Данные биты всегда должны быть равны 0, т.к. адрес таблицы 
векторов должен быть выровнен по границе 1024 байт 

 

Обработчики  прерываний  можно  динамически  менять,  но  при  этом  обязательно 

следует располагать следующие элементы: 

- начальное значение основного указателя стека; 
- вектор сброса Reset; 
- вектор NMI; 
- вектор исключения HardFault. 
Остальные прерывания не могут генерироваться, пока не будут разрешены. 

 
Контроллер прерываний NVIC 

Контроллер обеспечивает: 
-  программное  задание  уровня  приоритета  независимо  для  каждого  прерывания  в 

диапазоне от 0 до 7 (прерывание с уровнем 0 имеет наивысший приоритет); 

- генерирование сигнала прерывания по фронту и по уровню сигнала; 
- динамическое изменение приоритета прерываний; 
- разделение по группам с одинаковым приоритетом и по подгруппам внутри одной 

группы; 

- передача  управления  из  одного  обработчика  в  другой  без  восстановления 

контекста. 

Процессор автоматически сохраняет в стеке свое состояние при входе в обработчик 

прерывания  и  восстанавливает  свое  состояние  после  завершения  обработки  прерывания, 
т. е. без необходимости программирования этих операций. 

 
Обработка прерываний по уровню и по фронту 

Контроллер прерываний поддерживает прерывания, как по фронту, так и по уровню. 

Прерывание  по  фронту  –  импульсное  прерывание,  которое  может  иметь  длительность 
большую или равную длительности такта системной частоты.  

Прерывание  по  уровню  возникает  до  тех  пор,  пока  устройством  удерживается 

заданный  уровень  сигнала.  Если  прерывание  по  уровню  не  было  снято  до  завершения 
работы обработчика прерываний, то контроллер NVIC вновь начинает его обработку.  

В  случае  прихода  импульсного  прерывания  от  любого  источника  в  момент 

обработки  предыдущего,  в  контроллере  устанавливается  флаг,  сигнализирующий  о 
приходе  нового  прерывания,  которое  будет  обработано  после  завершения  обработки 
текущего прерывания. В случае, если контроллер NVIC находится в состоянии ожидания 
и приходит импульсное прерывание от того же источника, обработка выполнится только 
один раз. 

Для  управления  прерываниями  используются  пять  групп  регистров  ISER,  ICER, 

ISPR, ICPR и IABR. Подробное описание в приложении В. 

 

 

75 

10

 

Порты 

В состав микроконтроллера входят порты ввода-вывода: 8-разрядный порт H и семь 

16-разрядных портов – порт A, порт B, порт C, порт D, порт E, порт F, порт G. Структуры 
всех портов и функционирование идентичны. 

Полученные  данные  сохраняются  в  регистре  DATA  порта.  Данные  для  передачи 

записываются в регистр DATAOUT порта.  

Каждый  цифровой  вывод  порта  микроконтроллера  может  использоваться  как 

двунаправленный  вывод  общего  назначения  (режим  GPIO).  Помимо  этого  все  выводы 
имеют альтернативные функции (от одной до трех, а выводы A0 – A7 по четыре).  

Управление выводами осуществляется посредством регистров общего назначения и  

регистров GPIO.  

На рисунке 10.1 приведена структурная схема  нулевого вывода цифрового порта А 

микроконтроллера. Серым цветом отмечены нулевые биты регистров управления. Схемы 
всех выводов идентичны. 

 

 

 

Рисунок 10.1 – Вывод цифрового порта А микроконтроллера  

и управляющие регистры 

 
Схема  состоит  из  двунаправленной  площадки  вывода,  фильтра  входных  сигналов, 

мультиплексора выбора номера альтернативной функции, мультиплексора выбора режима 
работы (режим GPIO либо режим альтернативной функции). 

Для  каждого  вывода  задается  режим  работы  (регистры  GPIODEN,  OUTENSET), 

номер  альтернативной  функции,  режим  подтяжки  Pull-up  (регистр  GPIOPUCTL),  режим 

 

 

76 

нагрузочной  способности  (регистр  GPIODSCTL),  а  также  производится  настройка  на 
работу в режиме с открытым коллектором (регистр GPIOODCTL). Входной сигнал может 
подаваться  для  дальнейшей  обработки  как  напрямую  (асинхронный  вход),  так  и 
проходить обработку через фильтр.  

После сброса все выводы, кроме выводов JTAG, выводов D11 и E0, конфигурируются 

как  выводы  общего  назначения  (режим  GPIO)  и  находятся  в  третьем  состоянии. 
Направление  работы  выводов  определяется  состоянием  бит  регистра  OUTENSET  (для 
сброса установленных бит следует записать единицы в регистр OUTENCLR).  

Для  перевода  желаемого  вывода  порта  в  режим  альтернативной  функции 

необходимо  установить  соответствующий  бит  в  регистре  ALTFUNCSET  порта.  Для 
отключения  альтернативной  функции  нужно  записать  единицу  в  соответствующий  бит 
регистра  ALTFUNCCLR.  Выбор  номера  альтернативной  функции  осуществляется 
посредством регистра GPIOPCTLx. Каждому выводу соответствуют два бита регистра. 

На рисунке 10.2 показана функциональная схема блока управления альтернативной 

функцией вывода. 

 

 

 

Рисунок 10.2 – Схема блока управления альтернативной функцией вывода 

 

 

 

Рисунок 10.3 – Схема соединения блоков управления альтернативными функциями 

выводов микроконтроллера и блока UART2 

 

 

77 

Входы  и  выходы  периферийных  блоков  в  процессе  работы  коммутируются  с 

выводами  микроконтроллера  при  условии,  что  для  этих  выводов  включен  режим 
альтернативной  функций.  В  связи  с  этим  периферийный  блок  может  передавать 
информацию  на  несколько  выводов  одновременно.  В  то  же  время  прием  информации 
может  осуществляться  только  с  одного  вывода,  во  избежание  конфликтов  уровней 
сигналов  (для  этого  дополнительно  предусмотрена  система  приоритета  альтернативных 
функций).  Количество  выводов,  сигналы  с  которых  могут  быть  переданы  на 
периферийный блок, для каждого блока различно (от одного до трех).  

Для примера, рассмотрим схему взаимодействия входа RxD блока UART2 и выводов 

микроконтроллера, запрограммированных на прием внешних сигналов (см. рисунок 10.3).  

Блок  UART2  может  принимать  информацию  с  одного  из  выводов  F11,  D0  или  F4. 

Режим альтернативной функции может быть включен как для одного вывода (на который 
поступают  внешние  данные),  так  и  для  всех  трех.  Номер  альтернативной  функции 
UART_RxD2 для каждого из выводов разный.  

Варианты программирования выводов для приема данных:   
1 Прием  данных  предполагается  осуществлять  через  вывод  F11.  Альтернативная 

функция  UART_RxD2  является  первой  и  имеет  наивысший  приоритет.  Для  выбора  этой 
функции  в  регистре  GPIOPCTLF  в  поле  Pin11  следует  записать  значение  00h  (значение 
после сброса). Состояния полей Pin0 (регистр GPIOPCTLD) и Pin4 (регистр GPIOPCTLF) 
не  важно.  Т. е.  даже  если  одновременно  будут  включены  функции  UART_RxD2  для 
вывода F11 и любого из двух других, на вход блока UART2 будет скоммутирован вывод 
F11. 

2 Прием  данных  предполагается  осуществлять  через  вывод  D0.  Альтернативная 

функция  UART_RxD2  является  второй  и  имеет  средний  приоритет.  Для  выбора  этой 
функции в регистре GPIOPCTLD в поле Pin0 следует записать значение 01h.  

Состояние  поля  Pin4  (регистр  GPIOPCTLF)  не  важно,  а  вот  состояние  поля  Pin11 

(регистр  GPIOPCTLF)  не  должно  быть  00b  (т. е.  для  вывода  F11  должна  быть  выбрана 
любая  альтернативная  функция  кроме  UART_RxD2).  Только  в  этом  случае  вывод  D0 
будет скоммутирован на вход блока UART2.  

Если  для  выводов  F11  и  D0  одновременно  выбрана  функция  UART_RxD2,  то 

согласно  приоритету,  на  вход  блока  UART2  будет  скоммутирован  вывод  F11  (даже  в 
случае,  если  режим  альтернативной  функции  этого  вывода  выключен)  и  соответственно 
данные с вывода D0 не будут приняты.   

3 Прием  данных  предполагается  осуществлять  через  вывод  F4.  Альтернативная 

функция  UART_RxD2  является  третьей  и  имеет  низший  приоритет.  Для  выбора  этой 
функции в регистре GPIOPCTLF в поле Pin4 следует записать значение 10h.  

При  этом  состояние  поля  Pin11  (регистр  GPIOPCTLF)  не  должно  быть  00b  и 

состояние поля Pin0 (регистр GPIOPCTLD) не должно быть 01b (т. е. для выводов F11 и 
D0  должны  быть  выбраны  любые  альтернативные  функции  кроме  UART_RxD2).  В  этом 
случае вывод F4 будет скоммутирован на вход блока UART2.  

Если для выводов F4 и F11 и/или D0 одновременно выбрана функция UART_RxD2, 

то на вход блока UART2 будет скоммутирован вывод, альтернативная функция которого 
имеет более высокий приоритет и соответственно данные с вывода F4 не будут приняты.   

Указанные 

правила 

программирования 

выводов 

для 

приема 

данных 

распространяются на все периферийные блоки. 

Для  разрешения  работы  вывода  необходимо  установить  соответствующий  бит  в 

регистре GPIODENi. Если бит сброшен, то вывод находится в третьем состоянии. 

Выводы A1 – A7 могут также использоваться как входы аналогового компаратора.  
Ко  всем  площадкам  выводов  подключены  входные  фильтры.  На  рисунке  10.4 

показана  структурная  схема  фильтра  нулевого  вывода  порта  А  (в  названии  регистров 
присутствует «0», указывая на управляющие регистры порта А).  

 

 

 

78 

 

 

Рисунок 10.4 – Структурная схема фильтра нулевого вывода порта А 

 
Входной  сигнал  с  вывода  порта  может  приниматься  как  напрямую  (асинхронный 

режим), так  и пересинхронизироваться (синхронизироваться с тактовой частотой работы 
микроконтроллера). Управление осуществляется регистром GPIOSEi. Дополнительно есть 
возможность  включения  накопления  трех  или  шести  отсчетов  входного  сигнала  для 
помехоустойчивости  вывода.  Если  результаты  всех  отсчетов  совпадают,  сигнал 
передается  дальше  по  схеме,  в  противном  случае  состояние  сигнала  не  меняется. 
Временные интервалы между отсчетами задаются в количестве тактов системной частоты 
посредством регистров GPIOQPAD и GPIOQPEH. Временной интервал задается один для 
всех выводов порта.    

Включение  фильтра  и  задание  режима  его  работы  осуществляется  посредством 

регистров GPIOQEi, GPIOQMi. 

Схема  вывода  позволяет  также  осуществлять  гибкое  управление  прерываниями  и 

задавать,  по  какому  аппаратному  событию  генерировать  прерывание  (по  какому  фронту 
или  уровню).  При  возникновении  прерывания  в  регистре  INTSTATUS  устанавливается 
соответствующий  флаг,  и  выставляется  прерывание  в  контроллере  прерываний  NVIC. 
Прерывание может быть сгенерировано программно записью единицы в соответствующий 
бит регистра INTSTATUS. 

Прерывание  может  быть  сброшено  программно  записью  единицы  в 

соответствующий  бит  регистра  INTCLEAR.  Для  разрешения  прерывания  вывода  порта 
следует  записать  единицу  в  соответствующий  выводу  бит  регистра  INTENSET,  а  для 
запрета прерывания – единицу в бит регистра INTENCLR. 

Для  задания  события,  по  которому  генерируется  прерывание,  используются 

регистры  INTTYPESET  и  INTPOLSET,  а  для  сброса  настроек  –  INTTYPECLR  и 
INTPOLCLR, соответственно.  

Для  управления  состоянием  выводов  порта  дополнительно  используется  механизм 

маскирования. Он позволяет устанавливать желаемый уровень сигнала на нужном выводе, 
не  затрагивая  состояние  других  выводов.  16-разрядный  порт  условно  разбивается  на 
старший и младший байты; для доступа по маске к младшему байту используется массив 
регистров MASKLOWBYTE, а к старшему – MASKHIGHBYTE.  

Каждый массив состоит из 256 регистров, каждый регистр имеет порядковый номер 

(от  00h  до  FFh),  который  является  маской.  Так,  например,  для  порта  А  выделены  две 
области памяти с адресами 80010400h – 800107FCh для  младшего байта и 8001_0800h – 
80010BFCh для  старшего.  Биты  адреса  с 9 по 2 являются  маской. Таким образом,  адресу 
80010400h  соответствует  маска  00h  (MASKLOWBYTE[0x00]),  адресу  80010404h  –  01h 
(MASKLOWBYTE[0x01]) и т. д.  

 
 

 

 

79 

Для того, чтобы изменить состояние выводов порта с использованием маски, нужно 

записать  новое  значение  в  соответствующий    элемент  массива  (MASKLOWBYTE  или 
MASKHIGHBYTE) с порядковым номером, совпадающим со значением маски.  

Разряды  порта,  закрытые  «нулями»  маски,  останутся  неизменными,  а  остальные 

примут новые значения. На рисунке 10.5 показан механизм маскирования младшего байта 
порта А.    

 

 

 

Рисунок 10.5 – Механизм изменения состояния младшего байта порта А  

с маскированием 

 
Для  изменения  0,  1,  6  и  7  битов  регистра  порта  нужно  использовать  маску 

11000011b. Эта маска является частью (биты с 9 по 2)  адреса 8001070Ch (дополнительно 
механизм  вычисления  маски  указан  на  рисунке  10.5).  Новое  значение  XX90h  данных, 
которое  требуется  передать  в  порт  (при  этом  старший  байт  числа  не  важен),  нужно 
записать в ячейку с адресом 8001070Ch. Далее это значение будет аппаратно маскировано 
и размещено в регистре порта DATAOUT.  

Аналогично выполняется маскирование старшего байта (см. рисунок 10.6). Разница 

лишь  в  том,  что  в  данном  случае  берется  старший  байт  нового  значения,  а  младший  не 
важен.  

 

 

 

Рисунок 10.6 – Механизм изменения состояния старшего байта порта А 

 с маскированием 

 

 

 

80 

11

 

Таймеры 

Микроконтроллер  содержит  три  блока  32-разрядных  таймеров.  Все  блоки 

идентичны. 

Счетчик  таймера  работает  по  системному  тактовому  сигналу.  Кроме  этого  таймер 

может  управляться  внешним  сигналом,  а  также  синхронизироваться  по  внешнему 
сигналу. На рисунке 11.1 представлена функциональная схема таймера.  

 

 

 

Рисунок 11.1 – Функциональная схема таймера 

 
Управление  таймером  осуществляется  посредством  регистра  CTRL.  Начальное 

значение задается регистром VALUE. Для включения таймера нужно установить бит ON. 
Счетчик таймера декрементируется от значения заданного регистром  VALUE до нуля на 
частоте  тактового  сигнала  микроконтроллера.  По  достижении  нуля  счетчик  таймера 
загружается  значением,  заданным  регистром  перезагрузки  RELOAD,  и  если  разрешено 
битом INTEN, генерируется прерывание. При возникновении прерывания устанавливается 
флаг INT в регистре INTSTATUS_INTCLEAR.    

Если  установлен  бит  EXTINPUT_EN,  то  счетчик  таймера  работает  на  частоте 

тактового сигнала микроконтроллера, только если сигнал на входе EXTIN имеет уровень 
логической единицы.  

Если  одновременно  установлены  биты  EXTINPUT_EN  и  EXTINPUT_CLK,  то 

тактирование  счетчика  таймера  происходит  по  положительному  фронту  внешнего 
сигнала, приходящего на вход  EXTIN. При этом частота внешнего сигнала должна быть 
как минимум в два раза меньше частоты системного тактового сигнала. 

Для  каждого  таймера  имеется  свой  внешний  вход  синхронизации  EXTIN.  Для 

таймера  0  это  Timer_IN0,  для  таймеров  1  и  2  –  Timer_IN1  и  Timer_IN2,  соответственно, 
которые  являются  альтернативными  функциями  различных  выводов  микроконтроллера. 
Дополнительно  на  внешний  вход  синхронизации  таймера  2  подключены  сигналы  блока 
RTC  с  частотой  1  Гц  и  1  кГц.  Выбор  сигнала  внешней  синхронизации  для  таймера  2 
осуществляется посредством регистра TEST_PWM_MUX. 

 
 

 

 

 

 

 

 

 

содержание      ..     3      4      5      6     ..