Zynquart软件中断hook的操作过程

早期运用的     arm   芯片规模较小,在芯片上直接有     uart   的中断服务函数地址     寄存器   ,直接将中断服务函数的地址写入寄存器就搞定了。然后zynq似乎比较复杂,中断也比较复杂。在zynq中有个Scu(snoop control unit窥探控制单元,也是arm所有的)专门控制中断处理。Vivado SDK中提供了scugic驱动来处理相关的操作。下面具体说一下,中断hook的过程。

 Zynquart软件中断hook的操作过程_设计制作_接口/总线/驱动

XScuGic_LookupConfig // 找到scugic的定义实体;

XScuGic_CfgIni     ti   alize // 初始化scugic实体;

Xil_Excep  TI onInit() //异常处理初始化

Xil_Excep  TI onRegis     te   rHandler(XIL_EXCEP  TI ON_ID_IRQ_INT,

(Xil_Excep  TI onHandler)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_RXO     VR   | XUARTPS_IXR_TXEMPTY /*| XUARTPS_IXR_TNFUL*/ );

这应用程序中开启接收缓冲fifo中断与发送为空中断。

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

80
77
0
59

相关资讯

  1. 1、李现红色调氛围感写真好绝,刺猬头加胡茬造型,真是让人心动4028
  2. 2、剧集正在热播,男主却被曝性骚扰鞠婧祎,工作室急忙发声明维权2107
  3. 3、《战狼3》没盼头,吴京新电影有望冲击50亿,四大导演阵容猜不到1635
  4. 4、喜讯!TVB新闻之花今日嫁做人妻丈夫是比她小两岁的消防员2541
  5. 5、贾玲成为全球票房最高女导演票房累计达53.03亿4809
  6. 6、发哥爆料谢霆锋还会写剧本,网友:除了父亲角色他算完美男人了1187
  7. 7、最后一集收视率25%,2021年最疯狂新剧终于迎来大结局!3686
  8. 8、甄嬛死都不知,端妃为纯元复仇用麝香害甄嬛滑胎,崔槿汐为其同谋437
  9. 9、《猫和老鼠》曝“疯狂拆家”片段猫鼠大战欢乐无边208
  10. 10、《超凡蜘蛛侠2》格温之死痛心开启英雄新篇章3139
全部评论(0)
我也有话说
0
收藏
点赞
顶部