首页 » 科学 » 长文分享丨TI AM5718的PRU开拓详解_存放器_事宜

长文分享丨TI AM5718的PRU开拓详解_存放器_事宜

南宫静远 2024-12-09 22:08:23 0

扫一扫用手机浏览

文章目录 [+]

TI AM5718 系列 OK5718开拓板有两个PRU-ICSS(可编程实时单元子系统和工业通信子系统),可以独立编程实现一些实时性哀求高的个性化需求,实现产品的差异化。

本文先容PRU处理器架构,开拓,调试方法。
在系统架构上,PRUSS是连接L3_MAIN内部总线上的一个模块,与系统中其它主模块如ARM,DSP一样,可以访问芯片上的其它外设。

长文分享丨TI AM5718的PRU开拓详解_存放器_事宜 科学

PRUSS包括两个PRU,通过自己的32 bitinterconnect总线与子系统的中断掌握器,指令内存,数据内存,共享内存,外设模块相连。

PRU不是一个加速器,它是32位负载/存储RISC架构小端处理器,每个PRU有32个通用寄存器R0~R31,12Kbyte指令RAM,8Kbyte数据RAM和32byte共享RAM。
指令RAM是独立的,相互之间不能访问,但数据RAM可以通过映射地址相互访问;专用的21个输入引脚和21个输出引脚。

设备中的PRU的icss1和PRU的icss2集成功能:

•PD_L4PER电源域实例化

•设备L3_MAIN互连上的两个主端口(PRU0和PRU1核心启动器)

•不支持唤醒功能 - 带设备PRCM的智能待机协议

•备用要求软件断言“MStandby”(用于主端口时钟禁用)当地(PRUICSS)监督PRCM“MWait”的确认。

•L3_MAIN互连上的一个从(配置)端口,用于设备主机(MPU,DSP1等)

访问各种存储器和PRU-ICSS寄存器

•不具有唤醒能力 - 带设备PRCM的智能空闲协议

•来自本地的10个输出中断事宜中断掌握器 - PRUSS_INTC:

- 每个PRU核心有2个事宜(事宜0和1)

- 8个事宜映射到设备IRQ_CROSSBAR,它们将它们重新映射到设备中断

掌握器(事宜2到9)

- 2个事宜映射到设备DMA_CROSSBAR,将它们重新映射到设备DMA掌握器

(事宜8和9)

•32个外部中断通过设备IRQ_CROSSBAR映射到本地PRUSS_INTC

•Alocal软件选通PRUsubsystem(本地时钟管理

协议)内几个模块的时钟,如下所示:

-PRUSS_IEP

-PRUSS_eCAP_0

-PRUSS_UART0

-PRUSS_INTC

-PRUSS_PRU0

-PRUSS_PRU1

•3从设备PRCM得到的inputclocks:

- PRU-ICSS顶级可接口接口时钟

- PRUSS IEP功能时钟

- 一个PRUSS UART0

•不支持存储器/寄存器保持

•一个硬件非保持(电平敏感)复位

PART 01 PRU内存映射

1.1指令空间

每个PRU独立的指令空间为00000000〜0x00002FFF。
指令空间由外部主处理ARM / DSP初始化,程序指针PC是32位字地址,不是字节地址,如PC = 2,代表指令地址0x08的。

1.2数据空间

每个PRU独立的8K字节数据RAM空间为0×0000〜0x01FF,由于数据RAM连接在PRU子系统的内部总线上,以是子系统中的其它主模块也可以访问到这块空间,这段内存空间在另一个PRU上的映射地址为为0x2000〜0x21FF位于数据空间的还有共用的中断掌握器寄存器; PRU掌握/状态寄存器等,有各自的地址空间。

▲PRUSS本地数据空间内存映射表

1.3全局地址空间映射

PRU_ICSS1局部地址在系统全局地址空间基地址(L3_MAINbase地址)为0x4B2A0000,PRU_ICSS2局部地址在系统全局地址空间基地址(L3_MAINbase地址)为0x4B28E000。
表3表示PRU_ICSS局部地址空间的偏移量(OffsetAddress)。

PRU可以通过表2的局部地址,也可以通过全局地址访问PRUSS的数据空间,通过全局地址空间访问要经由系统L3_MAINdevice,比通过局部地址空间访问要慢。

PRUSS外部主模块如ARM,DSP等可通过系统全局地址空间映射端口+全局地址空间访问(表3的偏移地址+ L3_MAIN基地址)PRU资源。
详情参考“AM571x技能参考手册”中30.4.4.2PRU-ICSS Global Memory Map章节内容。

第02部分掌握/状态寄存器

PRU 0至的掌握/状态寄存器地址位于0x00020000〜0x0002_3FFF,PRU1的掌握/状态寄存器地址位于0x0002_4000〜0x0002_5FFF,寄存器列表如表4所示,各寄存器的详细解释请参阅[1]。

▲PRU掌握/状态寄存器表

2.1 PRU_CONTROL掌握寄存器

外部主模块ARM / DSP通过掌握寄存器可以掌握PRU的运行状态。

▲表5 PRU掌握寄存器解释表

2.2 PRU_STATUS状态寄存器

状态寄存即PRU的程序指针寄存器,与程序的真正运行状态有一个周期的延时。

2.3 PRU_WAKEUP_EN唤醒使能寄存器

在程序实行SLP指令进入就寝状态之前,使能WAKEUP寄存器相应的位,当输入状态寄存器R31相应的位置1时,即WAKEUP&R31!
= 0时,唤醒PRU。

2.4 PRU_CYCLE周期计数器

当CONTROL [有效] = 1个CONTROL [COUNTENABLE] = 1时,CYCLECNT以PRU时钟周期计数。
当CONTROL [有效] = 0或CONTROL [COUNTENABLE] = 0时,计数停滞。
当重新使能时,规复连续计数。

2.5 STALLCNT取指停滞计数器

当CONTROL [有效] = 1个CONTROL [COUNTENABLE] = 1,且由于某种缘故原由PRU不能取指令时,STALLCNT开始以PRU时钟周期计数。
其值总是小于,或即是CYCLECNT的值。

2.6 PRUSS_DBG_GPREG 0~31调试通用寄存器

PRUSS_DBG_GPREG0〜31与通用寄存器R0〜R31对应,为外部主模块供应一个调试窗口。
当PRU停滞时,ARM / DSP读/写INTGPR0〜31直接读/写寄存器R0〜R31。

PART 03PRU通用寄存器

3.1 PRU事宜/状态寄存器R31

R31是一个分外的寄存器,读与写操作时的功能是不一样的写R31寄存器时,写一个0到15之间的通道号到R31_PRU_VEC [3:0],同时设置R31_PRU_VEC_VALID,将产生相应的中断输失事宜到中断掌握器的系统事宜。
两个PRU输出的断事宜相“或”输出到同一个中断掌握器系统事宜。

读R31寄存器时,R31 [29:0]反响PRU的输入管脚PRU_R30 [29:0]的状态.R31 [31:30]是映射到中断掌握器的INTR_IN [0]和INTR_IN [1]的状态。

3.2通用输出寄存器R30

每个PRU有32个独立的输出管脚PRU0_R31 [31:0]和PRU1_R31 [31:0],写到寄存器R30 [31:0]的值直接输出到PRUn_R31 [31:0]管脚。

第04部分PRU中断掌握器

PRU中断掌握器支持64个别系事宜,10个中断通道,10个主机中断。

PRU-ICSS1_INTC / PRUSS2_INTC的中断0〜31对应着PRU-ICSS集成模块产生的事宜。
系统事宜16〜31由写R31产生。

PRU_ICSS系统事宜32〜55(中断输入),可以通过系统配置寄存器PRUSS_MII_RT [0]选择标准的或者MII_RT系统事宜,PRUSSEVTSEL = 0时选择PRU-ICSS专用IRQ_CROSSBAR输出的事宜作为中断源,PRUSSEVTSEL = 1时选择。
MII_RT模块产生的事宜作为中断源如下图所示:

10个通道可以由任意64个别系事宜映射,可以多个别系事宜映射到一个通道,但不要将一个别系事宜映射到多个通道。

设置PRUSS_INTC_CMR实现通道和64个别系事宜的映射,PRUSS_INTC_CMRi(I为0〜15)寄存器用于实现我 4到我 4 + K号系统事宜映射到相应的通道。
通过寄存器相应位设置的通道号映射到相应的系统事宜。

10个主机中断与10个通道之间可以任意映射,可以多个通道映射到一个主机中断,但不要将一个通道映射到多个主机中断,推举按X号通道映射到X号主机中断办法映射。

PRUSS_INTC_HMR寄存器主机中断和通道的映射.PRUSS_INTC_HMRi(I为0〜3)寄存器用于实现0-9号通道映射到0-9号主机中断。
通过寄存器相应位设置主机中断号,将住中断号与通道号建立映射。

主机中断0输出到R31.b30,主机中断1输出到R31.b31。
主机中断2〜9接输出PRUSS到ARM和DSP的中断掌握器的系统事宜PRUSS_EVTOUT0〜7.PRU不支持中断向量表,产生的0,1主机中断可用来唤醒PRU,或为PRU软件供应状态查询.PRU中断掌握器寄存器解释请参考文献[2]。

看点05PRU代码包

飞凌嵌入式 AM571x 系列OK5718板开拓 用户资料中供应了大量的实例源码,目录构造如图3所示。

关于例程的编译和测试,详见“OK5718-C_软件手册_”7.4Ti官方例程编译及测试和7.5飞凌例程编译及测试。

PART06PRU软件调试

6.1调试工具

调试工具我们利用TI官方推出的仿真器XDS100V2,XDS100V2是一款USBJTAG仿真器。

6.2硬件连接

步骤一:

将XDS100V2仿真器干系引脚通过飞凌调试转接板与0K5718-C板开拓 的JTAG。
接口利用排线进行连接连接办法如下:

步骤二:

利用USB数据连接线连接XDS100V2到PC机的USB接口。

6.3软件调试

本实例利用飞凌PRU测试程序PRU_LED0做仿真调试,将项目导入到CCS后,右击PRU_LED0,选择属性。

选择利用仿真器和编译器版本,设置完成后点击确定。

右击PRU_LED0,选择DebugConfigurations。

选择PRU_LED0,去掉相应的勾选之后如下图。
点击运用,末了点调试。

点击运行菜单,选择调试。

以下办法也可以进入调试。

如果编译通过的话,会是这个样子。

进入仿真后光标会停在主函数开始处。

下面对上图的按钮做一下解释

按钮1,运行按钮,全速运行。
如果为灰色,解释一贯在实行代码,也可能是去世循环,点停息键看看。

按钮2,停息运行。

按钮3,退出仿真。

按钮4,单步运行,碰着子函数进入子函数。

按钮5,单步运行,碰着函数会当针言句,直接一步过,不进入函数内部。

按钮6,单步运行,如果程序在子函数中运行,点击此按钮,跳出子函数。

按钮7,汇编单步,碰着子函数,进入子函数。

按钮8,汇编单步运行,碰着函数会当针言句,直接一步过,不进入函数内部。

在软件调试过程中,进行如下操作可以查看变量,寄存器值。

点击视图菜单,选择表达式项。

涌现以下界面

选中要不雅观察的变量名,右击选中AddWatch Expression项目。

点击OK。

表达窗口中加入变量gpio的值。

点击Addnew expression输入R30,在表达窗口中显示R30值。

当进入调试界面后,当要程序运行到某一行时,右击某一行,点击runto line。
则运行到此行,右击57行。

运行到57行GPIO值发生变革,转化为16进制为0xffffffff的。

右击60行,选择runto line,R30值发生变革。

原文链接:http://www.forlinx.com/zixun/357.htm

相关文章

从零开始,IT编程新手如何开启编程之旅

在这个数字化时代,编程已经成为一项必备技能。对于编程新手来说,如何从零开始,开启自己的编程之旅呢?本文将为您详细介绍。一、了解编程...

科学 2024-12-30 阅读0 评论0

从清远到IT,一场转行的华丽蜕变

在这个快速发展的时代,职业转型已成为一种常态。而清远,这座位于广东省中部的城市,也见证了无数人在这场变革中的华丽蜕变。今天,就让我...

科学 2024-12-30 阅读0 评论0

621-9932C Honeywell_模块_飞达

2024年巴黎奥运会将于当地韶光7月26日开幕,许多比赛用品、显示设备等都有“中国制造”的身影。天下数字技能院元宇宙委员会秘书长吴...

科学 2024-12-30 阅读0 评论0