TI:PRU处理器开发详解
写R31寄存器时,写事件号0~31到R31_PRU_VEC[4:0],同时设置R31_PRU_VEC_VALID,将产生中断输出事件到中断控制器的32~63号系统事件。两个PRU输出的中断事件相"或"输出到同一个中断号。
表7 写R31寄存器
读R31寄存器时,R31[29:0]反映PRU的输入管脚PRU_R30[29:0]的状态。R31[31:30]是映射到中断控制器的INTR_IN[0]和INTR_IN[1]的状态。
表8 读R31寄存器
3.2 通用输出寄存器R30
每个PRU有32个独立的输出管脚PRU0_R31[31:0]和PRU1_R31[31:0],写到寄存器R30[31:0]的值直接输出到PRUn_R31[31:0]管脚。
4 PRU中断控制器
PRU中断控制器支持64个系统事件,10个中断通道,10个主机中断。
图2 PRU中断控制器框图
系统事件0~31为32个外部事件如表9所示,可以通过系统配置寄存器CFGCHIP3的第3位PRUEVTSEL在两组事件中进行选择,PRUSSEVTSEL=0时选择第一列的32个外部系统事件,PRUSSEVTSEL=1时选择第二列的32个外部系统事件;系统事件32~63由写R31产生。
表9 PRUSS系统中断事件
10个通道可以由任意64个系统事件映射,可以多个系统事件映射到一个通道,但不要将一个系统事件映射到多个通道。
10个主机中断与10个通道之间可以任意映射,可以多个通道映射到一个主机中断,但不要将一个通道映射到多个主机中断,推荐按x号通道映射到x号主机中断方式映射。
主机中断0输出到R31.b30,主机中断1输出到R31.b31。主机中断2~9接输出PRUSS到ARM 和DSP的中断控制器的系统事件PRUSS_EVTOUT0~7。PRU不支持中断向量表,产生的0,1 主机中断可用来唤醒PRU,或为PRU软件提供状态查询。
PRU中断控制器寄存器说明请参考文献[2] 。
5 PRU编程
5.1 汇编工具PASM
PRU只支持汇编编程,可用任意的文本编辑器编写源代码。PASM是PRU的命令行汇编器,其语法为:
pasm[-bcmldz] [-Dname=value] [-Cname] InFile [OutFileBaseName]
参数含义如表10所示:
表10 PASM命令表
PASM将汇编代码转换成一整块可执行的二进制数据用于加载,代码从指令内存的首地址开始排放,编译时没有链接过程,没有内存映射,所以没有段,从而也没有段指示符。输出格式可以为纯二进制文件,C语言形式的数组,Hex格式文件。
5.2 PRU指令集
指令按功能分为四类:数据搬移指令,算术运算指令,逻辑操作指令,程序流控指令。指令的语法规则参考[3]。
表11 PRU指令集
除了访问外部内存的指令,其它所有PRU 指令都是单周期指令。指令中寄存器名加上后缀表示寄存器中的位、字节、半字,这种灵活的寄存器访问方式可以将数据包,结构体分解成小的数据单位处理。
表12 寄存器位域表示方式
举例说明这种寄存器访问方式:
5.3 汇编操作符
PASM支持4类汇编操作符:Hash命令,指示语句,标签,注释。
5.3.1 Hash命令
控制汇编器的预处理,包括#include,#define,#undef,#ifdef,#ifndef,#else, #endif,#error,与C语言的预处理命令用法类似。
5.3.2 指示符
指示符以"."开头,单独占一行,不一定要放在一行的开头,后面可以跟注释语句。
表13 PASM汇编指示符
5.3.3 标签
在源代码中加入标签名+":",用来标示源代码的地址,当被指令引用时,直接替换成标签所在的源代码地址。标签命名不能以数字开头,可以单独为一行,也可以与指令,注释在同一行。
5.3.4 注释
以"//"开始,以行结束符结束,可以出现在代码的任何位置。
6 PRU开发包
TI提供的PRU开发包里[4],提供了大量的实例源码,目录结构如图3所示。
图3 PRU开发包目录结构
bin目录下是Linux与Window版本的PASM工具;docs目录下的readme文件列出了TI wiki上的PRU帮助说明链接;example目录下为各种例程源码,每个例程包括CCSV3.3的DSP工程,和以".p 和.hp"结尾的PRU代码;host目录下是两个单独的PRU代码下载例程,以文件形式的和以数组形式的。
7 PRU代码下载与运行
先通过PSC使能PRU模块时钟,PRU空间才可以被访问。
PASM编译后PRU代码通过ARM/DSP从全局地址空间加载到PRU 的指令空间后,ARM/DSP通过全局空间地址将PRUCONTROL寄存器的CONTERENABLE和ENABLE置1,PRU即开始从0地址开始运行。在运行过程中ARM/DSP可以通过CONTROL控制PRU的暂停,运行,复位,及复位后的运行地址等;暂停时可以通过PRU的调试寄存器观察PRU 的寄存器状态,也可以通过调试寄存器修改PRU寄存器的值。
8 PRU调试
目前在CCSV5里可以用仿真器连接PRU 查看寄存器,内存。但是没有图形界面的PRU调试工具,不能在代码中加入断点这样的方式调试。可以通过以下几种方法进行间
TI PRU 独立编程 OMAPL138 处理器 相关文章:
- F1aSh存储器在TMS320C3X系统中的应用(11-11)
- 让DSP成为创新的不竭源泉(03-08)
- TMS320F2812慢速外设接口的时序控制(05-17)
- 在VC++中用ActiveX控件实现与单片机的串行通信(07-31)
- Whirlpool 选择赛普拉斯PSoC CapSense界面为其新型洗衣机产品实施触摸感应操控(03-24)
- MEGACHIPS采用SpringSoft CERTITUDE系统执行LSI验证(02-01)