Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 

92 строки
2.7 KiB

  1. /*
  2. * Copyright (c) 2015, Freescale Semiconductor, Inc.
  3. * Copyright 2016-2017 NXP
  4. * All rights reserved.
  5. *
  6. * SPDX-License-Identifier: BSD-3-Clause
  7. */
  8. #include "fsl_dmamux.h"
  9. /*******************************************************************************
  10. * Definitions
  11. ******************************************************************************/
  12. /* Component ID definition, used by tools. */
  13. #ifndef FSL_COMPONENT_ID
  14. #define FSL_COMPONENT_ID "platform.drivers.dmamux"
  15. #endif
  16. /*******************************************************************************
  17. * Prototypes
  18. ******************************************************************************/
  19. /*!
  20. * @brief Get instance number for DMAMUX.
  21. *
  22. * @param base DMAMUX peripheral base address.
  23. */
  24. static uint32_t DMAMUX_GetInstance(DMAMUX_Type *base);
  25. /*******************************************************************************
  26. * Variables
  27. ******************************************************************************/
  28. /*! @brief Array to map DMAMUX instance number to base pointer. */
  29. static DMAMUX_Type *const s_dmamuxBases[] = DMAMUX_BASE_PTRS;
  30. #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
  31. /*! @brief Array to map DMAMUX instance number to clock name. */
  32. static const clock_ip_name_t s_dmamuxClockName[] = DMAMUX_CLOCKS;
  33. #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */
  34. /*******************************************************************************
  35. * Code
  36. ******************************************************************************/
  37. static uint32_t DMAMUX_GetInstance(DMAMUX_Type *base)
  38. {
  39. uint32_t instance;
  40. /* Find the instance index from base address mappings. */
  41. for (instance = 0; instance < ARRAY_SIZE(s_dmamuxBases); instance++)
  42. {
  43. if (s_dmamuxBases[instance] == base)
  44. {
  45. break;
  46. }
  47. }
  48. assert(instance < ARRAY_SIZE(s_dmamuxBases));
  49. return instance;
  50. }
  51. /*!
  52. * brief Initializes the DMAMUX peripheral.
  53. *
  54. * This function ungates the DMAMUX clock.
  55. *
  56. * param base DMAMUX peripheral base address.
  57. *
  58. */
  59. void DMAMUX_Init(DMAMUX_Type *base)
  60. {
  61. #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
  62. CLOCK_EnableClock(s_dmamuxClockName[DMAMUX_GetInstance(base)]);
  63. #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */
  64. }
  65. /*!
  66. * brief Deinitializes the DMAMUX peripheral.
  67. *
  68. * This function gates the DMAMUX clock.
  69. *
  70. * param base DMAMUX peripheral base address.
  71. */
  72. void DMAMUX_Deinit(DMAMUX_Type *base)
  73. {
  74. #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
  75. CLOCK_DisableClock(s_dmamuxClockName[DMAMUX_GetInstance(base)]);
  76. #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */
  77. }