Русс правильный - поскольку в процессоре BeagleBone AM335x есть 2 ядра PRU, нет возможности запускать 4 экземпляра этой программы PRU одновременно. Я предполагаю, что вы можете загрузить один скомпилированный для одного набора контактов, выполнить измерение, остановить его, а затем загрузить другой бинарный файл, скомпилированный для датчика на разных контактах, но это будет довольно неэффективный (и уродливый, ИМХО) способ сделать это ,
Если вы знаете какую-либо сборку, она должна быть достаточно проста, чтобы обновить этот код для управления всеми 4 датчиками (PRU assembly instructions). В качестве альтернативы вы можете начать с нуля на C и использовать компилятор PRU C clpru
, как предложил Русь, хотя AFAIK все еще находится в состоянии бета-версии, и на нем мало информации. В любом случае, я бы рекомендовал считывать данные из четырех датчиков параллельно или один за другим, загружая измерения в память PRU при разных смещениях, а затем отправляя один сигнал в ARM.
В этом коде вы связаны, линия:
SBCO roundtrip, c24, 0, 4
принимает 4
байт из регистра roundtrip
(который является регистром r4
, согласно #define roundtrip r4
в верхней части файла), и загружает его в данных ФУ RAM (константа c24
устанавливается в начало ОЗУ данных в lines 39-41) со смещением 0
. Так что, если у вас 4 различных измерений в 4 регистров, вы могли бы компенсировать данные в оперативной памяти, например .:
SBCO roundtrip1, c24, 0, 4
SBCO roundtrip2, c24, 4, 4
SBCO roundtrip3, c24, 8, 4
SBCO roundtrip4, c24, 12, 4
Затем прочитайте эти 4 последовательных 32-разрядных целых чисел в программе C.
Вы получите лучшую видимость, если ваши теги были более уместными. 'beagleboneblack' и' beagleboard' будут иметь людей, которые будут комфортно работать с оборудованием, которое находится в основе вашего решения. Все ваши теги ... ну ... тоже общие. –
Но, по моему предположению, для решения вашей проблемы вам потребуется переписать программу, которая работает на PRU, для мониторинга нескольких датчиков и отправки их обратно в Cortex. Если вы делаете только несколько датчиков и все в порядке с 5-10 обновлениями в секунду, вы можете просто сделать их поочередно. Если нет, то вам придется делать их параллельно. К счастью для вас, похоже, теперь компилятор C. Это и есть 32 регистра в ядре, что означает, что вы, вероятно, могли бы уйти от хранения всего в регистрах –
(И я бы не стал заниматься несколькими ISR/событиями в Cortex. проверьте, кто изменил) –