ZYNQ移植vxWorks6.9 之PL-PS中断

ZYNQ移植vxWorks6.9 之PL-PS中断

步骤:

  • 1.在vivado中的Block Design中添加PL-PS中断。
  • 2.在BSP中添加中断号。
  • 3.在BSP中添加中断优先级以及中断触发方式等。
  • 4.在镜像工程中注册和处理中断。

1. 在vivado中的Block Design中添加PL-PS中断

打开block design,选择Interrupts,勾选IRQ_F2P。
在这里插入图片描述
在ZYNQ7Z中选择“IRQ_F2P” “make External”之后选择external出来的管脚修改需要的中断数。
在这里插入图片描述

2.在BSP中添加中断号。

在BSP的 xlnx_zynq7k.h文件中添加中断号,其中断号查询查看UG585手册。

#define INT_LVL_ZYNQ0               (61)
#define INT_LVL_ZYNQ1               (62)
#define INT_LVL_ZYNQ2               (63)
#define INT_LVL_ZYNQ3               (64)
#define INT_LVL_ZYNQ4               (65)

#define INT_LVL_ZYNQ5               (66)
#define INT_LVL_ZYNQ6               (67)
#define INT_LVL_ZYNQ7               (68)
#define INT_LVL_ZYNQ8               (84)

在这里插入图片描述

#define INT_VEC_ZYNQ0               IVEC_TO_INUM(INT_LVL_ZYNQ0)
#define INT_VEC_ZYNQ1               IVEC_TO_INUM(INT_LVL_ZYNQ1)
#define INT_VEC_ZYNQ2               IVEC_TO_INUM(INT_LVL_ZYNQ2)
#define INT_VEC_ZYNQ3               IVEC_TO_INUM(INT_LVL_ZYNQ3)
#define INT_VEC_ZYNQ4               IVEC_TO_INUM(INT_LVL_ZYNQ4)
#define INT_VEC_ZYNQ5               IVEC_TO_INUM(INT_LVL_ZYNQ5)
#define INT_VEC_ZYNQ6               IVEC_TO_INUM(INT_LVL_ZYNQ6)
#define INT_VEC_ZYNQ7               IVEC_TO_INUM(INT_LVL_ZYNQ7)
#define INT_VEC_ZYNQ8               IVEC_TO_INUM(INT_LVL_ZYNQ8)

在这里插入图片描述

UG585第一章关于中断号的描述
在这里插入图片描述

3.在BSP中添加中断优先级以及中断触发方式

  • 在BSP的hwconf.c中添加中断优先级和中断触发方式
	{ INT_VEC_ZYNQ0,	   128 },
	{ INT_VEC_ZYNQ1,	   128 },
	{ INT_VEC_ZYNQ2,	   128 },
	{ INT_VEC_ZYNQ3,	   128 },
	{ INT_VEC_ZYNQ4,	   128 },
	{ INT_VEC_ZYNQ5,	   128 },
	

在这里插入图片描述

	{ INT_VEC_ZYNQ0,			VXB_INTR_TRIG_EDGE },
	{ INT_VEC_ZYNQ1,			VXB_INTR_TRIG_EDGE },
	{ INT_VEC_ZYNQ2,			VXB_INTR_TRIG_EDGE },
	{ INT_VEC_ZYNQ3,	   		VXB_INTR_TRIG_EDGE },
	{ INT_VEC_ZYNQ4,	   		VXB_INTR_TRIG_EDGE },
	{ INT_VEC_ZYNQ5,	   		VXB_INTR_TRIG_EDGE },

在这里插入图片描述

4.在镜像工程中注册和处理中断

  • 1)注册并处理中断
void PL_PS_IRQ_init()
{
	 	intDisable(INT_VEC_ZYNQ0); //禁止中断
	 	intConnect(INT_VEC_ZYNQ0, (VOIDFUNCPTR)Int_ISR0, 0); //注册系统中断
	    intEnable(INT_VEC_ZYNQ0);     
}
  • 2)编写中断处理函数
void Int_ISR0(int param)
{
	
	intDisable(INT_VEC_ZYNQ0);
    logMsg("............run into ISR0.........\n",0,0,0,0,0,0 );
	intEnable(INT_VEC_ZYNQ0);
	
}

备注:可以通过触发中断控制信号量,来做任务处理。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值