TI AM57x+ Artix-7 FPGA——PRU开发手册详解案例手册

举报
创龙科技 发表于 2022/05/25 10:42:04 2022/05/25
【摘要】 本指导文档适用开发环境:Windows开发环境:Windows 7 64bit、Windows 10 64bitCCS:CCS7.4.0PRU编译器:ti-cgt-pru_2.3.3PRU开发包:pru-icss-5.1.0PRU-ICSS(可编程实时单元子系统和工业通信子系统,简称PRU)由双32位RISC核(PRU可编程实时单元)、共享数据和指令存储器、内部外围模块和中断控制器(INTC...

本指导文档适用开发环境:

Windows开发环境:Windows 7 64bit、Windows 10 64bit

CCS:CCS7.4.0

PRU编译器:ti-cgt-pru_2.3.3

PRU开发包:pru-icss-5.1.0

PRU-ICSS(可编程实时单元子系统和工业通信子系统,简称PRU)由双32位RISC核(PRU可编程实时单元)、共享数据和指令存储器、内部外围模块和中断控制器(INTC)组成。PRU可以通过L3_MAIN interconnect上的主端口访问设备上的所有资源,反之,外部主机处理器可以通过L3_MAIN slave端口访问PRU资源。

PRU详细说明可查阅产品资料“6-开发参考资料\数据手册\核心板元器件\CPU\”目录下《AM572x Sitara Processor Technical Reference Manual》手册的PRU章节。

本文测试板卡为TI Sitara系列AM5728(双核ARM Cortex-A15 +浮点双核DSP C66x) + Xilinx Artix-7 FPGA处理器设计的高端异构多核开发板(型号:TL5728F-EVM)。

图 1

通常ARM Cortex-A15核心运行Linux系统,ARM核心通过pruss和pru rproc驱动程序,将固件加载至PRU,并提供启动、停止等基本控制。通过驱动程序RPMsg(remote processor message)实现通信,它允许PRU和ARM核心互相传递消息。

图 2

驱动程序详细使用说明可参考:https://software-dl.ti.com/processor-sdk-linux/esd/docs/04_03_00_05/linux/Industrial_Protocols.html#linux-drivers。

本文档涉及的案例位于产品资料“4-软件资料\Demo\PRU-demos\”目录下。

表 1

案例

目录

目录说明

pru_rpmsg_led_flash

project

存放CCS工程。

image

存放应用程序镜像、动态设备树。

pru_rpmsg_pulse_motor

linux_demo

bin:存放可执行文件;
src:存放源码;
dts:
存放动态设备树文件及其镜像。

pru_demo

project:存放CCS工程;
bin:存放应用程序镜像。

pru_rpmsg_led_flash案例

案例功能:ARM与PRU之间使用RPMsg实现数据交互,ARM通过RPMsg传输数据至PRU,PRU根据数据内容控制评估底板LED3。

案例测试

将本案例image目录下的tl572x-pru-overlay.dtbo、pru_rpmsg_led_flash.out文件拷贝至评估板文件系统"/lib/firmware/"目录下。

图 3

执行如下命令,通过加载动态设备树将LED对应的IO模式配置为PRU专属IO。

Target# mkdir /configfs //如configfs文件夹已存在,请跳过此命令

Target# mount -t configfs configfs /configfs

Target# mkdir /configfs/device-tree/overlays/pru

Target# echo -n "tl572x-pru-overlay.dtbo" > /configfs/device-tree/overlays/pru/path

图 4

执行如下命令,进入"/lib/firmware/"目录,建立新的PRU固件链接。

Target# cd /lib/firmware/

Target# ln -s pru_rpmsg_led_flash.out am57xx-pru1_0-fw

图 5

执行如下命令,将PRU固件pru_rpmsg_led_flash.out加载至pru1_0核。

Target# echo 'start' > /sys/class/remoteproc/remoteproc4/state

图 6

执行如下命令,通过"/dev/rpmsg_pru30"节点发送数据信息至PRU,实现控制评估底板LED的亮灭。

Target# echo on > /dev/rpmsg_pru30 //点亮LED

Target# echo off > /dev/rpmsg_pru30 //熄灭LED

图 7

执行如下命令,可停止运行PRU固件。

Target# echo 'stop' > /sys/class/remoteproc/remoteproc4/state

图 8

案例编译

动态设备树编译

将本案例image目录下的tl572x-pru-overlay.dts文件,拷贝至Ubuntu内核源码的"arch/arm/boot/dts/"目录下。

图 9

在内核源码所在目录下,执行如下命令编译动态设备树。

Host# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- tl572x-pru-overlay.dtbo

图 10
图 11

将编译生成的动态设备树tl572x-pru-overlay.dtbo,拷贝至评估板文件系统"/lib/firmware/"目录下即可。

PRU案例编译

打开CCS7.4.0,点击"Project -> Import CCS Projects…",导入CCS工程。

图 12

在弹出的界面中点击"Browse…",选择非中文路径下的案例project目录,然后点击Finish。

图 13

请将“4-软件资料\Demo\PRU-demos\pru-icss-5.1.0.zip”压缩包解至CCS7.4.0安装目录,右击工程后点击Properties选项,重新指定PRU案例的头文件和库文件路径。

备注:pru-icss-5.1.0.zip压缩包源自Processor-SDK安装包"ti-processor-sdk-linux-rt-am57xx-evm-04.03.00.05\example-applications\pru-icss-5.1.0\"文件夹。

图 14

进入工程属性设置界面后依次点击"Resource -> Linked Resources",选中"PRU_DEMO_DIR"后点击"Edit…"。

图 15

在弹出的界面中点击"Folder…",选择pru-icss-5.1.0所在路径,然后点击OK。

图 16

点击OK完成配置,右击工程选择"Build Project"或"Rebuild Project"即可进行工程编译。

17

关键代码

允许PRU访问OCP主端口,以便PRU可读取外部存储器;清除PRU系统事件状态。

图 18

初始化RPMsg,并创建ARM和PRU的RPMsg通道。

图 19

等待ARM通过RPMsg发送数据,并根据数据内容控制LED亮灭。通过PRU的__R30寄存器控制LED。

图 20

pru_rpmsg_pulse_motor案例

案例功能:PRU根据ARM传输的数据内容,控制电机驱动器的PUL和DIR管脚来调整电机的转速和转动方向。ARM通过监听按键事件,然后通过RPMsg传输频率数据至PRU,从而控制电机的转动速度。

程序流程框图如下:

图 21

案例测试

本案例使用锐特技术的42步进电机(型号为42CM04)和驱动器(型号为DM320C),按照下图将评估板与电机进行连接。

表 2 评估板J3接口与电机接口引脚对应关系

评估底J3接口

电机驱动器接口

GPMC_A10(PIN 5)

DIR+

GPMC_A11(PIN 6)

PUL+

GND(PIN 44)

PUL-

GND(PIN 17)

DIR-

图 22 评估板J3接口原理图

图片1.png

图 23

将电机驱动器拨码开关(SW1~SW6)拨至010000,即电流设置为1.7A,细分设置为6400脉冲/转。

图 24

将案例"linux_demo\dts\image\"目录下的动态设备树文件和"pru_demo\bin\"目录下的.out文件拷贝至评估板文件系统"/lib/firmware/"目录下。

图 25

执行如下命令,通过加载动态设备树将评估板J3接口的上的GPMC_A10和GPMC_A11对应的IO模式修改为GPIO模式。

Target# mkdir /configfs //如configfs文件夹已存在,请跳过此命令

Target# mount -t configfs configfs /configfs

Target# mkdir /configfs/device-tree/overlays/pru

Target# echo -n "tl572x-pru-overlay.dtbo" > /configfs/device-tree/overlays/pru/path

图 26

执行如下命令,进入"/lib/firmware/"目录,将原有的PRU固件链接删除,并建立新的PRU固件链接。

Target# cd /lib/firmware/

Target# rm am57xx-pru1_0-fw //如测试过其它案例,请执行此命令,否则请忽略

Target# ln -s pru_rpmsg_pulse_motor.out am57xx-pru1_0-fw

图 27

执行如下命令,将PRU固件pru_rpmsg_pulse_motor.out加载至pru1_0核。

Target# echo 'start' > /sys/class/remoteproc/remoteproc4/state

图 28

基于命令行控制电机

通过"/dev/rpmsg_pru30"节点向PRU发送字符,PRU根据数据内容控制电机驱动器的PUL和DIR管脚来选择电机的转速和转动方向。电机默认脉冲频率为0Hz,细分设置为6400脉冲/转,即默认转速为0r/s。可通过RPMsg设置脉冲频率,如设置脉冲频率为32KHz,即转速 = 32KHz / 6400 = 5r/s。

设置电机顺时针正向转动

Target# echo FWD > /dev/rpmsg_pru30 //电机顺时针正向转动

Target# echo 32000 > /dev/rpmsg_pru30 //3200为脉冲频率

图 29

设置电机逆时针反向转动

Target# echo REV > /dev/rpmsg_pru30 //电机逆时针反向转动

Target# echo 'stop' > /sys/class/remoteproc/remoteproc4/state //停止运行PRU固件,电机停止

图 30

基于应用程序控制电机

将案例"linux_demo\bin\"目录下的pru_rpmsg_pulse_motor可执行文件拷贝至评估板文件系统,评估板上电启动,加载动态设备树和PRU固件。

图 31

执行如下命令,运行pru_rpmsg_pulse_motor测试程序。

Target# ./pru_rpmsg_pulse_motor -d /dev/rpmsg_pru30

图 32

程序启动后,按下评估板的USER0(KEY3)用户按键控制电机开始转动。

案例所使用电机支持6档调速,从电机运转开始,每按下一次按键,档位加1,电机转动速度变快;当转速达到6档后,每按下一次按键,档位减1,电机转动速度变慢。当减到0挡后,再加档,以此循环。

案例编译

动态设备树编译

将案例"linux_demo\dts\src\"目录下的tl572x-pru-overlay.dts文件拷贝至Ubuntu内核源码的"arch/arm/boot/dts/"目录下。

图 33

在内核源码所在目录下,执行如下命令编译动态设备树。

Host# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- tl572x-pru-overlay.dtbo

图 34
图 35

将编译生成的动态设备树tl572x-pru-overlay.dtbo,拷贝至评估板文件系统"/lib/firmware/"目录下即可。

linux_demo编译

将本案例linux_demo目录下的源码src拷贝至Ubuntu工作目录下,执行如下命令进行编译。

Host# source /home/tronlong/ti-processor-sdk-linux-rt-am57xx-evm-04.03.00.05/linux-devkit/environment-setup

Host# make

图 36

PRU案例编译

打开CCS7.4.0,点击"Project -> Import CCS Projects…",导入CCS工程。

图 37

在弹出的界面中点击Browse,选择非中文路径下的案例project目录,然后点击Finish。

图 38

进入工程属性设置界面后依次点击"Resource -> Linked Resources",选中PRU_DEMO_DIR后点击"Edit…"。

图 39

在弹出的界面中点击"Folder…",选择pru-icss-5.1.0所在路径,然后点击OK。

图 40

点击OK完成配置,右击工程选择"Build Project"或"Rebuild Project"即可进行工程编译。

图 41

关键代码

PRU案例代码

允许PRU访问OCP主端口,以便PRU可读取外部存储器;清除PRU系统事件状态。

图 42

初始化RPMsg,并创建ARM和PRU的RPMsg通道。

图片2.png

图 43

PUL管脚输入所设置的脉冲频率的脉冲。

图 44

等待ARM通过RPMsg发送数据,PRU根据数据内容控制电机驱动器的PUL和DIR管脚来调整电机的转速和转动方向。

图 45

Linux案例代码

打开key和rpmsg_pru设备节点。

图 46

监听按键事件。

图 47

控制电机转动速度。

图 48
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。