您的位置 首页 分销

Zynq uart软件中止hook的操作过程

Zynq uart软件中断hook的操作过程-早期运用的arm芯片规模较小,在芯片上直接有uart的中断服务函数地址寄存器,直接将中断服务函数的地址写入寄存器就搞定了。

前期运用的arm芯片规划较小,在芯片上直接有uart的中止服务函数地址寄存器,直接将中止服务函数的地址写入寄存器就搞定了。然后zynq好像比较复杂,中止也比较复杂。在zynq中有个Scu(snoop control unit窥视操控单元,也是arm一切的)专门操控中止处理。Vivado SDK中供给了scugic驱动来处理相关的操作。下面详细说一下,中止hook的进程。

Zynq uart软件中止hook的操作进程

XScuGic_LookupConfig // 找到scugic的界说实体;

XScuGic_CfgInitialize // 初始化scugic实体;

Xil_ExcepTIonInit() //反常处理初始化

Xil_ExcepTIonRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT,

(Xil_ExcepTIonHandler)XScuGic_InterruptHandler,

pScuGic);

这一步基本是固定的,中止触发之后一致由XScuGic_InterruptHandler先处理,然后在HandlerTable中查找相应的处理函数。这个HandlerTable数组的长度为95个,包括了一切的中止ID。

Xil_ExceptionEnable(); //反常处理使能

XScuGic_Connect( pScuGic,

XPAR_PS7_UART_1_INTR, (Xil_InterruptHandler)ZUartPs_InterruptHandler , (void*)pUart1Inst);

这才是将咱们界说的中止服务函数地址映射到HandlerTable中。也能够运用UartPs驱动中包括的中止处理函数。

XScuGic_Enable( pScuGic, XPAR_PS7_UART_1_INTR);

//使能uart对应的中止ID。

XUartPs_SetInterruptMask( pUart1Inst, XUARTPS_IXR_RXOVR | XUARTPS_IXR_TXEMPTY /*| XUARTPS_IXR_TNFUL*/ );

这应用程序中敞开接纳缓冲fifo中止与发送为空中止。

这时uart接纳到数据,则会主动跳入中止处理函数ZUartPs_InterruptHandler中。向发送硬fifo中写入数据,在数据发空后,也会跳入中止处理函数ZUartPs_Interrupt Handler中。两者依据不同中止状况寄存器中的标识进行相应的处理。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/fenxiao/336734.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部