实时系统vxWorks-Zynq7020 PL中断使用(重要)

16 篇文章 ¥19.90 ¥99.00
本文介绍了如何在vxWorks6.9.4环境下,利用Zynq7020的PL中断进行实时系统开发。详细讲解了中断控制器的结构,包括SGI、PPI和SPI中断类型,并提供了PL中断信号的详细信息。内容涵盖中断接口、寄存器操作及示例代码,包括中断服务函数绑定、触发方式设置、优先级配置等步骤,最后通过按键验证中断功能。

概述

在任何嵌入式设计中,中断都是必不可少的部分,采用中断系统可以提高计算机系统效率、维持系统可靠正常工作、满足实时处理要求、提供故障现场处理手段。

注意

开发环境:vxWorks6.9.4,workbench3.3.5,开发板:TLZ7x-EasyEVM-A3。

另外,小编所有文章均是自己亲手编写验证,若需要小编的工程代码,请关注公众号,后台回复需要的工程文件。如想要本文中的工程源文件可回复“实时系统vxWorks - zynq7020 PL中断使用工程文件”获取。

以下为工程目录文件内容。有需要的小伙伴后台发送相关信息给小编获取。

文件内容如下:

axi_int_test:vivado工程。

ftp:主机与开发板ftp通讯目录。

obj:存放目标文件,包含vxWorks镜像,bootrom,以及BOOT.bin开发板启动文件。

vxworks:vxWor

<think>我们正在处理Zynq7045PL中断号的问题。根据之前的知识和引用,我们知道ZynqPL中断通过IRQ_F2P(Fabric-to-ProcessingSystem)中断线连接到PS的GIC。在Zynq7000系列中,PL中断的起始中断号是61(对于第一个PL中断)到68(最后一个,共8个中断线)。具体到Zynq7045,它属于Zynq-7000系列,因此中断号范围相同。从引用[1]中,我们看到一个例子:设备树中配置了PL中断,其说明符为`<0291>`。这里第二个数字29是SPI(共享外设中断)的编号,而ZynqPL中断属于SPI中断。在Zynq中,SPI中断的编号范围是32-95。PL中断被分配在61-68(对应SPI编号29-36?注意:这里需要转换)。实际上,在Zynq7000中,PL中断0对应SPI中断61(即GIC中断号61),PL中断1对应62,依此类推直到PL中断7对应68。因此,对于Zynq7045,PL端的中断号范围是61到68(共8个中断)。用户可以根据实际使用PL中断线(在Vivado中配置)来选择具体的中断号。例如,如果用户只使用了一个PL中断(比如中断0),那么中断号就是61。在VxWorks中,初始化PL中断时,我们需要使用这个中断号(61-68)来连接中断服务程序(ISR)和配置中断。注意:设备树中的第二个数字(如29)是Linux设备树中的中断号,它与GIC中断号有一个映射关系。在VxWorks中,我们直接使用GIC中断号(即61-68)。总结:Zynq7045PL中断号是61到68,具体使用哪个中断号取决于PL设计中使用了哪个中断线(从0到7)。引用[1]中的设备树中断说明符`<0291>`,其中29对应的是GIC中断号61(因为29+32=61?注意:在GIC中,中断号0-31是PPI,32-是SPI)。实际上,设备树中的第二个数字就是SPI中断的编号(从0开始),所以29表示SPI中断29,而GIC的SPI中断号是32+29=61。因此,设备树中的29对应GIC中断61。所以,在VxWorks中,我们直接使用61作为中断号。因此,用户需要:1.确认在Vivado中使用PL中断线(比如中断0,则中断号为61)。2.在VxWorks代码中使用中断号(61)进行中断配置。示例代码(VxWorks):```c#definePL_INT_NUM61//使用PL中断0//连接中断服务程序intConnect(INUM_TO_IVEC(PL_INT_NUM),myIsr,NULL);//使能中断intEnable(INUM_TO_IVEC(PL_INT_NUM));```注意:在VxWorks中,我们使用`INUM_TO_IVEC`宏将中断号转换为中断向量。如果用户使用多个PL中断,则需要为每个中断线分别配置(中断号61-68)。另外,在设备树中,中断说明符的第三个数字表示触发类型,1表示上升沿触发,4表示高电平触发(具体值可参考中断控制器绑定文档)。在VxWorks中,我们使用`vxGicIntSetType`函数设置触发类型,参数可以是`INTR_TRIGGER_LEVEL`(电平触发)或`INTR_TRIGGER_EDGE`(边沿触发)。所以,用户需要根据PL中断信号的实际触发类型来设置。相关问题:1.如何确认Vivado中PL中断线的使用情况?2.在VxWorks中如何配置多个PL中断?3.Zynq7045的PL中断触发类型如何选择?</think>### Zynq 7045 PL 中断号详解 在 Zynq 7045 系统中,PL(Programmable Logic)中断通过 PS(Processing System)的 GIC(Generic Interrupt Controller)进行管理。PL 中断号范围如下: #### 1. **标准中断号范围** - **PL 中断号范围:61 - 68** 这些中断对应 IRQ_F2P[7:0] 信号线,是 PL 到 PS 的标准中断通道: ```c #define PL_INT_0 61 // IRQ_F2P[0] #define PL_INT_1 62 // IRQ_F2P[1] #define PL_INT_2 63 // IRQ_F2P[2] #define PL_INT_3 64 // IRQ_F2P[3] #define PL_INT_4 65 // IRQ_F2P[4] #define PL_INT_5 66 // IRQ_F2P[5] #define PL_INT_6 67 // IRQ_F2P[6] #define PL_INT_7 68 // IRQ_F2P[7] ``` 在 Vivado 设计中,每个 IRQ_F2P 信号线可连接一个 PL 中断源[^1]。 #### 2. **中断号映射原理** 中断号由三部分构成(参考设备树中的中断说明符): ```dts interrupts = <0 29 4>; // 标准格式 ``` - **第一个数字**:中断类型(0 = SPI 共享外设中断- **第二个数字**:SPI 中断 ID(29 对应 GIC 中断 61) - **第三个数字**:触发类型(4 = 高电平触发) **SPI ID 到 GIC 中断号的转换公式**: $$ \text{GIC\_INT\_NUM} = \text{SPI\_ID} + 32 $$ 例如 SPI ID 29 对应 GIC 中断 29 + 32 = 61。 #### 3. **在 VxWorks 中的使用示例** ```c #include <intrLib.h> // 初始化 PL 中断0 (GIC 61) void init_pl_int(void) { // 设置电平触发 vxGicIntSetType(61, INTR_TRIGGER_LEVEL); // 连接中断服务程序 intConnect(INUM_TO_IVEC(61), pl_isr, NULL); // 使能中断 intEnable(INUM_TO_IVEC(61)); } // 中断服务程序 void pl_isr(void) { // 处理 PL 中断逻辑 ... } ``` #### 4. **验证中断配置** 1. **Vivado 检查**: 确认 `zynq_ps` 模块的 `IRQ_F2P` 端口已连接 PL 中断信号 2. **VxWorks Shell 命令**: ```shell -> intShow # 查看中断状态 -> devIntShow # 显示设备中断信息 ``` > **关键点**: > - PL 中断号 **固定为 61-68**,与具体 Zynq 7000 型号无关 > - 实际使用中断号取决于 Vivado 中连接的 `IRQ_F2P[x]` 信号线索引 > - 在设备树中 SPI ID 29-36 对应 GIC 61-68[^1]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不只会拍照的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值