Программирование ARM nRF5x PPI: Programmable Peripheral Interconnect Thu, March 28 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

nRF5x PPI: Programmable Peripheral Interconnect Печать
Добавил(а) microsin   

Подсистема программируемых соединений между периферийными устройствами (Programmable Peripheral Interconnect, PPI) позволяет им взаимодействовать автономно друг с другом, используя задачи и события [2], и все это независимо от CPU. PPI позволяет осуществить точную синхронизацию между периферийными устройствами, когда для приложения существуют жесткие ограничения реального времени, и устраняет необходимость в активности CPU для реализации поведения, которое может быть предварительно запрограммировано с использованием PPI.

Примечание: расшифровку терминов и сокращений см. в словарике [3].

nRF52 PPI block diagram fig01

Рис. 1. Блок-схема PPI.

В дополнение к полностью программируемым соединениям между периферийными устройствами, у PPI есть набор предварительно запрограммированных каналов, где конечная точка события (event end point, EEP) и конечные точки задач (task end points, TEP) зафиксированы аппаратно. Эти фиксированные каналы можно индивидуально разрешать, запрещать или добавлять к группам каналов PPI точно так же, как и обычные каналы PPI.

Таблица 1. Конфигурируемые и фиксированные каналы PPI.

Экз. Канал Количество каналов Количество групп каналов
PPI 0 .. 19 20 6
PPI фикс. 20 .. 31 12

PPI предоставляет механизм автоматического запуска задачи на одном периферийном устройстве как результат возникновения события на дpугом периферийном устройстве. Задача соединяется с событием через канал PPI. Канал PPI скомпонован из трех регистров конечной точки, одного EEP и двух TEP. Задача периферийного устройства подсоединяется к TEP с использованием адреса регистра задачи, связанного с задачей. Подобным образом событие периферийного устройства подключается к EEP с использованием адреса регистра события, связанного с событием.

На каждом канале PPI сигналы синхронизируются с частотой тактов 16 МГц, чтобы избежать любого внутреннего нарушения таймингов установки и удержания. Как следствие события, которые синхронны с частотой тактов 16 МГц, будут задержаны на 1 период тактов, в то время как другие, асинхронные события будут задерживаться на интервал времени до 1 периода тактов 16 МГц.

Обратите внимание, что на шорткаты (shortcuts, как определено в регистре SHORTS в каждом периферийном устройстве) не влияет эта синхронизация 16 МГц, и поэтому они не задерживаются.

Каждая TEP реализует механизм ветвления (fork), который позволяет запустить вторую задачу одновременно с задачей, которая сработала в TEP. Эта вторая задача конфигурируется регистре TEP, в группах регистров FORK, например FORK.TEP[0] связан с PPI-каналом CH[0].

Существует 2 способа разрешения и запрета каналов PPI:

• Разрешение или запрет каналов PPI индивидуально, используя регистры CHEN, CHENSET и CHENCLR.
• Разрешение или запрет каналов PPI в группах каналов PPI через ENABLE и DISABLE задач этих групп. Перед тем, как эти задачи сработают, группа каналов PPI должна быть сконфигурирована для определения, какие каналы PPI какой группе принадлежат.

Примечание: обратите внимание, что когда канал принадлежит двум группам m и n, и CHG[m].EN и CHG[n].DIS произошли одновременно (m и n могут быть равны или отличаться), то EN на этом канале имеет приоритет.

Задачи PPI (например, CHG[0].EN) могут сработать через PPI наподобие любой другой задачи. Это означает, что они могут быть подключены к каналу PPI в качестве TEP. Одно событие может запустить несколько задач при использовании нескольких каналов, и таким же способом одна задача может быть запущена несколькими событиями.

[Предварительно запрограммированные (фиксированные) каналы]

Некоторые каналы PPI запрограммированы изначально. Эти каналы не могут быть сконфигурированы кодом CPU, но они могут быть добавлены в группы, и разрешены или запрещены так же, как и обычные, программируемые каналы PPI. FORK TEP для этих каналов все еще можно запрограммировать и использовать в приложении. Ниже в таблице 2 показаны эти предварительно запрограммированные каналы.

Таблица 2. Pre-programmed channels.

Канал EEP TEP
20 TIMER0->EVENTS_COMPARE[0] RADIO->TASKS_TXEN
21 RADIO->TASKS_RXEN
22 TIMER0->EVENTS_COMPARE[1] RADIO->TASKS_DISABLE
23 RADIO->EVENTS_BCMATCH AAR->TASKS_START
24 RADIO->EVENTS_READY CCM->TASKS_KSGEN
25 RADIO->EVENTS_ADDRESS CCM->TASKS_CRYPT
26 TIMER0->TASKS_CAPTURE[1]
27 RADIO->EVENTS_END TIMER0->TASKS_CAPTURE[2]
28 RTC0->EVENTS_COMPARE[0] RADIO->TASKS_TXEN
29 RADIO->TASKS_RXEN
30 TIMER0->TASKS_CLEAR
31 TIMER0->TASKS_START

Таблица 3. Экземпляры PPI.

Баз. адрес Периф. устройство Экз. Описание
0x4001F000 PPI PPI Programmable Peripheral Interconnect

Таблица 4. Обзор регистров PPI nRF52832.

Регистр Смещ. Описание
TASKS_CHG[0].EN 0x000 Разрешение группы каналов 0.
TASKS_CHG[0].DIS 0x004 Запрет группы каналов 0.
TASKS_CHG[1].EN 0x008 Разрешение группы каналов 1.
TASKS_CHG[1].DIS 0x00C Запрет группы каналов 1.
TASKS_CHG[2].EN 0x010 Разрешение группы каналов 2.
TASKS_CHG[2].DIS 0x014 Запрет группы каналов 2.
TASKS_CHG[3].EN 0x018 Разрешение группы каналов 3.
TASKS_CHG[3].DIS 0x01C Запрет группы каналов 3.
TASKS_CHG[4].EN 0x020 Разрешение группы каналов 4.
TASKS_CHG[4].DIS 0x024 Запрет группы каналов 4.
TASKS_CHG[5].EN 0x028 Разрешение группы каналов 5.
TASKS_CHG[5].DIS 0x02C Запрет группы каналов 5.
CHEN 0x500 Регистр разрешения каналов.
CHENSET 0x504 Регистр установки разрешения каналов.
CHENCLR 0x508 Регистр очистки разрешения каналов.
CH[0].EEP 0x510 Конечная точка события канала 0.
CH[0].TEP 0x514 Конечная точка задачи канала 0.
CH[1].EEP 0x518 Конечная точка события канала 1.
CH[1].TEP 0x51C Конечная точка задачи канала 1.
CH[2].EEP 0x520 Конечная точка события канала 2.
CH[2].TEP 0x524 Конечная точка задачи канала 2.
CH[3].EEP 0x528 Конечная точка события канала 3.
CH[3].TEP 0x52C Конечная точка задачи канала 3.
CH[4].EEP 0x530 Конечная точка события канала 4.
CH[4].TEP 0x534 Конечная точка задачи канала 4.
CH[5].EEP 0x538 Конечная точка события канала 5.
CH[5].TEP 0x53C Конечная точка задачи канала 5.
CH[6].EEP 0x540 Конечная точка события канала 6.
CH[6].TEP 0x544 Конечная точка задачи канала 6.
CH[7].EEP 0x548 Конечная точка события канала 7.
CH[7].TEP 0x54C Конечная точка задачи канала 7.
CH[8].EEP 0x550 Конечная точка события канала 8.
CH[8].TEP 0x554 Конечная точка задачи канала 8.
CH[9].EEP 0x558 Конечная точка события канала 9.
CH[9].TEP 0x55C Конечная точка задачи канала 9.
CH[10].EEP 0x560 Конечная точка события канала 10.
CH[10].TEP 0x564 Конечная точка задачи канала 10.
CH[11].EEP 0x568 Конечная точка события канала 11.
CH[11].TEP 0x56C Конечная точка задачи канала 11.
CH[12].EEP 0x570 Конечная точка события канала 12.
CH[12].TEP 0x574 Конечная точка задачи канала 12.
CH[13].EEP 0x578 Конечная точка события канала 13.
CH[13].TEP 0x57C Конечная точка задачи канала 13.
CH[14].EEP 0x580 Конечная точка события канала 14.
CH[14].TEP 0x584 Конечная точка задачи канала 14.
CH[15].EEP 0x588 Конечная точка события канала 15.
CH[15].TEP 0x58C Конечная точка задачи канала 15.
CH[16].EEP 0x590 Конечная точка события канала 16.
CH[16].TEP 0x594 Конечная точка задачи канала 16.
CH[17].EEP 0x598 Конечная точка события канала 17.
CH[17].TEP 0x59C Конечная точка задачи канала 17.
CH[18].EEP 0x5A0 Конечная точка события канала 18.
CH[18].TEP 0x5A4 Конечная точка задачи канала 18.
CH[19].EEP 0x5A8 Конечная точка события канала 19.
CH[19].TEP 0x5AC Конечная точка задачи канала 19.
CHG[0] 0x800 Группа каналов 0.
CHG[1] 0x804 Группа каналов 1.
CHG[2] 0x808 Группа каналов 2.
CHG[3] 0x80C Группа каналов 3.
CHG[4] 0x810 Группа каналов 4.
CHG[5] 0x814 Группа каналов 5.
FORK[0].TEP 0x910 Конечная точка задачи канала 0.
FORK[1].TEP 0x914 Конечная точка задачи канала 1.
FORK[2].TEP 0x918 Конечная точка задачи канала 2.
FORK[3].TEP 0x91C Конечная точка задачи канала 3.
FORK[4].TEP 0x920 Конечная точка задачи канала 4.
FORK[5].TEP 0x924 Конечная точка задачи канала 5.
FORK[6].TEP 0x928 Конечная точка задачи канала 6.
FORK[7].TEP 0x92C Конечная точка задачи канала 7.
FORK[8].TEP 0x930 Конечная точка задачи канала 8.
FORK[9].TEP 0x934 Конечная точка задачи канала 9.
FORK[10].TEP 0x938 Конечная точка задачи канала 10.
FORK[11].TEP 0x93C Конечная точка задачи канала 11.
FORK[12].TEP 0x940 Конечная точка задачи канала 12.
FORK[13].TEP 0x944 Конечная точка задачи канала 13.
FORK[14].TEP 0x948 Конечная точка задачи канала 14.
FORK[15].TEP 0x94C Конечная точка задачи канала 15.
FORK[16].TEP 0x950 Конечная точка задачи канала 16.
FORK[17].TEP 0x954 Конечная точка задачи канала 17.
FORK[18].TEP 0x958 Конечная точка задачи канала 18.
FORK[19].TEP 0x95C Конечная точка задачи канала 19.
FORK[20].TEP 0x960 Конечная точка задачи канала 20.
FORK[21].TEP 0x964 Конечная точка задачи канала 21.
FORK[22].TEP 0x968 Конечная точка задачи канала 22.
FORK[23].TEP 0x96C Конечная точка задачи канала 23.
FORK[24].TEP 0x970 Конечная точка задачи канала 24.
FORK[25].TEP 0x974 Конечная точка задачи канала 25.
FORK[26].TEP 0x978 Конечная точка задачи канала 26.
FORK[27].TEP 0x97C Конечная точка задачи канала 27.
FORK[28].TEP 0x980 Конечная точка задачи канала 28.
FORK[29].TEP 0x984 Конечная точка задачи канала 29.
FORK[30].TEP 0x988 Конечная точка задачи канала 30.
FORK[31].TEP 0x98C Конечная точка задачи канала 31.

Смещение адреса: 0x500

Биты регистра CHEN:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id f e d c b a Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW CH0 Разрешение или запрет канала 0.
0: канал запрещен.
1: канал разрешен.
      ...
f RW CH31 Разрешение или запрет канала 31.
0: канал запрещен.
1: канал разрешен.

Смещение адреса: 0x504

Операция Read считывает значение поля CH{i} в регистре CHEN.

Биты регистра CHENSET:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id f e d c b a Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW CH0 Разрешение канала 0, если записана 1. Запись 0 не дает никакого эффекта.
Если прочитан 0: канал запрещен.
Если прочитана 1: канал разрешен.
      ...
f RW CH31 Разрешение канала 31, если записана 1. Запись 0 не дает никакого эффекта.
Если прочитан 0: канал запрещен.
Если прочитана 1: канал разрешен.

Смещение адреса: 0x508

Операция Read считывает значение поля CH{i} в регистре CHEN.

Биты регистра CHENCLR:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id f e d c b a Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW CH0 Запрещение канала 0, если записана 1. Запись 0 не дает никакого эффекта.
Если прочитан 0: канал запрещен.
Если прочитана 1: канал разрешен.
      ...
f RW CH31 Запрещение канала 31, если записана 1. Запись 0 не дает никакого эффекта.
Если прочитан 0: канал запрещен.
Если прочитана 1: канал разрешен.

Смещение адреса: 0x510

Биты регистра CH[0].EEP:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW EEP Указатель на регистр события. Принимает только адреса регистров из группы Event.

Смещение адреса: 0x514

Биты регистра CH[0].TEP:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW TEP Указатель на регистр задачи. Принимает только адреса регистров из группы Task.

...

Смещение адреса: 0x5A8

Биты регистра CH[19].EEP:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW EEP Указатель на регистр события. Принимает только адреса регистров из группы Event.

Смещение адреса: 0x5AC

Биты регистра CH[19].TEP:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW TEP Указатель на регистр задачи. Принимает только адреса регистров из группы Task.

Смещение адреса: 0x800

Биты регистра CHG[0]:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id f e d c b a Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW CH0 Подключает или исключает канал 0.
Если прочитан 0: канал исключен (Excluded).
Если прочитана 1: канал подключен (Included).
      ...
f RW CH31 Подключает или исключает канал 31.
Если прочитан 0: канал исключен (Excluded).
Если прочитана 1: канал подключен (Included).

...

Смещение адреса: 0x814

Биты регистра CHG[5]:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id f e d c b a Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW CH0 Подключает или исключает канал 0.
Если прочитан 0: канал исключен (Excluded).
Если прочитана 1: канал подключен (Included).
      ...
f RW CH31 Подключает или исключает канал 31.
Если прочитан 0: канал исключен (Excluded).
Если прочитана 1: канал подключен (Included).

Смещение адреса: 0x910

Биты регистра FORK[0].TEP:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW TEP Указатель на регистр задачи.

...

Смещение адреса: 0x98C

Биты регистра FORK[31].TEP:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW TEP Указатель на регистр задачи.

[Ссылки]

1. PPI Programmable Peripheral Interconnect site:infocenter.nordicsemi.com.
2nRF5x GPIOTE: события и задачи GPIO.
3Bluetooth: аббревиатуры и термины.

 

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


Защитный код
Обновить

Top of Page