专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
TI
PRU开发详解
2019-07-16 15:03
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
3897
10
1548
PRU开发详解.pdf
(3.81 MB, 下载次数: 55)
2015-10-25 09:19 上传 点击文件名下载附件
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
wangdezhi
2019-07-17 18:24
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 寄存器位域表示方式
举例说明这种寄存器访问方式:
R0.w2.b1=r0.b3
r0.w1.b1.t3 = r0.b2.t3 = r0.t19
r0.w2.t12 = r0.t28
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 调试工具,不能在代码中加入断点这样的方式调试。可以通过以下几种方法进行间接调试。
8.1 加入“打印”信息
在PRU 代码中增加调试代码,根据程序运行状态在内存里写入相应的值,暂停PRU 后,通过查看内存值来获取程序的运行状态,也可以在DSP/ARM 的代码里加入调试代码检测内存值的变化。
8.2 触发中断
在PRU 代码中通过写R31 寄存器给DSP/ARM 发送中断,这种方法减轻DSP/ARM 的负荷,尤其在DSP/ARM 软件与PRU 软件一起调试时更为有效。
8.3 通过输出寄存器R30输出状态
在代码中写R30 设置相应PRU 输出管脚的状态,用示波器或万用表观察管脚状态以获知程序运行状态。
8.4 加入空循环反复调试
在代码中加入while(1),通过查看PRU 的程序指针是否停在空循环处,可以知道程序运行流程是否正确,查看PRU 的寄存器和内存判断运行结果是否正确。在PASM 编译产生的列表文件里有代码的对应的程序指针值。
加载中...
查看其它10个回答
一周热门
更多
>
相关问题
CPLD的方波输出
4 个回答
11个版本Quartus II 软件下载,安装包网盘合集,附教程,47G!
20 个回答
请大家帮忙到21IC发展大家谈支持我申请新版面
20 个回答
【通知】21ic中国电子网服务条款 (所有人员必读)
1 个回答
满载而归乙亥年,大展鸿途庚子年---集签赢好礼
20 个回答
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
TI
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
每个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 寄存器位域表示方式
举例说明这种寄存器访问方式:
R0.w2.b1=r0.b3
r0.w1.b1.t3 = r0.b2.t3 = r0.t19
r0.w2.t12 = r0.t28
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 调试工具,不能在代码中加入断点这样的方式调试。可以通过以下几种方法进行间接调试。
8.1 加入“打印”信息
在PRU 代码中增加调试代码,根据程序运行状态在内存里写入相应的值,暂停PRU 后,通过查看内存值来获取程序的运行状态,也可以在DSP/ARM 的代码里加入调试代码检测内存值的变化。
8.2 触发中断
在PRU 代码中通过写R31 寄存器给DSP/ARM 发送中断,这种方法减轻DSP/ARM 的负荷,尤其在DSP/ARM 软件与PRU 软件一起调试时更为有效。
8.3 通过输出寄存器R30输出状态
在代码中写R30 设置相应PRU 输出管脚的状态,用示波器或万用表观察管脚状态以获知程序运行状态。
8.4 加入空循环反复调试
在代码中加入while(1),通过查看PRU 的程序指针是否停在空循环处,可以知道程序运行流程是否正确,查看PRU 的寄存器和内存判断运行结果是否正确。在PASM 编译产生的列表文件里有代码的对应的程序指针值。
一周热门 更多>