什么是PRU-ICSS?
Beaglebone Black所运用的TI芯片(XAM3359AZCZ revision 2)包含了一个主处理器和许多其他的模块,如下图:
虽然ARM Cortex-A8内核的功用十分强壮,可是Linux的实质决议了关于高速外部硬件的操控可能会不太简略完结。而TI的这款芯片添加了两个额定的CPU(称为PRU-ICSS或PRUSSv2,即可编程实时单元和工业用通讯子体系,今后简称PRU),然后使这个问题得到了改进。这意味着这两个CPU可以别离运转不同的软件,以便减轻底层协议在硬件接口和处理上的作业量。
这款芯片就好像具有Arduino相似功用的处理器,只不过其额定的两个CPU作业频率要高出许多,到达200MHz,也便是说在许多情况下可以不再需求外部逻辑器材、CPLD或许FPGA。
一般来说,针对一个以上的处理器进行编程是一件费事事,而且处理器之前还需求有通讯协议。而TI的这款芯片则极大的简化了这种费事,原因有两点,一是用于PRU的代码可以从主处理器下载,二是为了便利处理器之间通讯,芯片集成了同享存储器。
PRU的效果表现在哪儿?
关于低速通讯来说,传统的I2C或许常用的协议就现已满足应付了,因而PRU在这些当地并没有用武之地。而关于高速通讯PRU可能会十分受欢迎,这是因为PRU可以消除因为Linux环境切换所形成的中止,然后接连对硬件供给服务,也不会对ARM主处理器形成担负。这儿有一些常见的而且可行比方;
• 连接到高速ADC(例如模仿信号捕捉)
• CCD 或许CMOS摄像机
• LED或许LCD显示器
• 生成模仿视频信号(视频编码器)
• 自定义PWM或许其他自定义协议或非标准协议
• 带反应的电机操控
据我所知,PRU甚至可以用某个外部时钟来作为并行数据的时钟。
怎么运用PRU?
当时来说运用PRU即不简略也不算困难。首要的难度在于在网上找到完好的实例。这儿供给的内容便是从网上搜集而来的。
首要过程如下:
1. 在BB-Black上使能PRU体系
2. 将PRU汇编程序安装到BBB上(当时用于PRU的代码是都是用汇编写的,还没有人开宣布这对PRU的C编译器)
3. 编写代码。PRU应用程序分为两部分,而且相互之间可以经过存储器寻址来进行通讯,即
(a) 汇编代码,编译为.bin机器指令文件,以便在PRU上运转
(b) C言语代码,运转于主处理器上,也便是Linux体系上。这些代码担任将汇编代码下载到RPU
4. 装备Linux设置树,启用一切引脚用于输入输出
5. 运转程序
PRU运用什么样的汇编代码?
还好寄存器数量很给力(都是32位),而且指令都是正交的,别的用于操作的位和字节参阅都适当令人满意,所以相对而言,比起某些常见的汇编言语,例如针对P%&&&&&%或其他8位处理器的汇编来说,PRU运用的汇编代码算是比较简略上手的了。汇编指令数量并不多,目前为止我只运用了大约45条指令中的一小部分,成果还不错。(一般自己不愿意为了某个不太好用的处理器花太多时刻学习汇编 – 但RPU彻底不同,其指令集形似很好用的姿态)
PRU是否物有所值?
我觉得答案是必定的,应为有了PRU就可以在高速状态下操控硬件(比方50MHz)。每条指令在PRU上只需求5纳秒的执行时刻(200MHz频率,每条指令占用一个周期),而且不存在因为Linux内核形成的不规则推迟。
难点在哪儿?
难点首要在于和设备树相关的东西。期望在未来可以有所改变或许变得更简略。在一个典型的微操控器上,输入输出的设定是用特定的寄存器完结的,这些寄存器存在于某个设备的某一部分存储映射中。据我所知,当时运转在BB-Black上的软件不允许用户经过传统的C代码对这些硬件寄存器进行直接的修正操作。当时选用的办法叫做“设备树”。它是一个文本文件,而且被紧缩成为二进制文件,在体系启动时需求对其进行读操作。该文件高速体系哪些是用于输入输出的引脚。设备树的修正也适用于使能RPU体系。
有人从前经过设备树封闭了BB-Black上默许闪耀的LED灯。设备树文件坐落BB-Black的/boot目录下,是一个二进制文件,其内容天然无法看懂(如下图),一般文件名为.dtb或许.dtbo。