概述

BeagleBone(及其底层 TI Sitara SoC)最独特的功能是其 PRU,它们是与 ARM 内核完美集成的实时微控制器。您有两个选项可以对 PRU 进行编程:

基础用法

要将编译后的固件加载到 PRU 中,首先将编译后的代码复制到 /lib/firmware 中:

示例

PRU 固件源的最小工作示例如下:

PRU 可以通过操作寄存器 #30 中的位,在单个周期内直接切换 BeagleBone 的 GPIO 引脚子集。 该寄存器在 C 中公开为 __R30,因此,修改该寄存器的内容会直接触发一个或多个 GPIO 引脚状态的更改。

编译 PRU 固件

可以使用官方 TI 工具链(clpru 编译器和 lnkpru 链接器)或 PRU 的 GCC 前端为 PRU 编译此代码。 我还没有尝试过 GCC,所以让我们坚持使用 TI 工具链。 上面的最小生成文件如下所示:

这将执行以下操作:

这会将 C 源代码编译成一个对象,然后,将该对象与一个特殊的链接器命令文件 (AM335x_PRU.cmd) 链接起来,以创建一个 PRU 可以执行的完整固件。该固件名为 am335x-pru0-fw。

配置 GPIO 引脚

在上面的例子中,我们想让 PRU 通过它的 __R30 寄存器来控制 P9_31。为此,我们必须确保 P9_31 配置为公开其 PRU 输出模式功能:

开始代码

并通过查看 LED 确认它以四分之一秒的时间间隔闪烁来验证它是否正在运行:

或者让 Linux 检查它的状态:

如果状态仍处于离线状态,则存在问题。检查 journalctl 是否有错误:

在上面的示例中,我尝试启动缺少资源表数据结构的代码。

PRU GPIO

PRU 可以通过 __R30 和 __R31 寄存器直接访问 BeagleBone Black 上可用的 GPIO 子集。这是一个方便的花花公子表,将这些寄存器中的低位映射到 BeagleBone Black 上的物理头管脚:

直接通用输出

如果您想在 pru0 上运行代码并使用 __R30 的第 0 位打开 LED(就像我们在 hello world 示例中所做的那样),上表说明您应该将 LED 插入 P9_31。 不过,要在 pru1 上运行相同的代码,您必须将 LED 插入 P8_45。 不经修改就不能在两个 PRU 上运行相同的固件,这有点烦人,但这就是 BeagleBone Black 的接线方式。

直接通用输入

在上面的 hello world 示例中,我们看到可以通过翻转 __R30 中的第一位来打开连接到 P9_31 的 LED:

PRU UART

初始化

发送数据

接收数据

PRU 中断控制器

详情参阅 亚图跨际

BeagleBone 可编程实时单元(PRU)控制 GPIO 和 UART相关推荐

  1. 树莓派python图形化编程_BlockPi: 树莓派图形化编程软件,轻松控制GPIO、SenseHAT、Picamera等硬件。...

    BlockPi 一个专门为树莓派设计的图形化编程平台,基于Google Blockly构建,适用于树莓派爱好者或者少儿编程学习. A visual programming editor app for ...

  2. TI AM335x 可编程实时模块(PRUSS)详解

    转自:http://www.itdadao.com/articles/c15a388010p0.html 1. PRU内核理解 可编程实时单元(Programmable Real-time Unit ...

  3. arm64的ioremap_4412 GPIO读 和 ioremap控制GPIO寄存器

    一.配置GPIO读 在视频14的基础上做 1.利用拨码开关来实现GPIO输入 所以AP_SLEEP对应GPC0_3,然后在drivers/gpio/gpio-exynos4.c中对应EXYNOS4_G ...

  4. Cg教程_可编程实时图形权威指南(扫描清晰版)+部分unity shader 知识

      Cg教程_可编程实时图形权威指南(扫描清晰版) .pdf (34.5 MB, 下载次数: 239) Shader Model(在 3D 图形领域常被简称SM)就是"优化渲染引擎模式&qu ...

  5. Python学习之道-串口编程TEMI880温箱控制

    Python学习之道-串口编程&TEMI880温箱控制 一.环境准备 安装pyserial库 pyserial库常用函数介绍 参考例程 二.开发实践 1.实践项目 2.协议介绍 2.1 一般的 ...

  6. FPGA芯片结构(可编程输入输出单元IOB/可配置逻辑块CLB/数字时钟管理模块DCM/ 嵌入式块RAM(BRAM)/丰富的布线资源/ 底层内嵌功能单元/内嵌专用硬核)

    目前主流的FPGA仍是基于查找表技术的,已经远远超出了先前版本的基本性能,并且整合了常用功能(如RAM.时钟管理 和DSP)的硬核(ASIC型)模块.如图1-1所示(注:图1-1只是一个示意图,实际上 ...

  7. 61-20210407华为海思Hi3516DV300的linux系统下控制GPIO口(标准linux模式点亮LED灯)

    61-20210407华为海思Hi3516DV300的linux系统下控制GPIO口(标准linux模式点亮LED灯) 2021/4/7 15:13 https://xueqiu.com/797071 ...

  8. Python黑帽编程2.4 流程控制

    Python黑帽编程2.4  流程控制 本节要介绍的是Python编程中和流程控制有关的关键字和相关内容. 2.4.1 if -..else 先上一段代码: #!/usr/bin/python # - ...

  9. 4412 GPIO读 和 ioremap控制GPIO寄存器

    一.配置GPIO读 在视频14的基础上做 1.利用拨码开关来实现GPIO输入 所以AP_SLEEP对应GPC0_3,然后在drivers/gpio/gpio-exynos4.c中对应EXYNOS4_G ...

最新文章

  1. Java基础知识强化之IO流笔记41:字符流缓冲流之复制文本文件案例02(使用 [ newLine() / readLine() ] )(重要)...
  2. 计算机相关冷门专业,211名校冷门专业和双非计算机专业,该如何选择?过来人告诉你...
  3. HDU4514(非连通图的环判断与图中最长链)
  4. 朴素贝叶斯趣味挑战项目
  5. [深度学习] Pytorch中RNN/LSTM 模型小结
  6. Linux 添加新用户账号并赋予root权限
  7. seaborn绘图入门1(lineplot+barplot+heatmap+scatterplot)
  8. Android笔记 Android艺术探索笔记 Pacel VS Serialize Demo
  9. SAP License:MM常用事物码
  10. 思科交换机路由器配置命令大全
  11. Windows驱动开发——WDM驱动
  12. Elasticsearch.service failed after enable elasticsearch security features
  13. 基于JAVA演唱会购票系统计算机毕业设计源码+系统+数据库+lw文档+部署
  14. 【Shading】Shading 着色
  15. 模具师傅告诉我塑胶模具是由这10大系统构成,不会的赶紧学习
  16. JavaScript - 运算符与表达式
  17. 最近邻算法(KNN算法)
  18. 【读书笔记】Python网络爬虫从入门到实践(第2版)-唐松,爬虫基础体系巩固和常见场景练习
  19. Qt QTreeWidget 详解
  20. Word文档中如何快速切换英文大小写

热门文章

  1. 均方误差mse均方根误差rmse_损失函数 - MSE
  2. php 柱状 折线 组合,柱状图和折线图组合怎么用
  3. Day228229.上传查询医院接口、上传查询删除科室接口、上传查询删除排班接口 -尚医通
  4. ListView的用法
  5. 华云数据又搞事情,这次是和VMware搞一个大事情
  6. 降低开关电路振铃现象的缓冲器设计方法
  7. 政务部门与公用企业之间数据共享的研究
  8. Jsp中request.getParameter(@param)值为[object HTMLInputElement]
  9. vijos P1966 夜夜的旅游计划
  10. 关于几种分布式锁的简单介绍