BBB的PRU模块

在船用发动机测量转速的项目中,使用了BBB处理器的PRU0和PRU1两个可编程实时单元,这两个单元用于一些实时的操作。我们用PRU0进行计数,PRU1进行计时,当记满设定时间,pru1返回一个中断信号到pru0。而记的数放在了datamemory中,主程序当需要这个转速值时,就去该memory中读取计数值。

 pru的通用本地存储器可以被PRU程序使用。并且该本地PRU存储器映射到全局的地址空间,可以被用来与Linux host 共享.

PRU 实时单元,可以满足对时间有特定限制的应用程序。PRU 拥有独立的内存分配。该单元使用BBB 的引脚,还可以触发中断,并且与Linux 主设备共享存储空间。有两个相互独立的32 位PRU 核(PRU0、PRU1),分别具有8K 的程序内存和8K 的数据内存。程序内存存储每个PRU 执行的指令,数据内存存储程序中使用的数据。PRU0 使用数据RAM0,PRU1 使用数据RAM1。

使用PRU 需要编写Linux 主设备.c 程序和PRU 程序.p。Linux 主设备程序用来传递PRU 的二进制代码到PRU 核中执行。REG31 是PRU 的事件/状态寄存器,是尤其复杂的寄存器。当向REG31 写数据时,该寄存器会向中断控制器发送输出事件,将bit5 置1,并且向bit0~bit4 写数据,输出事件会发送给Linux 主设备

BBB的Debian映像中预先安装了支持PRU-ICSS使用的包,PRU-ICSS库包括了PRU Linux应用加载器API,比如加载PRU程序到PRU-ICSS中,还可以用于PRU与Linux用户空间的通信。还包括PRU汇编器,用来生成可以被PRU执行的二进制映像文件。我们用汇编语言写的源文件.p文件,然后需要汇编成小端存储的二进制文件,才能被PRU执行。

posted @ 2016-09-06 22:30  beaglebone  阅读(876)  评论(0编辑  收藏  举报