Как стать автором
Обновить

Real-time BeagleBone: использование высокоскоростных выводов

Время на прочтение 14 мин
Количество просмотров 28K
Всего голосов 46: ↑45 и ↓1 +44
Комментарии 7

Комментарии 7

Эталонно-оформленная публикация!
Спасибо! Приятно слышать. Старался.
Замечаю тенденцию, под такими статьями (качественным, насыщенными полезной информацией) почти нет комментариев. Это аудитория хабра изменилась так? Скорее всего да, так как «разогнали» железячников. А так, возможность поморгать светодиодом с частотой под 200МГц многих ардуинщиков да обладателей raspberry Pi удивила бы.
Комментировать особо нечего. Я работаю с системами на базе AM335x (основа BeagleBone), потому в теме.
Зашел. Прочитал. Понял, что годнота. Добавил в избранные. Плюсанул статью, плюсанул в карму. Ушел. Чего комментировать-то?
Я так понял, у PRU нету векторов прерываний? Т.е. нельзя настроить сработку прерывания по входу и вызов соответствующей функции?
Векторов прерываний нет. Реализовывать придется самому. PRU просто в цикле должен опрашивать определенные биты в конфигурационных регистрах. Почти все аппаратные прерывания ARM можно перенаправить в PRU для более быстрой или детерминированной по времени обработки.
Примеры разнообразных прерываний можно найти в репозитории pru_package, а диаграммы и принципы их работы здесь
Каждое ядро имеет свою область памяти, а также совместную с Linux область памяти

Я бы сказал чуть по-другому: «у каждого из ядер PRU-ICSS (они идут обычно парами, на AM335x одна пара, на AM57xx — две) есть своя память кода и память инструкций, а также собственная оперативная память, общая для двух этих ядер (8KB/8KB код/данные и 12KB общей для AM3358). Linux (вернее ARM) способен залезть в мозги PRU-ICSS и прочитать/записать содержимое всей памяти этого модуля, сами TI заявляют, что можно читать даже состояния регистров, но я не знаю, зачем это надо.

Также можно просто реализовать дополнительную аппаратуру, например шестой UART ttyO6.

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

Стоит заметить, что PRU может также обращаться к обычным портам ввода/вывода и другой периферии ядра ARM через шину OCP, но это займет больше времени.

Хвала Texas Instruments за то, что положили драйвера периферии не только для Linux, но и „голого железа“, поэтому можно взять исходники из StarterWare и они заработают на PRU-ICSS, только нужно взвести один конфигурационный бит, разрешающий выход на интерконнект.

Программный стек PRU‐ICSS package

Лично я пользуюсь remoteproc-pru для загрузки прошивки и стандартным rpmsg для обмена, совсем без UIO.

разгрузка основного ядра ARM путем выполнения задач, строго ограниченных по времени

Или любой задачи, когда обычный DMA уже слишком тупой.

Отдельно хочется подсыпать ложку дегтя в конкретно AM335x/BeagleBoneBlack — вся „высокоскоростная“ периферия делит ноги процессора с видеовыходом. Так что или дисплей, или GPIO PRU, за исключением 4 или 5 пинов
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории