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);
}
备注:可以通过触发中断控制信号量,来做任务处理。