Перейти к содержимому

Как установить pasm в beaglebone black

  • автор:

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

Fast GPIO tutorial

Здравствуйте, уважаемые хабравчане! Давно уже являюсь читателем Хабра, но до сих пор не мог найти достойной темы для публикации. И вот, наконец, хорошенько прошерстив Хабр и 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 Architecture

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

Подсистема PRU включает в себя следующие блоки:

PRUSS scheme

  • Два ядра 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).

Fast GPIO

Высокая скорость портов ввода/вывода обеспечивается прямым доступом 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

  1. root@beaglebone:/home/debian# git clone https://github.com/beagleboard/am335x_pru_package.git
  2. root@beaglebone:/home/debian# cd am335x_pru_package/
  3. 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *