1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- (**
- AUTHOR: Alexey Morozov, Timothee Martiel, HighDim GmbH, 2013-2018
- PURPOSE: interrupt handling infrastracture for Zynq PS UART driver used in A2
- *)
- MODULE PsUartInterrupts;
- IMPORT
- PsUartMin, Platform, Interrupts;
-
- CONST
- UartIrq = [59,82];
- TYPE
- (** UART interrupt handler *)
- UartInterruptHandler* = PROCEDURE(param: ANY);
- VAR
- intrHandler0, intrHandler1: UartInterruptHandler;
- intrHandlerParam0, intrHandlerParam1: ANY;
- PROCEDURE IntrHandlerUart0(irq: LONGINT);
- BEGIN
- intrHandler0(intrHandlerParam0);
- END IntrHandlerUart0;
- PROCEDURE IntrHandlerUart1(irq: LONGINT);
- BEGIN
- intrHandler1(intrHandlerParam1);
- END IntrHandlerUart1;
- (**
- Install a UART interrupt handler
- uart: PS UART controller ID
- interruptHandler: interrupt handler
- interruptHandlerParam: parameter to be passed to interrupt handler
- Return: FALSE in case of a wrong value of UART ID or if interruptHandler is NIL
- *)
- PROCEDURE InstallInterruptHandler*(uart: LONGINT; interruptHandler: UartInterruptHandler; interruptHandlerParam: ANY): BOOLEAN;
- BEGIN
- IF interruptHandler = NIL THEN
- RETURN FALSE;
- END;
- CASE uart OF
- 0:
- intrHandler0 := interruptHandler;
- intrHandlerParam0 := interruptHandlerParam;
- Interrupts.InstallHandler(IntrHandlerUart0,UartIrq[0]);
- |1:
- intrHandler1 := interruptHandler;
- intrHandlerParam1 := interruptHandlerParam;
- Interrupts.InstallHandler(IntrHandlerUart1,UartIrq[1]);
- ELSE
- RETURN FALSE;
- END;
- RETURN TRUE;
- END InstallInterruptHandler;
- END PsUartInterrupts.
|