当前位置:首页 > 编程笔记 > 正文
已解决

Zynq双核通信和中断小结

来自网友在路上 160860提问 提问时间:2023-10-11 00:54:25阅读次数: 60

最佳答案 问答题库608位专家为你答疑解惑

实现Zynq的AMP,即两个内核的通信,主要包含以下主要内容:

        1.通信的实现手段,比较好的是通过共享地址来实现通信,比如XAPP1079中就设置了一个:

#define COMM_VAL  (*(volatile unsigned long *)(0xFFFF0000))

让运行在两个CPU中的程序去读取这个地址的数据,从而实现通信。但这里需要注意,程序把内容写进DDR里是会通过cache的,为了解决一致性的问题可以通过:

Xil_SetTlbAttributes(share_addr,0x14de2);

关闭Cache来解决。

        2.Zynq的启动顺序是:boot——fsbl——ssbl。其中fsbl包含着bit,elf和fsbl本身的引导fsbl,我们希望固化并且实现双核通信,需要通过函数:

Xil_Out32(CPU1STARTADR, CPU1STARTMEM)

向Zynq中规定的fsbl读取的起始地址CPU1STARTADR中写入cpu1的程序地址CPU1STARTMEM。CPU1STARTMEM可以在vitis中的lsript文件里配置,这里需要注意配置程序所占的长度。

        3.核间中断依赖XScuGic_SoftwareIntr函数,核间中断是通过SGI实现的,这个函数可以实现对指定CPU的指定中断源的中断产生。

可参考的内容和引用:

【正点原子FPGA连载】第十三章双核AMP实验-领航者 ZYNQ 之嵌入式开发指南 - 知乎 (zhihu.com)ZYNQ-双核通信 | 电子创新网赛灵思社区 (eetrend.com)

ZYNQ的程序固化_NoNoUnknow的博客-CSDN博客

XAPP1079:示例包含:

        双核通信和程序固化的实例。

        通过参考:ZYNQ的程序固化_NoNoUnknow的博客-CSDN博客

        可知:完成程序固化同时双核通信,我们需要配置自己的FSBL文件(第一阶段引导程序),所以需要在配置文件的时候通过函数:

        Xil_Out32(CPU1STARTADR, CPU1STARTMEM)来使加载boot镜像以后去跳转到CPU1程序的地址,并且发送事件代码sev()来进行唤醒。

        其次,在编写elf文件的时候,需要通过配置lscript.ld来规定程序的起始位置和长度。CPU1的文件起始位置为CPU1STARTMEM;

XAPP1079 Latest Information - Xilinx Wiki - Confluence (atlassian.net)NoNoUnknow_FPGA学习,ZYNQ裸机开发,随想随记-CSDN博客

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"Zynq双核通信和中断小结":http://eshow365.cn/6-18664-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!