fsl_gpc.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /*
  2. * Copyright (c) 2016, Freescale Semiconductor, Inc.
  3. * Copyright 2016-2019 NXP
  4. * All rights reserved.
  5. *
  6. *
  7. * SPDX-License-Identifier: BSD-3-Clause
  8. */
  9. #include "fsl_gpc.h"
  10. /* Component ID definition, used by tools. */
  11. #ifndef FSL_COMPONENT_ID
  12. #define FSL_COMPONENT_ID "platform.drivers.gpc_1"
  13. #endif
  14. /*!
  15. * brief Enable the IRQ.
  16. *
  17. * param base GPC peripheral base address.
  18. * param irqId ID number of IRQ to be enabled, available range is 32-159. 0-31 is available in some platforms.
  19. */
  20. void GPC_EnableIRQ(GPC_Type *base, uint32_t irqId)
  21. {
  22. uint32_t irqRegNum = irqId / 32U;
  23. uint32_t irqRegShiftNum = irqId % 32U;
  24. assert(irqRegNum <= GPC_IMR_COUNT);
  25. #if ((defined FSL_FEATURE_GPC_HAS_IRQ_0_31) && FSL_FEATURE_GPC_HAS_IRQ_0_31)
  26. if (irqRegNum == GPC_IMR_COUNT)
  27. {
  28. base->IMR5 &= ~(1UL << irqRegShiftNum);
  29. }
  30. else
  31. {
  32. base->IMR[irqRegNum] &= ~(1UL << irqRegShiftNum);
  33. }
  34. #else
  35. assert(irqRegNum > 0U);
  36. base->IMR[irqRegNum - 1UL] &= ~(1UL << irqRegShiftNum);
  37. #endif /* FSL_FEATURE_GPC_HAS_IRQ_0_31 */
  38. }
  39. /*!
  40. * brief Disable the IRQ.
  41. *
  42. * param base GPC peripheral base address.
  43. * param irqId ID number of IRQ to be disabled, available range is 32-159. 0-31 is available in some platforms.
  44. */
  45. void GPC_DisableIRQ(GPC_Type *base, uint32_t irqId)
  46. {
  47. uint32_t irqRegNum = irqId / 32U;
  48. uint32_t irqRegShiftNum = irqId % 32U;
  49. assert(irqRegNum <= GPC_IMR_COUNT);
  50. #if ((defined FSL_FEATURE_GPC_HAS_IRQ_0_31) && FSL_FEATURE_GPC_HAS_IRQ_0_31)
  51. if (irqRegNum == GPC_IMR_COUNT)
  52. {
  53. base->IMR5 |= (1UL << irqRegShiftNum);
  54. }
  55. else
  56. {
  57. base->IMR[irqRegNum] |= (1UL << irqRegShiftNum);
  58. }
  59. #else
  60. assert(irqRegNum > 0U);
  61. base->IMR[irqRegNum - 1UL] |= (1UL << irqRegShiftNum);
  62. #endif /* FSL_FEATURE_GPC_HAS_IRQ_0_31 */
  63. }
  64. /*!
  65. * brief Get the IRQ/Event flag.
  66. *
  67. * param base GPC peripheral base address.
  68. * param irqId ID number of IRQ to be enabled, available range is 32-159. 0-31 is available in some platforms.
  69. * return Indicated IRQ/Event is asserted or not.
  70. */
  71. bool GPC_GetIRQStatusFlag(GPC_Type *base, uint32_t irqId)
  72. {
  73. uint32_t irqRegNum = irqId / 32U;
  74. uint32_t irqRegShiftNum = irqId % 32U;
  75. uint32_t ret;
  76. assert(irqRegNum <= GPC_IMR_COUNT);
  77. #if ((defined FSL_FEATURE_GPC_HAS_IRQ_0_31) && FSL_FEATURE_GPC_HAS_IRQ_0_31)
  78. if (irqRegNum == GPC_IMR_COUNT)
  79. {
  80. ret = base->ISR5 & (1UL << irqRegShiftNum);
  81. }
  82. else
  83. {
  84. ret = base->ISR[irqRegNum] & (1UL << irqRegShiftNum);
  85. }
  86. #else
  87. assert(irqRegNum > 0U);
  88. ret = base->ISR[irqRegNum - 1UL] & (1UL << irqRegShiftNum);
  89. #endif /* FSL_FEATURE_GPC_HAS_IRQ_0_31 */
  90. return (1UL << irqRegShiftNum) == ret;
  91. }