嵌入式发烧友 发表于 2021-7-5 16:28:41

TMS320C6678 ZYNQ OpenAMP 双核ARM 通信案例开发手册之echo_test案例

​目录前 言1 echo_test案例1 案例功能2 操作说明3 关键代码3.1 linux_demo代码说明3.2 freertos_demo代码说明3.3 baremetal_demo代码说明前 言本文主要介绍ZYNQ基于OpenAMP框架的双核ARM通信案例的使用说明,CPU0(Master)运行Linux系统,CPU1(Remote)运行裸机或FreeRTOS程序。CPU0使用remoteproc加载CPU1程序,并对CPU1进行配置。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=Nzk4Y2FjMzQzZTc2OTA0ZDE3ZDY2ZDYzNzU4MGYwMjQsMTYyNTQ3MzI3MTk0OQ==
​echo_test案例开发手册是基于创龙科技 TI TMS320C6678 + Xilinx Zynq-7045的高速多路高清视频采集处理平台,采用DSP+FPGA+ARM架构。
https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=NGFmYjE4NzJkMTAxNzhkMThmMTEyZTNkMWU1ZDNhYTAsMTYyNTQ3MzI3MTk0OQ==
​SOM-TL6678ZH核心板正面图
https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=MTVmMTg5YzQ4ZWQzNjY1MWVjOThkNWQwOTU5ZTgwNDksMTYyNTQ3MzI3MTk0OQ==
​SOM-TL6678ZH核心板背面图
https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=NTUzZjgyODRlYWNiNWJlNDBmZDg0NjA0ZmJlN2ZiMzAsMTYyNTQ3MzI3MTk0OQ==
TL6678ZH-EVM评估板资源图1

https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=ZmU1MmFmMDM2OTlmZWU5YjIzMGE2NTdiZjZiZGYzNmUsMTYyNTQ3MzI3MTk0OQ==
​TL6678ZH-EVM评估板资源图2 ​​图 1表 1https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=ZmU5ZWVkN2UzMzg3OWY5YTIzMDA1ZDM1ZjhlZjMxMWEsMTYyNTQ3MzI3MTk0OQ==

目录说明linux_demobinCPU0应用程序可执行文件srcCPU0应用程序源码freertos_demobinCPU1 FreeRTOS可执行文件projectCPU1 FreeRTOS工程baremetal_demobinCPU1裸机可执行文件projectCPU1裸机工程echo_test案例案例功能案例功能:CPU0使用RPMsg向CPU1发送数据,CPU1接收到数据后再使用RPMsg向CPU0回传数据。CPU0对回传的数据进行验证,并输出验证结果。操作说明将CPU1裸机或FreeRTOS可执行文件复制到评估板文件系统“/lib/firmware/”目录下,并执行如下命令加载CPU1程序。Target# echo echo_test.elf > /sys/class/remoteproc/remoteproc0/firmwareTarget# echo start > /sys/class/remoteproc/remoteproc0/statehttps://mp.toutiao.com/mp/agw/article_material/open_image/get?code=NmI0MzQ0ZDM3NzA5NTBhOWZmMzU5YTJjMWEyZmZlOWYsMTYyNTQ3MzI3MTk0OQ==
​图 2执行如下命令加载RPMsg驱动,并在“/dev/”目录下生成RPMsg设备节点。RPMsg驱动源码为内核“drivers/rpmsg/”目录下的rpmsg_user_dev_driver.c文件。Target# modprobe rpmsg_user_dev_driverhttps://mp.toutiao.com/mp/agw/article_material/open_image/get?code=ZWE4ZDZlYzhjMjI0MzczODBkMDJmMTcxMTlhNjNkZjksMTYyNTQ3MzI3MTk0OQ==
​图 3将CPU0应用程序可执行文件复制到评估板文件系统,并执行如下命令通过RPMsg与CPU1进行通信。Target# ./echo_testhttps://mp.toutiao.com/mp/agw/article_material/open_image/get?code=N2E4OTljZTVhYzc4YjA2NGEwMjczYjc5ODRkZTNmMDIsMTYyNTQ3MzI3MTk0OQ==
图4 输入1,并按回车键进行测试。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=MTIwY2JmZTYxZjE1ODQyMjAzZDM0YTNiZDM3NGI3NWQsMTYyNTQ3MzI3MTk0OQ==
​图 5https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=YTdiMWFiZjE1ZTVlZDA3YTgzMzNmNTdiNzMwY2U3NjgsMTYyNTQ3MzI3MTk0OQ==
​图 6输入2,并按回车键退出测试。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=OGM3NjM3MThmZjQ1YTkzNGVlMDA5NWNkZDg5ZDNlNTYsMTYyNTQ3MzI3MTk0OQ==
​图 7执行如下命令,停止CPU1程序。Target# echo stop > /sys/class/remoteproc/remoteproc0/statehttps://mp.toutiao.com/mp/agw/article_material/open_image/get?code=MTA4ZmE3OTliNWUzYWRmNWNlZTg5ZjA2MWZmOTIzOWQsMTYyNTQ3MzI3MTk1MA==
​图 8关键代码linux_demo代码说明打开RPMsg驱动设备节点。
https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=YTk3NjMxNzRmNDdjNDljYTc2NzRlNWI0MTZkYzZjMmMsMTYyNTQ3MzI3MTk1MA==
​图 9向CPU1发送数据,并对从CPU1回传的数据进行验证。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=MjYxMTZiYTJkYjg5NDE3NmI4ODFkZGM2MTljZmIzY2QsMTYyNTQ3MzI3MTk1MA==
​图 10freertos_demo代码说明创建processing任务。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=ZGI4MmEwYmZmNzlmMzhkNWJkYWUyYTg2NGM1M2U5MzQsMTYyNTQ3MzI3MTk1MA==
​图 11(2)在processing()中进行函数调用。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=ZTI5Y2FjZjdiYjhiMmJmYTU3YTUwZWRmMjJiYmI4YjksMTYyNTQ3MzI3MTk1MA==
​图 12调用init_system()初始化libmetal库与GIC控制器等。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=Yzk2MjQ4MjViZGZkNWNhYTAzYjFjODU5MzE3YTZhZDMsMTYyNTQ3MzI3MTk1MA==
图13绑定中断号与中断服务函数,中断号需与设备树配置的中断号一致。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=OTZhYTJhMTQxNzJiM2E0ZmE5Nzc5NTA3MTNjMzJmOTEsMTYyNTQ3MzI3MTk1MA==
​图 14https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=YjI0NTgyZWMzM2RkNmVjZjUzNTM2ZWU1MzFiYWI3ZmEsMTYyNTQ3MzI3MTk1MA==
​图 15调用platform_create_proc()创建平台相关信息。
https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=NTlhZmZlYzY5ZGVlZDJlMGE3MWQ0YjZlOWE0NThlYTcsMTYyNTQ3MzI3MTk1MA==
​图 16调用get_resource_table()获取资源表信息,资源表包含内存和virtio设备资源。virtio设备包含vring地址、vring大小和vring对齐方式等信息。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=MWYzNTM4NDNmN2M2ZTliZjVmY2JlYjY1NmIzNzExYmYsMTYyNTQ3MzI3MTk1MA==
​图 17(13)以上函数调用成功后,再调用app()。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=OGIxOTkzMTQ5NTNmZGZkZGNjMjQ0NWI2NGYzMDQ0NzQsMTYyNTQ3MzI3MTk1MA==
​图 18调用remoteproc_resource_init()对之前获得的平台信息、资源表信息进行处理。创建Remote Device,并为其设置增加、删除、读取RPMsg通道函数。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=MDgzNmFkYjVkN2U5ZmFiNTAzZjkyZWRlN2RlOGM1ZWMsMTYyNTQ3MzI3MTk1MA==
图 19调用hil_poll()以阻塞的方式调用poll函数,并等待数据接收。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=YWYzODg1MjQ5ZDEwMDUwYzNmODRhOTI3NTA0MTg0MzMsMTYyNTQ3MzI3MTk1MA==
​图 20https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=MzUxZWM0ZDQxNDliMjk0ZjJhNjczMjg0YTY2NmQ5ZWIsMTYyNTQ3MzI3MTk1MA==
​图 21在数据读取函数rpmsg_read_cb()中,将接收到的数据放入缓冲区后产生数据接收事件,并在app()中进行事件处理。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=MWYwNzFhZWRiZTJiZjhmOThmZjE5ZGJiZTQ3MDcwZDUsMTYyNTQ3MzI3MTk1MA==
https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=NDgzZGQzNmUzYzEwMzQ5MTg5YWY0MDY4NzM0ZmZjZWMsMTYyNTQ3MzI3MTk1MA==
​图 22在virtio设备复位函数virtio_rst_cb()中产生复位virtio事件,并在app()中进行事件处理。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=NDgzZGQzNmUzYzEwMzQ5MTg5YWY0MDY4NzM0ZmZjZWMsMTYyNTQ3MzI3MTk1MA==
​图 23在RPMsg通道创建函数rpmsg_channel_created()中,创建一个全局RPMsg端点,并设置端点读取函数。RPMsg通信通过端点完成,与USB类似。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=ZTg0YjNlOTQxMzYyNDc1MTZkYzdjNzhkZThhMWYwZTcsMTYyNTQ3MzI3MTk1MA==
​图 24在RPMsg通道删除函数rpmsg_channel_deleted()中,删除RPMsg端点同时产生通道删除事件,并在app()中进行事件处理。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=ZGQxZjI0N2I3YWYwNDJkZWJkYzYwODJjOTgwYjVkNmIsMTYyNTQ3MzI3MTk1MA==
​图 25baremetal_demo代码说明由于裸机与FreeRTOS程序相似,因此baremetal_demo代码说明可参考freertos_demo代码说明小节,下面对部分代码进行补充说明。在main()中调用init_system()初始化libmetal库与GIC控制器等。调用platform_create_proc()创建平台相关信息。调用get_resource_table()获取资源表信息。以上函数调用成功后,再调用app()。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=ZGVlYjJjZGI4OGI4ZTJhYmU1OWZkY2I5YjgyMjI0OTIsMTYyNTQ3MzI3MTk1MA==
​图 26调用remoteproc_resource_init()对之前获得的平台信息、资源表信息进行处理。创建Remote Device,并为其设置增加、删除、读取RPMsg通道函数。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=NGQ3NjllOGM2NTY2MTlkMGU3ZDkyZDFlN2M0ZjNhMjgsMTYyNTQ3MzI3MTk1MA==
​图 27在数据读取函数rpmsg_read_cb()中,对从CPU0接收到的数据进行判断,并进行不同处理(关机或回传数据),实现通信和生命周期管理。https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=MjI2ZjRmNDcwMmUwYWViMzhkNDBkYjMzNjc0NzE2MmIsMTYyNTQ3MzI3MTk1MA==
​图 28 如需获取案例源码、TL6678ZH-EVM评估板或其他产品详细资料,欢迎留言或者私聊!

WinnerZ 发表于 2023-12-15 11:44:39

德州仪器TMS320F280049C芯片,光伏逆变器开发时高压并网遇到了问题,你有做过这方面的研究吗?

WinnerZ 发表于 2023-12-15 11:45:09

德州仪器TMS320F280049C芯片,光伏逆变器开发时高压并网遇到了问题,你有做过这方面的研究吗?
页: [1]
查看完整版本: TMS320C6678 ZYNQ OpenAMP 双核ARM 通信案例开发手册之echo_test案例