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

Здравствуйте, уважаемые хабравчане! Давно уже являюсь читателем Хабра, но до сих пор не мог найти достойной темы для публикации. И вот, наконец, хорошенько прошерстив Хабр и GT, удивился отсутствию публикаций, посвященных программируемой подсистеме реального времени ( PRU‐ICSS ) линейки процессоров Sitara TM фирмы TI .
Наиболее популярной и доступной отладочной платой с процессором AM335x является так называемый «одноплатник» BeagleBone Black (White,Green). И именно наличие PRU делает BeagleBone наиболее предпочтительным для использования в hardware-проектах по сравнению с другими бюджетными одноплатниками типа *Pi. Кроме того, в некоторых случаях BBB-PRU может достаточно эффективно заменить связку ПК — МК — ПЛИС .
В данной статье приведен краткий обзор подсистемы PRU и режимов работы высокоскоростных портов ввода/вывода, рассмотрен пошаговый пример инициализации высокоскоростных портов вывода (Enhanced GPIO) и произведена оценка их производительности.
Введение
Сразу оговорюсь, что не буду подробно останавливаться на характеристиках и настройках самого BeagleBone, так как данные темы достаточно хорошо освещены в интернете, просто в конце приведу наиболее полезные, на мой взгляд, ресурсы. А сконцентрируюсь непосредственно на подсистеме PRU‐ICSS .
Аналогичные PRU решения, из числа популярных, мною найдены только для Intel Edison(кстати, tutorial на эту тему). Но при схожей цене Edison уступает по производительности и характеристикам.
ВАЖНО! Не все описанные далее режимы работы PRU и не в полном объеме возможно реализовать с помощью BeagleBone из-за физических ограничений топологии платы.
Значительная часть приведенных в публикации материалов является переводом, адаптацией, модификацией или комбинацией ресурсов, приведенных в полезных источниках в конце статьи.
Итак, что же представляет собой подсистема реального времени?
Обзор PRU‐ICSS
PRU-ICSS состоит из двух 32-битных ядер, имеющих RISC -архитектуру и работающих на частоте 200МГц. Каждое ядро имеет свою область памяти, а также совместную с Linux область памяти, может использовать выводы общего назначения, расположенные на разъемах P8-P9, и формировать прерывания.
PRU является важным дополнением всей платформы BeagleBone, позволяющим обеспечивать поддержку для приложений с жесткими временными ограничениями. Но стоит отметить, что PRU не является аппаратным ускорителем, позволяющим повысить быстродействие Linux-приложений. На PRU можно возложить выполнение отдельных функций и задач, таких как реализация программных высокоскоростных протоколов передачи данных, в том числе и нестандартных, или цифровой обработки сигналов датчиков в режиме реально времени. Также можно просто реализовать дополнительную аппаратуру, например шестой UART ttyO6.
Архитектура PRU
Не буду углубляться в перевод мануалов, назову основные характеристики системы и прокомментирую некоторые слайды из презентаций и схемы из мануалов.

Основным преимуществом PRU является короткое время доступа к локальным памяти и периферии. В тактах опорной частоты оно даже ниже, чем у подсистемы ARM. Более подробное описание задержек записи/чтения приведено здесь.
Подсистема PRU включает в себя следующие блоки:

- Два ядра PRU, каждое включает в себя:
- 8KB памяти инструкций;
- 8KB памяти данных;
- Высокоскоростной интерфейс шины OCP для доступа к памяти и периферии ARM;
- Порты ввода/вывода ( eGPIO ) с поддержкой асинхронного захвата и последовательного вывода;
- Умножитель с возможностью накопления ( MAC );
- Быстродействующая временная память (Scratchpad memory):
- 3 блока, в каждом 30 32-битных регистров;
- Прямой доступ обеспечивает возможность быстрой синхронизации между ядрами PRU;
- Один контроллер прерываний (INTC):
- Прием до 64 внешних событий;
- 10 каналов прерываний;
- Аппаратная приоритизация событий;
- Один комплект периферии для промышленного Ethernet:
- Один таймер с 10 событиями захвата и 8 сравнения;
- Два сигнала синхронизации;
- Два 16-битных сторожевых таймера;
- Цифровые порты ввода/вывода;
- 12KB памяти общего назначения;
- Формирование 16 программных событий;
- Один двухпортовый модуль Ethernet MII;
- Один порт MDIO ;
- Один приемопередатчик UART c тактовой частотой 192МГц;
- Один модуль захвата ( ECAP );
- Поддержка гибкого управления питанием;
Теперь более подробно рассмотрим структуру быстродействующих портов ввода/вывода, что непосредственно является темой приведенного ниже урока и предметом исследования.
Управление портами ввода и вывода осуществляется с помощью регистров R31 и R30 соответствено. Примечательно, что регистр R31 также используется для формирования системных прерываний. Таким образом, запись в R31 генерирует прерывание, а чтение из регистра возвращает информацию о состоянии портов ввода (GPI) и контроллере прерываний (INTC).

Высокая скорость портов ввода/вывода обеспечивается прямым доступом PRU, в отличие от ядра ARM, у которого доступ к GPIO осуществляется через несколько уровней соединений.
Режимы работы GPIO
Режимы задаются путем установки соответствующих битов в конфигурационном регистре CFG. Прямое включение является режимом по-умолчанию и не требует дополнительных настроек.
Порты ввода (GPI — R31) имеют 4 режима работы:
Установка PASM на четвёртое ядро Beaglebone
Всем привет. Скажите пожалуйста, можно ли установить PASM на Beaglebone с четвёртым ядром (Linux beaglebone 4.19.94-ti-r42)? Если да, то как? Я находил в интернете гайд только под третье ядро.
BONKooff
24.04.22 23:56:30 MSK
- Ответить на это сообщение
- Ссылка

Что установить? Активную подвеску Porsche? Ассемблер? Зачем их ставить на ядро и как?
shalom_ ★★
( 25.04.22 22:29:24 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от shalom_ 25.04.22 22:29:24 MSK
Какая подвеска? Какое порше? Вы о чем? Есть биглбон. Видел для него есть PASM,что позволяет писать проги на ассемблере. Вот и спрашиваю. Уточнил какое у меня ядро стоит (kernal 4.x), так как гайд по установке pasm на бигл есть только для 3-его
BONKooff
( 29.04.22 16:09:51 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от BONKooff 29.04.22 16:09:51 MSK
Видел для него есть PASM,что позволяет писать проги на ассемблере.
Для какого именно ядра: ARM или PRU? Линукс ядро на ARM крутится. А PASM для PRU ядра. Но поддержка PASM истекла 6 лет назад. Новый ассемблер CLPRU появился 8 лет назад. PRU porting pasm to clpru.
gag ★★★★★
( 29.04.22 16:42:55 MSK )
- Ответить на это сообщение
- Ссылка
Saved searches
Use saved searches to filter your results more quickly
Cancel Create saved search
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
pasm: command not found #67
LuXiuneng opened this issue May 22, 2018 · 2 comments
pasm: command not found #67
LuXiuneng opened this issue May 22, 2018 · 2 comments
Comments
LuXiuneng commented May 22, 2018
I wonder if this is the correct way of installing pasm & prussdrv
- root@beaglebone:/home/debian# git clone https://github.com/beagleboard/am335x_pru_package.git
- root@beaglebone:/home/debian# cd am335x_pru_package/
- root@beaglebone:/home/debian/am335x_pru_package# make
I’ve done this but then when I tried to run a blink.p file, it says, «pasm: command not found»
The text was updated successfully, but these errors were encountered:
pra-dan commented Aug 25, 2022
The problem is the incomplete process.
After make , run sudo make install . You’ll see something like
[sudo] password for debian: install -m 0755 -d /usr/local/bin install -m 0755 pru_sw/utils/pasm /usr/local/bin cd pru_sw/app_loader/interface && CROSS_COMPILE= make install make[1]: Entering directory '/home/debian/am335x_pru_package/pru_sw/app_loader/interface' install -m 0755 -d /usr/local/lib install -m 0755 -d /usr/local/include install -m 0644 ../lib/* /usr/local/lib install -m 0644 ../include/prussdrv.h ../include/pruss_intc_mapping.h /usr/local/include make[1]: Leaving directory '/home/debian/am335x_pru_package/pru_sw/app_loader/interface'
You can probably close this issue now
Saved searches
Use saved searches to filter your results more quickly
Cancel Create saved search
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
The Beaglebone Black PASM assembler available as a Visual Studio 2017 C project and as a compiled binary.
License
OfItselfSo/PASM_Assembler
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to show
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
- Local
- Codespaces
HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
Latest commit message
Commit time
README.md
The Beaglebone Black PASM Assembler available as a compiled binary and as a Visual Studio 2017 C project.
The PASM Assembler is designed to compile PASM Assembly Code ( .p ) files into binaries which can then be run in the Programmable Realtime Units (PRU’s) of the Beaglebone boards. The PASM Assembler consists of a single Windows PASM.EXE executable of about 62Kb in size.
The PASM.EXE binary does not seem to be generally available for download and it appears that users are expected to download the C source and compile it up for themselves. This can be troublesome for those who do not have Visual Studio and/or C installed.
The purpose of this project is to provide a pre-compiled PASM.EXE binary and also a Visual Studio 2017 C solution in case you wish to compile it up yourself. In reality, if you are compiling the PASM Assembler yourself, you should probably just use the definitive source for these files which is on the BeagleBoard GitHub Repo https://github.com/beagleboard/am335x_pru_package.
You can find the PASM.EXE compiled up as a binary in the Compiled_pasm.exe_As_A_Zipfile.zip file.
The license for the PASM.EXE and the source code is the original license provided in the original repo. You can find it in the LICENCE.txt file.
It should be noted that the name PASM Assembler is also used for several other assemblers not in any way related to this one. This assembler is solely and specifically dedicated to building binaries which will run the the Programmable Realtime Units of the Beaglebone series of microprocessors.
About
The Beaglebone Black PASM assembler available as a Visual Studio 2017 C project and as a compiled binary.