Zynq.PsUartInterrupts.Mos 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. PsUartMin, Platform, Interrupts;
  8. CONST
  9. UartIrq = [59,82];
  10. TYPE
  11. (** UART interrupt handler *)
  12. UartInterruptHandler* = PROCEDURE(param: ANY);
  13. VAR
  14. intrHandler0, intrHandler1: UartInterruptHandler;
  15. intrHandlerParam0, intrHandlerParam1: ANY;
  16. PROCEDURE IntrHandlerUart0(irq: LONGINT);
  17. BEGIN
  18. intrHandler0(intrHandlerParam0);
  19. END IntrHandlerUart0;
  20. PROCEDURE IntrHandlerUart1(irq: LONGINT);
  21. BEGIN
  22. intrHandler1(intrHandlerParam1);
  23. END IntrHandlerUart1;
  24. (**
  25. Install a UART interrupt handler
  26. uart: PS UART controller ID
  27. interruptHandler: interrupt handler
  28. interruptHandlerParam: parameter to be passed to interrupt handler
  29. Return: FALSE in case of a wrong value of UART ID or if interruptHandler is NIL
  30. *)
  31. PROCEDURE InstallInterruptHandler*(uart: LONGINT; interruptHandler: UartInterruptHandler; interruptHandlerParam: ANY): BOOLEAN;
  32. BEGIN
  33. IF interruptHandler = NIL THEN
  34. RETURN FALSE;
  35. END;
  36. CASE uart OF
  37. 0:
  38. intrHandler0 := interruptHandler;
  39. intrHandlerParam0 := interruptHandlerParam;
  40. Interrupts.InstallHandler(IntrHandlerUart0,UartIrq[0]);
  41. |1:
  42. intrHandler1 := interruptHandler;
  43. intrHandlerParam1 := interruptHandlerParam;
  44. Interrupts.InstallHandler(IntrHandlerUart1,UartIrq[1]);
  45. ELSE
  46. RETURN FALSE;
  47. END;
  48. RETURN TRUE;
  49. END InstallInterruptHandler;
  50. END PsUartInterrupts.