【无标题】

本文探讨了在ZYNQ7020上使用lwIP网络库时遇到的中断冲突问题,原因在于重复初始化中断控制器。提供了两种解决方案:一是调整中断初始化顺序,二是修改lwIP中断配置以使用自定义中断。关键在于理解中断管理并确保资源正确分配。
摘要由CSDN通过智能技术生成

项目场景:

ZYNQ 7020 lwip与其他中断不能同时起作用

问题描述

ZYNQ7020裸机注入lwip回环模板后再加入自己写入的中断事件后lwip无法使用


---

# 原因分析:
经多方查阅资料才知道是我自己写的中断又例化了一遍中断控制器,导致lwip的例化的中断控制器被覆盖。

---

# 解决方案:
解决方案大体分为两种:
1、在main中先调用我自己的中断初始化代码,之后再调用lwip的中断初始化,并且把lwip中例化中断控制器的代码注释掉(在platfrom_zynq.v)。

void platform_setup_interrupts(void)
{//从这里开始注释掉
//	Xil_ExceptionInit();
//
//	XScuGic_DeviceInitialize(INTC_DEVICE_ID);
//
//	/*
//	 * Connect the interrupt controller interrupt handler to the hardware
//	 * interrupt handling logic in the processor.
//	 */
//	Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT,
//			(Xil_ExceptionHandler)XScuGic_DeviceInterruptHandler,
//			(void *)INTC_DEVICE_ID);
//到这里注释结束
	/*
	 * Connect the device driver handler that will be called when an
	 * interrupt for the device occurs, the handler defined above performs
	 * the specific interrupt processing for the device.
	 */
	XScuGic_RegisterHandler(INTC_BASE_ADDR, TIMER_IRPT_INTR,
					(Xil_ExceptionHandler)timer_callback,
					(void *)&TimerInstance);
	/*
	 * Enable the interrupt for scu timer.
	 */
	XScuGic_EnableIntr(INTC_DIST_BASE_ADDR, TIMER_IRPT_INTR);

	return;
}




在main函数中上来就先调用我自己的中断初始化,后面剩下的模板中的代码就不用动了。

int main()
{

			IntrInitFuntion(INTC_DEVICE_ID) ;

方法二:感谢嘿嘿の博主
修改lwip中断初始化代码,
在这里插入图片描述
然后main中 init_platform();调用改为:
在这里插入图片描述
其中的intcTimer使我们自己例化的中断控制器。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值