当前位置: 首页 > news >正文

Zynq中断与AMP~双核串口环回之PS与PL通信

实现思路:

额外配置:通过PL配置计数器,向CPU0和CPU1发送硬中断。

        1.串口中断CPU0,在中断中设置接收设置好字长的数据,如果这些数据的数值符合约定的命令,则关闭硬中断,并将这部分数据存入AxiLite配置的ram中,完成以后发送软中断中断CPU1。

        2.CPU1收到软中断后,读取指定的ram数值,校验以后将其写入ram2中,如果这里不做换回可以写入其他的。写完以后发送中断给CPU0。

        3.CPU0接收到中断,读取ram2的数据,并且完成发送。

部分代码:

其中读写Bram的代码可参考:

Axi_Lite接口的IP核与地址与缓冲与AxiGP0-CSDN博客

CPU0中配置的Uart中断回调函数

        设置的是超时中断触发,set阈值那个不太好用。

void Uart0_IntrHandler(void *CallBackRef, u32 Event, unsigned int EventData)
{if (Event == XUARTPS_EVENT_RECV_TOUT) {TotalReceivedCount = EventData;if (TotalReceivedCount == 8 && RecvBuffer[0] == 0x55 && RecvBuffer[1] == 0x55&& RecvBuffer[2] == 0x00 && RecvBuffer[3] == 0x01){XScuGic_Disable(&GIC_SGI_instance_point, Interrupt_ID_Hardware_1);XScuGic_Disable(&GIC_SGI_instance_point, Interrupt_ID_Hardware_0);Axi_WriteRamA(RecvBuffer,TotalReceivedCount);printf("Close SPI\n\r");XScuGic_SoftwareIntr(&GIC_SGI_instance_point,Interrupt_ID_SGI_15,XSCUGIC_SPI_CPU1_MASK);}else if(TotalReceivedCount == 8 && RecvBuffer[0] == 0x66){XScuGic_Enable(&GIC_SGI_instance_point, Interrupt_ID_Hardware_0);printf("Open SPI\n\r");}}XUartPs_Recv(&Uart_Instance_point, RecvBuffer, TEST_BUFFER_SIZE);
}

CPU1的软中断回调函数


void SGI_IntrHandler(void *CallBackRef){u32 origin_command;print("SG1!\n\r");Axi_ReadRamA(COMMAND_BUFFER,8);if(COMMAND_BUFFER[4]==0x04 && COMMAND_BUFFER[5] == 0x05 && COMMAND_BUFFER[6]==0x06 && COMMAND_BUFFER[7] == 0x07){Axi_WriteRamB(COMMAND_BUFFER,8);XScuGic_SoftwareIntr(&GIC_SGI_instance_point, Interrupt_ID_SGI_14, CPU_id_0);}
}  

CPU0的软中断回调函数

void SGI_IntrHandler(void *CallBackRef){Axi_ReadRamB(SendBuffer,8);XUartPs_Send(&Uart_Instance_point, SendBuffer, 8);print("SG0!\n\r");
}

http://www.lryc.cn/news/198809.html

相关文章:

  • 【一:实战开发testng的介绍】
  • C现代方法(第9章)笔记——函数
  • 【算法练习Day23】 复原 IP 地址子集子集 II
  • fastadmin框架token验证
  • 了解 AI :了解 AI 方面的一些术语 (中英文对照)
  • 【Python学习笔记】对象、方法
  • 企业IT资产设备折旧残值如何计算
  • Linux性能优化--性能工具:下一步是什么
  • 网工内推 | IT主管、高级网工,上市公司,必须持有HCIE认证
  • bulldog 靶机
  • 如何借助边缘智能网关打造智慧城市便民驿站
  • 谈谈电商App的压测
  • ​VsCode修改侧边栏字体大小——用缩放的方法​
  • 基于Java的农资采购销售管理系统设计与实现(源码+lw+部署文档+讲解等)
  • 【AIGC核心技术剖析】扩大富有表现力的人体姿势和形状估计SMPLer-X模型
  • 【C++面向对象】1. 类、对象
  • PAM从入门到精通(十三)
  • Stable Diffusion WebUI几种解决手崩溃的方法
  • kr 第三阶段(一)16 位汇编
  • power point导出pdf保留字体
  • 云务器迁移(腾讯云>华为云)
  • [USACO11MAR] Brownie Slicing G题解(二分+二维前缀和+矩阵分割)
  • 【每日一题】—— B. Arrays Sum (Grakn Forces 2020)
  • XTU-OJ 1328-数码和
  • 混入组件 (mixin)
  • ubuntu18.04 RTX3060 rangnet++训练
  • HZOJ-72:猜拳
  • 【Django 03】QuerySet 和 Instance应用
  • 安装 mysql
  • 文件管理系统的基本认识