Zynq.PsUartInterrupts.Mod 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. (**
  2. AUTHOR: Alexey Morozov, Timothee Martiel, HighDim GmbH, 2013-2018
  3. PURPOSE: interrupt handling infrastracture for Zynq PS UART driver used in A2
  4. *)
  5. MODULE PsUartInterrupts;
  6. IMPORT
  7. Platform, Machine;
  8. TYPE
  9. (** UART interrupt handler *)
  10. UartInterruptHandler* = PROCEDURE(param: ANY);
  11. VAR
  12. intrHandler0, intrHandler1: UartInterruptHandler;
  13. intrHandlerParam0, intrHandlerParam1: ANY;
  14. PROCEDURE IntrHandlerUart0(VAR state: Machine.State);
  15. BEGIN
  16. intrHandler0(intrHandlerParam0);
  17. END IntrHandlerUart0;
  18. PROCEDURE IntrHandlerUart1(VAR state: Machine.State);
  19. BEGIN
  20. intrHandler1(intrHandlerParam1);
  21. END IntrHandlerUart1;
  22. (**
  23. Install a UART interrupt handler
  24. uart: PS UART controller ID
  25. interruptHandler: interrupt handler
  26. interruptHandlerParam: parameter to be passed to interrupt handler
  27. Return: FALSE in case of a wrong value of UART ID or if interruptHandler is NIL
  28. *)
  29. PROCEDURE InstallInterruptHandler*(uart: LONGINT; interruptHandler: UartInterruptHandler; interruptHandlerParam: ANY): BOOLEAN;
  30. BEGIN
  31. IF interruptHandler = NIL THEN
  32. RETURN FALSE;
  33. END;
  34. CASE uart OF
  35. 0:
  36. intrHandler0 := interruptHandler;
  37. intrHandlerParam0 := interruptHandlerParam;
  38. Machine.InstallHandler(IntrHandlerUart0,Platform.UartIrq[0]);
  39. |1:
  40. intrHandler1 := interruptHandler;
  41. intrHandlerParam1 := interruptHandlerParam;
  42. Machine.InstallHandler(IntrHandlerUart1,Platform.UartIrq[1]);
  43. ELSE
  44. RETURN FALSE;
  45. END;
  46. RETURN TRUE;
  47. END InstallInterruptHandler;
  48. END PsUartInterrupts.