使用Beaglebone Black的PRU(一)
AM335x的PRUSSv2简介
PRUSSv2 = Programmable Real-time Unit Sub-System = PRU-ICSS= PRU Industrial Communication Sub-System =上一代PRUSS的v2进化版
这是一个AM335x等芯片上自带的,独立于ARM CPU运行的子系统。其时钟频率为200MHz,可以直接控制特定的IO口,可以达到非常高的实时性要求。一般两种情况需要用到它:一是linux系统的实时性不满足要求的时候;二是芯片的功能模块不够用的时候(比如你想要10个UART,但芯片上只有6个,那你可以用它再创造4个)。
几个可能的应用场合:
高速ADC
摄像机接口
显示屏接口
音频处理
电机反馈控制
从某种意义上说,有了它,我们就有了一个片上CPLD或FPGA,只不过PRU编程不是用VDHL语言,而是用专门的汇编语言。它的汇编语句都是在一个时钟周期内执行完的,没有流水线之类可能扰乱程序时序的因素,这使得程序的可预测性大大提高。
AM335x芯片上带有两个PRU。(不知道能不能同时工作?)
配置BBB,安装PRU assembler和示例程序
root@beaglebone:~/tmp# git clone git://github.com/beagleboard/am335x_pru_package.git
Cloning into 'am335x_pru_package'...
...
root@beaglebone:~/tmp# cd am335x_pru_package/pru_sw/app_loader/interface
root@beaglebone:~/tmp/am335x_pru_package/pru_sw/app_loader/interface# make CROSS_COMPILE="" #无需交叉编译
root@beaglebone:~/tmp/am335x_pru_package/pru_sw/app_loader/interface# cd ../../utils/pasm_source
root@beaglebone:~/tmp/am335x_pru_package/pru_sw/utils/pasm_source# ./linuxbuild
root@beaglebone:~/tmp/am335x_pru_package/pru_sw/utils/pasm_source# cd ../../example_apps
编辑一下example_apps目录中的Makefile,把 PASM?=../utils/pasm_2 改成 PASM?=../utils/pasm,然后继续
root@beaglebone:~/tmp/am335x_pru_package/pru_sw/example_apps# make CROSS_COMPILE=""
编译完成以后PRU assembler和示例程序就安装好了。但BBB默认是没有使能pruss的(BB white好像不用进行下面这一步),所以还需要修改一下系统dtb文件
cd /boot
cp am335x-boneblack.dtb am335x-boneblack.dtb_orig
dtc -I dtb -O dts am335x-boneblack.dtb > am335x-boneblack.dts
(插一句,我之前没有仔细看过dtc命令,原来还可以反编译dtb文件啊。。。)
vim am335x-boneblack.dts
找到
pruss@4a30000 {
...
status = "disabled";
...
};
把"disabled"改成"okay",保存。
dtc -I dts -O dtb am335x-boneblack.dts > am335x-boneblack.dtb_pru
cp am335x-boneblack.dtb_pru am335x-boneblack.dtb
然后重启。
最后,把程序运行需要的库文件拷贝到 /usr/lib 目录下,省得每次都得添加引用目录:
即把 pru_sw/app_loader/lib 目录中的4个文件拷贝到 /usr/lib 中。
至此,BBB也已经配置好了。
重启后我们用自带的example_apps测试一下
root@beaglebone:~#cd tmp/am335x_pru_package/pru_sw/example_apps/bin
root@beaglebone:~/tmp/am335x_pru_package/pru_sw/example_apps/bin# modprobe uio_pruss #每次重启都要运行这句话
root@beaglebone:~/tmp/am335x_pru_package/pru_sw/example_apps/bin# ./PRU_memAccessPRUDataRam
INFO: Starting PRU_memAccessPRUDataRam example.
AM33XX
INFO: Initializing example.
INFO: Executing example.
File ./PRU_memAccessPRUDataRam.bin open passed
INFO: Waiting for HALT command.
INFO: PRU completed transfer.
INFO: Example executed succesfully.
测试成功。
本文最开始的git文件建议在电脑上也clone一份,里面有几个关于PRU的pdf文档可能需要经常查看。
原文:https://blog.csdn.net/wyt2013/article/details/17396555
使用Beaglebone Black的PRU(一)相关推荐
- 使用Beaglebone Black的PRU(二)——Hello World!
经过上一篇博客,已经安装好了am335x_pru_package,本文将用它来编写.编译一个最简单的PRU程序--闪烁BBB上的led灯. 大体来说每个PRU程序都包括两部分: 在ARM核的Linux ...
- 聊聊Beaglebone Black的cape和device tree overlay和dtc命令【转】
本文转载自:https://blog.csdn.net/wyt2013/article/details/16846171 本文是我早期写的,语言略混乱.请直接看我最新整理的,适用于初学者的文章< ...
- BeagleBone 可编程实时单元(PRU)控制 GPIO 和 UART
概述 BeagleBone(及其底层 TI Sitara SoC)最独特的功能是其 PRU,它们是与 ARM 内核完美集成的实时微控制器.您有两个选项可以对 PRU 进行编程: 基础用法 要将编译后的 ...
- AI 边缘计算平台 - BeagleBone AI 64 简介
BeagleBone AI 64 简介 Beagleboard 组织 2022 年 6 月份发布了BeagleBone® AI-64平台的B1版本,由seeedstudio开发,是一款用于开发人工智能 ...
- BeagleBone Black使用(一):狗板简介
前言 BeagleBone 与 Arduino 和 Raspberry Pi(树莓派)可以说是目前应用最广泛的三大嵌入式开源平台.而 BeagleBone 在一定程度上可视为融合了 Arduino 与 ...
- 2021-09-20 BeagleBone 系列 简介
目录 BeagleBone 系列简介 1. BeagleBone Black 2. BeagleBone® Blue 3. SeeedStudio BeagleBone Green 4. SanClo ...
- 通过ROS控制真实机械臂(9)---上、下位机和PRU程序
上位机的程序redwall_arm_server.cpp 功能是作为ROS的move_group客户端接收ROS规划的机械臂路点信息,进行三次样条插补获得各个关节或自由度的运动PVAT数据,然后通过T ...
- Beaglebone Black教程BeagleBone Black安装最新系统映像
Beaglebone Black教程BeagleBone Black安装最新系统映像 BeagleBone Black安装最新系统映像 Beaglebone Black虽然已经预装了Debian操作系 ...
- Beaglebone Black教程项目1闪烁板载LED
Beaglebone Black教程项目1闪烁板载LED 项目1闪烁板载LED 当设置完你的Beaglebone Black的时候,可能早就非常期待你的第一个项目了.下面就来满足大家的愿望,当然,这个 ...
最新文章
- html使用highcharts绘制饼图,html js highcharts绘制圆饼图表
- Lotgstash日志切割示例
- javaBean 转json指定key-value个数
- TCP/IP详解学习笔记(7)-广播和多播,IGMP协议
- [html] title与h1、b与strong、i与em的区别分别是什么?
- 三层神经网络实现手写数字的识别(基于tensorflow)
- 计算机有什么著名基金经理排名,百万年薪的基金经理,都是什么专业出身?!...
- 【缅怀妈妈系列诗歌】之十三:妈妈,我接您回家
- Code Review : Review Board + Svn
- XS9951 两通道多合一同轴高清解码芯片 国产
- spssfisher判别分析步骤_SPSS判别分析
- 徒手撸了一个 API 网关,理解更透彻了,代码已上传github,自取~
- 2021Java不死我不倒,吊打面试官系列!
- 九龙战登录只显示一个服务器,九龙战登录失败进不去解决办法
- 浅谈Android之SurfaceFlinger相关介绍(一)
- linux dumpe2fs命令
- VS2017无法调试Unity
- 使用FFMPEG工具包移除视频的水印
- 基于asp.net816mvc汽车维修保养年检管理系统三层架构
- shell高级编程笔记(第九章 变量重游)
热门文章
- day68_淘淘商城项目_01_电商介绍 + 互联网术语 + SOA + 分布式 + 集群介绍 + 环境配置 + 框架搭建_匠心笔记
- SD卡读卡程序 C语言 IO模拟,请问大神些,有谁用过SD模式读写SD卡?时序是用单片机IO模拟。...
- 阿里云 OSS 云存储 文件上传
- OMV安装CUPS共享惠普打印机为网络打印机
- iPhone软件开发之多线程初步
- Siamese network
- php如何判断ipv4_PHP校验IPV4和IPV6格式正确性
- 雷军:你尽管天天骂我,但在你最需要的时候还是我拿出了830万!
- 【机器学习】多项式回归的思想以及在sklearn中使用多项式回归(含示例+代码)
- CSS选择器及优先级 总结