作者:adam taylor
上篇博客中我们看到了在zynqsoc的两块arm cortex-a9 mpcore处理器之间共享数据。我提到方法可以改进——使得更加高效——我们可以使用软件中断来进行两核间通信。
中断自己,中断另一个处理器核或者中断两者。例如,我们使用core 0产生一个中断,通知core1接收到了一个led模式的更新
使用软件中断跟硬件中断没有太大区别,只有我们怎样触发中断不同。
我们有16个软件产生的中断可以选择,因此我们必须定义软件中断编号:
#define sw_int_id
0
我们需要为每个处理器核在代码的共享头文件中声明这个选项。如果一个处理器核处理16个软件产生的中断之一而另一个处理器核正在等待另一个发生,这种情况是很尴尬的。
我们需要为core1做的下一件事——该核收到了中断——就是将软件产生的中断连接到gic(通用中断控制器)然后使能中断。我们用已有的函数setupinterruptsystem完成这项工作。
连接中断通过使用函数xscugic_connect完成。这个函数将定义的中断连接到gic,定义了中断服务程序,也定义了回调函数。在这个例子中,我们没有外设实例的指针作为回调函数,就像我们可以使用定时器,我们可以使用gic实例作为回调。
最后,将选中的软件中断连接至gic,现在我们需要使能中断,这样相应的处理器核才能对中断引发的事件做出反应。
中断连接和使能之后,下一步就是写isr(中断服务程序)。该程序将简单地读取ocm(片上内存)和清除中断防止下个中断被标记。
读取地址0xf8f0010c访问了中断认知寄存器icciar,清除中断。
在我们的例子中,从ocm中读取的数据将在led上显示,这些led接在由zynqsoc的pl(可编程逻辑)驱动的gpio引脚上。软件机制防止我们遗漏一个值,就像是上篇博客中使用的轮询方法发生的情况一样。
完成了所有该为core1做的,我们必须正确地配置core 0来处理中断。我们调用xscugic.h中的xscugic_softwareintr函数来完成。调用这个函数来为该核处理软件中断
xscugic_softwareintr(, , )
gic实例ptr参数就是我之前使用配置的中断控制器。sw中断id就是我们之前宏中的声明。cpu掩码就是cpu 2,对应zynqsoc的core 1
当所有这些都完成,跟之前amp zynq博客一样生成bin文件,我得到一个与我想要的一样工作的系统,中断被core 1接收,由core 0处理。
as always the code is attached代码总是附带的,
在今后的博客中,我们将会看到更详细的软件中断和我们如何同时中断两个处理器核内容。不过,记住下周是本博客的一周年纪念日,我会为大家准备了一些特殊的东西呦。
原文链接:
? copyright 2014 xilinx inc.
如需转载,请注明出处
单片机中的数据存储器ram
2024年华南检测中心能力验证计划邀请函——携手共建质量信任,共铸未来
初期产能仅供苹果,台积电3nm芯片订单明年才能大幅增加
iPhone12Pro搭载的LiDAR镜头是什么
2018年人工智能在医疗领域上热度更加高涨,尤其是AI医学影像领域
Adam Taylor玩转MicroZed系列51:中断和AMP
英特尔Sandy Bridge处理器技术细节
Altera系列可编程逻辑器材的构造和原理
iphone14发布时间和上市时间
基于T35F324的FPGA开发板图像采集显示系统方案
四家中国品牌在印度手机市场共占68.4%的份额
戴姆勒牵手沃尔沃,或合作研发发动机
DevEco Studio 4.1带来多种调试能力,助力鸿蒙原生应用开发高效调试
基于AD8205系列高侧电流传感器内部电路及原理解析
AI的定义及学术上的AI概念
软起动器常见故障之缺相故障怎么解决?
自动电平控制(ALC)为扬声器提供有效保护
腾讯与英特尔合作推出一款游戏主机,售价约9299元
厦门桑荣银行ATM终端无线接入系统方案
传感器之于人类到底有怎样的应用(下篇)