Zynq双核通信和中断小结

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

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

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

 根据阅读UG585的存储器映射部分可知,这个地址的起始部分属于OCM3。

        两个CPU之间能够进行通信,传递数据可以采用DDR或OCM。

        让运行在两个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博客

ZYNQ OCM和DDR核间数据共享速度测试_zynq linux 核间同步-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博客

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值