NXP i.MX7D
запуск второго ядра
После сброса камня или подачи питания, второе ядро A7 находится в состоянии сброса.
Мастер - ядро A7-0 выполняет следующий код:
MOV32 R0, SRC_BASE
@ Адрес исполняемого кода для второго ядра A7
MOV32 R7, Запуск_второго_ядра_A7 @ Этот адрес
STR R7, [R0, SRC_GPR3] @ Пробить в этот регистр
@ Стартовать второе ядро A7
LDR R7, [R0, A7RCR1]
BIS R7, 1 << A7_CORE1_ENABLE
STR R7, [R0, A7RCR1]
@ Дождаться завершения выхода второго ядра
@ Из состояния аппаратного сброса
1:
LDR R7, [R0, A7RCR0]
TST R7, 1 << A7_CORE_POR_RESET1
BNE 1b
@ Процедура ожидания необязательная
@ Но может пригодиться
Всё готово! Второе ядро уже выполняет программу,
которая размещена по адресу
Запуск_второго_ядра_A7.
А теперь главное. Второе ядро - это практически полностью изолированная от первого ядра конструкция.
И для него всё так же, нужно настраивать отдельно стек и таблицу TTB. Это первое, что нужно сделать.
Счётчик машинных циклов в каждом ядре свой. Будьте внимательны! Впрочем, всё уже сделано.
Смотрите файл
Настройки A7 - 1.asm в
комплекте разработчика.