PRU处理器架构介绍 (开发,调试方法)

ti omapl13x, c674x, am180x,omap-l137,c6747,am170x等芯片上(本文统一以omap-l138代称)有一个pruss(programmable real time unit subsystem),可独立编程实现一些实时性要求高的个性化需求,实现产品的差异化。本文介绍pru处理器架构,开发,调试方法。
pruss简介
在系统架构上,pruss是连接在omapl138内部总线scr上的一个模块,与系统中其它主模块如arm,dsp一样,可以访问芯片上的其它外设,工作在pll0_sysclk2时钟域,即arm/dsp 频率的一半。
图1 pruss框图
pruss包括两个pru,通过自己的scr与子系统的中断控制器、指令内存、数据内存、以及系统scr相连。pru不是一个加速器,它是32-bit load/store risc架构小端处理器,每个pru有32个通用寄存器r0~r31,4k byte指令ram,512 byte数据ram,指令ram是独立的,互相之间不能访问,但数据ram可以通过映射地址互相访问;专用的30个输入引脚和32个输出引脚(注:omapl137系列没有pru外部引脚)。pru没有cache、指令流水线、及乘法指令。
1 pru内存映射
1.1 指令空间
每个pru独立的指令空间为0x00000000~0x00000fff。指令空间由外部主处理arm/dsp初始化,程序指针pc是32bit字地址,不是字节地址,如pc=2,代表指令地址0x08。
表1 pru指令空间映射表
1.2 数据空间
每个pru独立的512byte数据ram空间为0x0000~0x01ff,因为数据ram连接在pru子系统的scr上,所以子系统中的其它主模块也可以访问到这块空间,这段内存空间在另一个pru 上的映射地址为0x2000~0x21ff。
位于数据空间的还有共用的中断控制器寄存器;pru控制/状态寄存器,有各自的地址空间。
表2 pruss本地数据空间内存映射表
1.3 全局地址空间映射
pru局部地址空间在系统全局地址空间映射端口为0x01c30000,如表3所示,pru可以通过表2的局部地址,也可以通过表3的全局地址访问pruss的数据空间,通过全局地址空间访问要经过系统scr2,比通过局部地址空间访问要慢。pruss外部主模块如arm,dsp等可通过全局地址空间访问pru资源。
表3 pruss全局空间内存映射表
2控制/状态寄存器
pru0的控制/状态寄存器地址位于0x00007000~0x000077ff,pru1的控制/状态寄存器地址位于0x00007800~0x00007fff,寄存器列表如表4所示,各寄存器的详细说明请参阅[1] 。
表4 pru控制/状态寄存器表
2.1 control控制寄存器
外部主模块arm/dsp通过控制寄存器可以控制pru的运行状态。
表5 pru控制寄存器说明表
2.2 status状态寄存器
状态寄存即pru 的程序指针寄存器,与程序的真正运行状态有一个周期的延时。
2.3 wakeup唤醒使能寄存器
在程序执行slp指令进入睡眠状态之前,使能wakeup寄存器相应的位,当输入状态寄存器r31相应的位置1时,即wakeup&r31!=0时,唤醒pru。
2.4 cyclecnt周期计数器
当control[enable]=1和control[countenable]=1时,cyclecnt以pru时钟周期计数。当control[enable]=0或control[countenable]=0时,计数停止。当重新使能时,恢复继续计数。
2.5 stallcnt取指停止计数器
当control[enable]=1和control[countenable]=1,且由于某种原因pru不能取指令时,stallcnt开始以pru时钟周期计数。其值总是小于,或等于cyclecnt的值。
2.6 常量表
pru提供32个常量地址表c0~c31,intcter0-intcter31是常量表的调试接口,当pru停止时,外部主模块读取intctern即得到常量表cn的值。通过指令lbco或sbco从常量表指向的地址与寄存器之间以簇发方式传递数据。指令格式举例如下:
lbco r2, c2, 5, 8 //从c2+5 的地址读取8 字节到r2, r3。
sbco r2, c2, 5, 8 //将r2, r3 的数据写到c2+5 开始的地址。
表6 pru常量表
在性能上与指令lbbo和sbbo没有区别,利用常量表可以节省通用寄存器的使用。
0~23号常量表提供的入口地址是固定的,24~31号常量表的域可通过寄存器编程设置:
c24[11:8]通过contabblkidx0[3:0]设置;
c25[11:8]通过contabblkidx0[19:16]设置;
c28[23:8]通过contabproptr0[15:0]设置;
c29[23:8]通过contabproptr0[31:16]设置;
c30[23:8]通过contabproptr1[15:0]设置;
c31[23:8]通过contabproptr1[31:16]设置。

红米4高配版和红米4A评测:低价高配的千元机你还在等什么?
如何利用我们拥有的共享资源来高效快速地训练深度学习模型
采用Easy Drive技术的增量累加模数转换器降低设计复杂度与时间
基于LT3754的16通道LED驱动器电路
如何为应用选择最佳类型的温度传感器
PRU处理器架构介绍 (开发,调试方法)
伊朗发布最新“国产航母”,具备多架无人机弹射装置
移位寄存器74ls194_74ls194逻辑功能表
微软将向美国陆军提供用于战斗任务和士兵训练的AR系统原型
新闻 | 华为CloudEngine 16800系列交换机入选十大最具影响力新技术新产品
采用高速单片机作为引导加载-Using the High-S
星宸科技发布轩辕、越影、降龙三大系列芯片,引领 AI 赋能各行各业
简单介绍BOOST拓补电路PCB布线注意事项
非常实用的LED显示屏小知识
全面支持PCIe 4.0,SD卡再度提速
快仓智能和凯傲集团首批合作AMR下线
未来几年语音和语音识别市场将增至69亿美元
微控制器 PWM 如何输出更高效地驱动负载
中控智慧科技指纹门禁一体机smart3F介绍
压力感测技术以及电容触控芯片于对智能手机发展作用