【原標題:smtp服務器工具管理方式 fir濾波器音頻系統優化加窗】財金網消息 早期運用的arm芯片規模較小,在芯片上直接有uart的中斷服務函數地址寄存器,直接將中斷服務函數的地址寫入寄存器就搞定了。然后zynq似乎比較復雜,中斷也比較復雜。在zynq中有個Scu(snoop control unit窺探控制單元,也是arm所有的)專門控制中斷處理。Vivado SDK中提供了scugic驅動來處理相關的操作。下面具體說一下,中斷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中。兩者根據不同中斷狀態寄存器中的標識進行相應的處理。