GIC寄存器介绍

往期内容

本专栏往期内容,interrtupr子系统:

  1. 深入解析Linux内核中断管理:从IRQ描述符到irq domain的设计与实现
  2. Linux内核中IRQ Domain的结构、操作及映射机制详解
  3. 中断描述符irq_desc成员详解
  4. Linux 内核中断描述符 (irq_desc) 的初始化与动态分配机制详解
  5. 中断的硬件框架
  6. GIC介绍

pinctrl和gpio子系统专栏:

  1. 专栏地址:pinctrl和gpio子系统

  2. 编写虚拟的GPIO控制器的驱动程序:和pinctrl的交互使用

    – 末片,有专栏内容观看顺序

input子系统专栏:

  1. 专栏地址:input子系统
  2. input角度:I2C触摸屏驱动分析和编写一个简单的I2C驱动程序
    – 末片,有专栏内容观看顺序

I2C子系统专栏:

  1. 专栏地址:IIC子系统
  2. 具体芯片的IIC控制器驱动程序分析:i2c-imx.c-CSDN博客
    – 末篇,有专栏内容观看顺序

总线和设备树专栏:

  1. 专栏地址:总线和设备树
  2. 设备树与 Linux 内核设备驱动模型的整合-CSDN博客
    – 末篇,有专栏内容观看顺序

img

目录

  • 往期内容
  • 前言
  • 1.Distributor 寄存器描述
    • 1.1 Distributor Control Register, GICD_CTLR
    • 1.2 Interrupt Controller Type Register, GICD_TYPER
    • 1.3 Distributor Implementer Identification Register, GICD_IIDR
    • 1.4 Interrupt Group Registers, GICD_IGROUPRn
    • 1.5 Interrupt Set-Enable Registers, GICD_ISENABLERn
    • 1.6 Interrupt Clear-Enable Registers, GICD_ICENABLERn
    • 1.7 Interrupt Set-Active Registers, GICD_ISACTIVERn
    • 1.8 Interrupt Clear-Active Registers, GICD_ICACTIVERn
    • 1.9 Interrupt Priority Registers, GICD_IPRIORITYRn
    • 1.10 Interrupt Processor Targets Registers, GICD_ITARGETSRn
    • 1.11 Interrupt Configuration Registers, GICD_ICFGRn
    • 1.12 Identification registers: Peripheral ID2 Register, ICPIDR2
  • 2.CPU interface寄存器描述
    • 2.1 CPU Interface Control Register, GICC_CTLR
    • 2.2 Interrupt Priority Mask Register, GICC_PMR
    • 2.3 Binary Point Register, GICC_BPR
    • 2.4 Interrupt Acknowledge Register, GICC_IAR
    • 2.5 Interrupt Register, GICC_EOIR
  • 3.GIC编程

前言

GIC分为两部分:Distributor和CPU interface,它们的寄存器都有相应的前缀:“GICD*”、“GICC*”。这些寄存器都是映射为内存接口(memery map),CPU可以直接读写。
介绍了ARM的全局中断控制器(GIC)的结构与工作原理。GIC分为Distributor和CPU接口两部分,分别负责中断的分发和处理。文章详细解读了多个重要寄存器,包括Distributor控制寄存器(GICD_CTLR)、中断优先级寄存器(GICD_IPRIORITYRn)、中断使能寄存器(GICD_ISENABLERn)、以及CPU接口控制寄存器(GICC_CTLR)等。每个寄存器的作用、位域及其功能、偏移地址和如何找到对应的寄存器及位操作规则均有详尽说明。最后还提到NXP提供的IMX6ULL SDK包中的GIC初始化代码示例,用于GIC的实际配置和初始化,适合基于Cortex A7的GICv2环境。

1.Distributor 寄存器描述

1.1 Distributor Control Register, GICD_CTLR

控制Group 0和Group 1中断的使能和转发。

img

位域读写描述
1EnableGrp1R/W用于将pending Group 1中断从Distributor转发到CPU interfaces 0:group 1中断不转发 1:根据优先级规则转发Group 1中断
0EnableGrp0R/W用于将pending Group 0中断从Distributor转发到CPU interfaces 0:group 0中断不转发 1:根据优先级规则转发Group 0中断

1.2 Interrupt Controller Type Register, GICD_TYPER

该寄存器包含对GIC配置的描述信息。

img

位域读写描述
15:11LSPIR如果GIC实现了安全扩展,则此字段的值是已实现的可锁定SPI的最大数量,范围为0(0b00000)到31(0b11111)。 如果此字段为0b00000,则GIC不会实现配置锁定。 如果GIC没有实现安全扩展,则保留该字段。
10SecurityExtnR表示GIC是否实施安全扩展: 0未实施安全扩展; 1实施了安全扩展
7:5CPUNumberR表示已实现的CPU interfaces的数量。 已实现的CPU interfaces数量比该字段的值大1。 例如,如果此字段为0b011,则有四个CPU interfaces。
4:0ITLinesNumberR表示GIC支持的最大中断数。 如果ITLinesNumber = N,则最大中断数为32*(N+1)。 中断ID的范围是0到(ID的数量– 1)。 例如:0b00011最多128条中断线,中断ID 0-127。 中断的最大数量为1020(0b11111)。 无论此字段定义的中断ID的范围如何,都将中断ID 1020-1023保留用于特殊目的

1.3 Distributor Implementer Identification Register, GICD_IIDR

img

位域读写描述
31:24ProductIDR产品标识ID
23:20保留
19:16VariantR通常是产品的主要版本号
15:12RevisionR通常此字段用于区分产品的次版本号
11:0ImplementerR含有实现这个GIC的公司的JEP106代码; [11:8]:JEP106 continuation code,对于ARM实现,此字段为0x4; [7]:始终为0; [6:0]:实现者的JEP106code,对于ARM实现,此字段为0x3B

1.4 Interrupt Group Registers, GICD_IGROUPRn

用于设置每个中断的Group属性

img

位域读写描述
31:0Group status bitsR/W组状态位,对于每个位: 0:相应的中断为Group 0; 1:相应的中断为Group 1;3:相应的中断为Group 3。

对于一个中断,如何设置它的Group ?首先找到对应的GICD_IGROUPRn寄存器,即n是多少?还要确定使用这个寄存器里哪一位。
对于interrtups ID m,如下计算:

n = m DIV 32,GICD_IGROUPRn里的n就确定了;
GICD_IGROUPRn在GIC内部的偏移地址是多少?0x080+(4*n)
使用GICD_IPRIORITYRn中哪一位来表示interrtups ID m?
bit = m mod 32。

1.5 Interrupt Set-Enable Registers, GICD_ISENABLERn

控制中断的转发使能状态。

img

位域读写描述
31:0Set-enable bitsR/W对于SPI和PPI类型的中断,每一位控制对应中断的转发行为:从Distributor转发到CPU interface: 读: 0:表示当前是禁止转发的; 1:表示当前是使能转发的; 写: 0:无效 1:使能转发

对于一个中断,如何找到GICD_ISENABLERn并确定相应的位?

对于interrtups ID m,如下计算:
n = m DIV 32,GICD_ISENABLERn里的n就确定了;
GICD_ISENABLERn在GIC内部的偏移地址是多少?0x100+(4*n)
使用GICD_ISENABLERn中哪一位来表示interrtups ID m?
bit = m mod 32。

1.6 Interrupt Clear-Enable Registers, GICD_ICENABLERn

控制中断的禁止转发状态。

img

位域读写描述
31:0Clear-enable bitsR/W对于SPI和PPI类型的中断,每一位控制对应中断的转发行为:从Distributor转发到CPU interface: 读: 0:表示当前是禁止转发的; 1:表示当前是使能转发的; 写: 0:无效 1:禁止转发

对于一个中断,如何找到GICD_ICENABLERn并确定相应的位?

对于interrtups ID m,如下计算:
n = m DIV 32,GICD_ICENABLERn里的n就确定了;
GICD_ICENABLERn在GIC内部的偏移地址是多少?0x180+(4*n)
使用GICD_ICENABLERn中哪一位来表示interrtups ID m?
bit = m mod 32。

1.7 Interrupt Set-Active Registers, GICD_ISACTIVERn

设置或清除中断的活动状态。

img

位域读写描述
31:0Set-active bitsR/W读: 0:表示相应中断不是active状态; 1:表示相应中断是active状态; 写: 0:无效 1:把相应中断设置为active状态,如果中断已处于Active状态,则写入无效

对于一个中断,如何找到GICD_ISACTIVERn并确定相应的位?

对于interrtups ID m,如下计算:
n = m DIV 32,GICD_ISACTIVERn里的n就确定了;
GICD_ISACTIVERn在GIC内部的偏移地址是多少?0x300+(4*n)
使用GICD_ISACTIVERn 中哪一位来表示interrtups ID m?
bit = m mod 32。

1.8 Interrupt Clear-Active Registers, GICD_ICACTIVERn

img

位域读写描述
31:0Clear-active bitsR/W读: 0:表示相应中断不是active状态; 1:表示相应中断是active状态; 写: 0:无效 1:把相应中断设置为deactive状态,如果中断已处于dective状态,则写入无效

对于一个中断,如何找到GICD_ICACTIVERn并确定相应的位?

对于interrtups ID m,如下计算:
n = m DIV 32,GICD_ICACTIVERn里的n就确定了;
GICD_ICACTIVERn 在GIC内部的偏移地址是多少?0x380+(4*n)
使用GICD_ICACTIVERn中哪一位来表示interrtups ID m?
bit = m mod 32。

1.9 Interrupt Priority Registers, GICD_IPRIORITYRn

用于设置每个中断的优先级

img

位域读写描述
31:24Priority, byte offset 3R/W对于每一个中断,都有对应的8位数据用来描述:它的优先级。 每个优先级字段都对应一个优先级值,值越小,相应中断的优先级越高
23:16Priority, byte offset 2R/W
15:8Priority, byte offset 1R/W
7:0Priority, byte offset 0R/W

对于一个中断,如何设置它的优先级(Priority),首先找到对应的GICD_IPRIORITYRn寄存器,即n是多少?还要确定使用这个寄存器里哪一个字节。

对于interrtups ID m,如下计算:
n = m DIV 4,GICD_IPRIORITYRn里的n就确定了;
GICD_IPRIORITYRn在GIC内部的偏移地址是多少?0x400+(4*n)
使用GICD_IPRIORITYRn中4个字节中的哪一个来表示interrtups ID m的优先级?
byte offset = m mod 4。
byte offset 0对应寄存器里的[7:0];
byte offset 1对应寄存器里的[15:8];
byte offset 2对应寄存器里的[23:16];
byte offset 3对应寄存器里的[31:24]。

1.10 Interrupt Processor Targets Registers, GICD_ITARGETSRn

中断处理目标寄存器, 指定中断目标CPU。

img

位域读写描述
31:24CPU targets, byte offset 3R/W对于每一个中断,都有对应的8位数据用来描述:这个中断可以发给哪些CPU。 处理器编号从0开始,8位数里每个位均指代相应的处理器。 例如,值0x3表示将中断发送到处理器0和1。 当读取GICD_ITARGETSR0~GICD_ITARGETSR7时,读取里面任意字节,返回的都是执行这个读操作的CPU的编号。
23:16CPU targets, byte offset 2R/W
15:8CPU targets, byte offset 1R/W
7:0CPU targets, byte offset 0R/W

对于一个中断,如何设置它的目标CPU?优先级(Priority),首先找到对应的GICD_ITARGETSRn寄存器,即n是多少?还要确定使用这个寄存器里哪一个字节。

对于interrtups ID m,如下计算:
n = m DIV 4,GICD_ITARGETSRn里的n就确定了;
GICD_ITARGETSRn在GIC内部的偏移地址是多少?0x800+(4*n)
使用GICD_ITARGETSRn中4个字节中的哪一个来表示interrtups ID m的目标CPU?
byte offset = m mod 4。
byte offset 0对应寄存器里的[7:0];
byte offset 1对应寄存器里的[15:8];
byte offset 2对应寄存器里的[23:16];
byte offset 3对应寄存器里的[31:24]。

1.11 Interrupt Configuration Registers, GICD_ICFGRn

定义中断的触发模式。

img

位域读写描述
[2F+1:2F]Int_config, field FR/W对于每一个中断,都有对应的2位数据用来描述:它的边沿触发,还是电平触发。 对于Int_config [1],即高位[2F + 1],含义为: 0:相应的中断是电平触发; 1:相应的中断是边沿触发。 对于Int_config [0],即低位[2F],是保留位。

对于一个中断,如何找到GICD_ICFGRn并确定相应的位域F?

对于interrtups ID m,如下计算:
n = m DIV 16,GICD_ICFGRn里的n就确定了;
GICD_ICACTIVERn 在GIC内部的偏移地址是多少?0xC00+(4*n)
F = m mod 16。

1.12 Identification registers: Peripheral ID2 Register, ICPIDR2

img

位域读写描述
[31:0]-R/W由实现定义
[7:4]ArchRevR该字段的值取决于GIC架构版本: 0x1:GICv1; 0x2:GICv2。
[3:0]-R/W由实现定义

2.CPU interface寄存器描述

2.1 CPU Interface Control Register, GICC_CTLR

此寄存器用来控制CPU interface传给CPU的中断信号。对于不同版本的GIC,这个寄存器里各个位的含义大有不同。以GICv2为例,有如下2种格式:

img

​ 以GIC2 with Security Extensions, Non-secure copy 为例,GICC_CTLR中各个位的定义如下:

位域读写描述
[31:10]-保留
[9]EOImodeNSR/W控制对GICC_EOIRGICC_DIR寄存器的非安全访问: 0:GICC_EOIR具有降低优先级和deactivate中断的功能; 对GICC_DIR的访问是未定义的。 1:GICC_EOIR仅具有降低优先级功能; GICC_DIR寄存器具有deactivate中断功能。
[8:7]-保留
[6]IRQBypDisGrp1R/W当CPU interface的IRQ信号被禁用时,该位控制是否向处理器发送bypass IRQ信号: 0:将bypass IRQ信号发送给处理器; 1:将bypass IRQ信号不发送到处理器。
[5]FIQBypDisGrp1R/W当CPU interface的FIQ信号被禁用时,该位控制是否向处理器发送bypass FIQ信号: 0:将bypass FIQ信号发送给处理器; 1:旁路FIQ信号不发送到处理器
[4:1]-保留
[0]-R/W使能CPU interface向连接的处理器发出的组1中断的信号: 0:禁用中断信号 1:使能中断信号

2.2 Interrupt Priority Mask Register, GICC_PMR

提供优先级过滤功能,优先级高于某值的中断,才会发送给CPU。 通过此寄存器可设置优先级阈值,只有高于该值的中断会被传递给CPU。

img

位域读写描述
[31:8]-保留
[7:0]-R/W优先级高于这个值的中断,才会发送给CPU

[7:0]共8位,可以表示256个优先级。但是某些芯片里的GIC支持的优先级少于256个,则某些位为RAZ / WI,如下所示:

如果有128个级别,则寄存器中bit[0] = 0b0,即使用[7:1]来表示优先级;
如果有64个级别,则寄存器中bit[1:0] = 0b00,即使用[7:2]来表示优先级;
如果有32个级别,则寄存器中bit[2:0] = 0b000,即使用[7:3]来表示优先级;
如果有16个级别,则寄存器中bit[3:0] = 0b0000,即使用[7:4]来表示优先级;

注意:imx6ull最多为32个级别

2.3 Binary Point Register, GICC_BPR

此寄存器用来把8位的优先级字段拆分为组优先级和子优先级,组优先级用来决定中断抢占。

img

位域读写描述
[31:3]-保留
[2:0]Binary pointR/W此字段的值控制如何将8bit中断优先级字段拆分为组优先级和子优先级,组优先级用来决定中断抢占。 更多信息还得看看GIC手册。

2.4 Interrupt Acknowledge Register, GICC_IAR

CPU读此寄存器,获得当前中断的interrtup ID。

img

位域读写描述
[31:13]-保留
[12:10]CPUIDR对于SGI类中断,它表示谁发出了中断。例如,值为3表示该请求是通过对CPU interface 3上的GICD_SGIR的写操作生成的。
[9:0]Interrupt IDR中断ID

2.5 Interrupt Register, GICC_EOIR

用于通知GIC该中断已处理完毕。写此寄存器,表示某中断已经处理完毕。GICC_IAR的值表示当前在处理的中断,把GICC_IAR的值写入GICC_EOIR就表示中断处理完了。

img

位域读写描述
[31:13]-保留
[12:10]CPUIDW对于SGI类中断,它的值跟GICD_IAR. CPUID的相同。
[9:0]EOIINTIDW中断ID,它的值跟GICD_IAR里的中断ID相同

3.GIC编程

📎gic.c📎gic.h

使用cortex A7处理器的芯片,一般都是使用GIC v2的中断控制器。处理GIC的基地址不一样外,对GIC的操作都是一样的。在NXP官网可以找到IMX6ULL的SDK包i.MX 6ULL应用处理器|Arm® Cortex®-A7单核,频率为900 MHz。

下载后可以参考这个文件:core_ca7.h,里面含有GIC的初始化代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/14567.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

排序算法 - 冒泡

文章目录 1. 冒泡排序1.1 简介1.2 基本步骤:1.3 示例代码(C)1.4 复杂度分析1.5 动画展示 1. 冒泡排序 1.1 简介 冒泡排序(Bubble Sort)是一种简单的排序算法,其基本思想是通过相邻元素的比较和交换&#…

【机器学习】机器学习中用到的高等数学知识-2.概率论与统计 (Probability and Statistics)

概率分布:理解数据的分布特征(如正态分布、伯努利分布、均匀分布等)。期望和方差:描述随机变量的中心位置和离散程度。贝叶斯定理:用于推断和分类中的后验概率计算。假设检验:评估模型的性能和数据显著性。…

解决虚拟机未被自动分配ip

文章目录 1. 背景2. 解决步骤 1. 背景 从vulnhub下载的靶场文件,网络适配器模式设置为nat模式之后,启动虚拟机之后发现没有成功分配动态ip。推测是虚拟机分配的网卡名称和原先靶机作者设置网络配置文件 网络接口名称不一致导致。 2. 解决步骤 解决办法就…

人力资源招聘系统的革新之路:从传统到智能的转变

在全球化与数字化交织的今天,企业间的竞争日益激烈,而人才作为企业发展的核心驱动力,其重要性不言而喻。传统的人力资源招聘方式,如依赖纸质简历、人工筛选、面对面面试等,不仅效率低下,且难以精准匹配企业…

vue3入门和实战-vue3项目实现网址导航效果

文章目录 前言一、静态文件引入1. 下载webstack代码2. css调整3. js文件调整4.json数据文件二、项目布局和文件布局调整src/router/index.tssrc/views/Layout/LayoutIndex.vuesrc/views/Layout/IndexComponents/LayoutLeft.vuesrc/views/Home/Home.vuesrc/views/Home/component…

释放 PWA 的力量:2024 年的现代Web应用|React + TypeScript 示例

在2024年的Web开发领域,PWA(Progressive Web Apps)已经成为一个不可忽视的技术趋势。这篇文章将探讨PWA的最新发展,并通过实例展示如何构建一个现代PWA应用。 PWA的本质与优势 PWA本质上是一种将Web应用提升到接近原生应用体验的技…

el-form el-table 前端排序+校验+行编辑

一、页面 <template><div class"bg" v-if"formData.mouldData?.length 0">当前暂无模板&#xff0c;点击<view class"add" click"addMould">立即创建</view></div><div v-else><el-col :x…

ERA5下载数据-U850

ERA5更新后&#xff1a; 1. 升级新的cdsapirc Catalogue — 气候数据存储 --- Catalogue — Climate Data Store (copernicus.eu) ERA5下载数据页面&#xff0c;选择&#xff08;不是这个…………&#xff09; 是这个&#xff1a; ERA5 hourly data on pressure levels from…

分享 pdf 转 word 的免费平台

背景 找了很多 pdf 转 word 的平台都骗进去要会员&#xff0c;终于找到一个真正免费的&#xff0c;遂分享。 网址 PDF转Word转换器 - 100%免费市面上最优质的PDF转Word转换器 - 免费且易于使用。无附加水印 - 快速将PDF转成Word。https://smallpdf.com/cn/pdf-to-word

【Java入门 - 分支结构】第2关:if语句测试题

Java 中的 if 语句&#xff1a;灵活控制程序流程的利器 在 Java 编程中&#xff0c;if语句是一种基本但极其重要的控制结构&#xff0c;它允许我们根据特定的条件来决定程序的执行路径。本文将深入探讨 Java 中的if语句&#xff0c;介绍其语法、用法和一些常见的应用场景。 一…

iOS 18.1,未公开的新功能

童锦程祖师爷曾说过&#xff1a;“发誓可以&#xff0c;发朋友圈不行。”表面上看是渣男语录&#xff0c;实际上也说明了人们对隐私的看重。 在当今生活中&#xff0c;智能手机可能是最私密的电子产品&#xff0c;没有之一。不管是照片、联系人、短信、APP数据&#xff0c;甚至…

06.VSCODE:备战大项目,CMake专项配置

娇小灵活的简捷配置不过是年轻人谈情说爱的玩具&#xff0c;帝国大厦的构建&#xff0c;终归要交给CMake去母仪天下。一个没有使用 CMake 的 C 项目&#xff0c;就像未来世界里的一台相声表演&#xff0c;有了德纲却无谦&#xff0c;观众笑着遗憾。—— 语出《双城记》作者&…

基于 CentOS7.6 的 Docker 下载常用的容器(MySQLRedisMongoDB),解决拉取容器镜像失败问题

安装MySQL&Redis&MongoDB mysql选择是8版本&#xff0c;redis是选择4版本、mongoDB选择最新版&#xff0c;也可以根据自己的需要进行下载对应的版本&#xff0c;无非就是容器名:版本号 这样去拉去相关的容器镜像。如果你还不会在服务器中安装 docker&#xff0c;可以查…

Sping全面复习

Spring框架是一个功能强大且广泛使用的Java平台&#xff0c;它通过提供全面的基础设施支持&#xff0c;使得开发人员能够轻松构建高效、可移植、易于测试的代码。Spring的核心特性包括依赖注入&#xff08;DI&#xff09;、面向切面编程&#xff08;AOP&#xff09;和事件驱动模…

【Linux学习】【Ubuntu入门】1-3 ubuntu连接USB设备

1.打开VMware&#xff0c;打开新建的虚拟机&#xff0c;插入U盘&#xff0c;可在弹出对话框进行选择USB连接到主机或连接到虚拟机。&#xff08;长时间未操作默认连接主机&#xff09; 2.若USB在连接主机的情况下&#xff0c;可通过右键点击右下角进行连接到虚拟机。 3.若已连接…

炼码LintCode--数据库--基础语法--刷题笔记_01

目录 炼码LintCode数据库入门级别的笔记未完待续~~~ 炼码LintCode 数据库 入门级别的笔记 笔记如下&#xff0c;把所有涉及到的入门级别的知识点简单总结了一下。 以及一点点举一反三的写法。 增 INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);批量增 INSERT INT…

docker:docker: Get https://registry-1.docker.io/v2/: net/http: request canceled

无数次的拉镜像让人崩溃&#xff1a; rootnode11:~/ragflow/docker# more rag.sh #export HTTP_PROXYhttp://192.168.207.127:7890 #export HTTPS_PROXYhttp://192.168.207.127:7890 #export NO_PROXYlocalhost,127.0.0.1,.aliyun.com docker compose -f docker-compose-gpu-C…

Flutter:使用Future发送网络请求

pubspec.yaml配置http的SDK cupertino_icons: ^1.0.8 http: ^1.2.2请求数据的格式转换 // Map 转 json final chat {name: 张三,message: 吃饭了吗, }; final chatJson json.encode(chat); print(chatJson);// json转Map final newChat json.decode(chatJson); print(newCha…

llama-cpp模型轻量化部署与量化

一、定义 定义配置环境遇到的问题&#xff0c;交互模式下模型一直输出&#xff0c;不会停止模型量化Qwen1.5-7B 案例demo 二、实现 定义 主要应用与cpu 上的部署框架。由c完成。配置环境 https://github.com/ggerganov/llama.cpp https://github.com/echonoshy/cgft-llm/blo…

阅读《当代反无人机系统技术综述》笔记

目录 文献基本信息 序言 一、关键技术 1.1射频(RF)分析仪 1.2雷达 1.3视觉传感器和图像处理 1.4声学传感器 二、发展趋势 文献基本信息 题名&#xff1a;当代反无人机系统技术综述 作者&#xff1a;蒋罗婷 来源&#xff1a;电子质量 发表时间&#xff1a;2023-02-2…