NXP i.MX7D и механизм семафоров

Семафор передаёт сигналы между всеми ядрами А7 и М4. И представляет собой однобитный флаг, который можно программно установить или сбросить. Всего в процессоре 16 семафоров.

	@ Затактировать модуль Semaphore
	MOV32 R10, CCM_BASE + CCGR40
	MOV R9, 0x00003333
	STR R9, [R10]

	@ Пользуйтесь!
	

Идея довольно простая: если любое из ядер А7 устанавливает флаг в 1, то сбросить его может только это же ядро.
При этом любое ядро может в любое время считывать флаг, но занять его можно при условии,
что флаг был освобождён ядром-хозяином.

Если два ядра одномоментно попытаются установить флаг (семафор), то одному из ядер конечно повезёт,
а другое ядро получит сообщение о неудаче.

Cortex-M4 так же включён в эту игру. Но если А7 устанавливают семафор в "1", то М4 может установить его в "2".

	@ Установить нулевой семафор
	@ Со стороны Cortex-A7
	MOV32 R10, SEMA4_BASE
	MOV R12, 1 @ A7 может ставить только единичку
	STRB R12, [R10, Gate00] @ Обращение к семафорам байтовое
	

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