您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

70 行
2.0 KiB

  1. /*
  2. * Copyright (c) 2015, Freescale Semiconductor, Inc.
  3. * Copyright 2016-2017, 2020 NXP
  4. * All rights reserved.
  5. *
  6. * SPDX-License-Identifier: BSD-3-Clause
  7. */
  8. #include "fsl_rcm.h"
  9. /* Component ID definition, used by tools. */
  10. #ifndef FSL_COMPONENT_ID
  11. #define FSL_COMPONENT_ID "platform.drivers.rcm"
  12. #endif
  13. /*!
  14. * brief Configures the reset pin filter.
  15. *
  16. * This function sets the reset pin filter including the filter source, filter
  17. * width, and so on.
  18. *
  19. * param base RCM peripheral base address.
  20. * param config Pointer to the configuration structure.
  21. */
  22. void RCM_ConfigureResetPinFilter(RCM_Type *base, const rcm_reset_pin_filter_config_t *config)
  23. {
  24. assert(NULL != config);
  25. #if (defined(FSL_FEATURE_RCM_REG_WIDTH) && (FSL_FEATURE_RCM_REG_WIDTH == 32))
  26. uint32_t reg;
  27. reg = (((uint32_t)config->enableFilterInStop << RCM_RPC_RSTFLTSS_SHIFT) | (uint32_t)config->filterInRunWait);
  28. if (config->filterInRunWait == kRCM_FilterBusClock)
  29. {
  30. reg |= ((uint32_t)config->busClockFilterCount << RCM_RPC_RSTFLTSEL_SHIFT);
  31. }
  32. base->RPC = reg;
  33. #else
  34. base->RPFC = (((uint8_t)config->enableFilterInStop << RCM_RPFC_RSTFLTSS_SHIFT) | (uint8_t)config->filterInRunWait);
  35. if (config->filterInRunWait == kRCM_FilterBusClock)
  36. {
  37. base->RPFW = config->busClockFilterCount;
  38. }
  39. #endif /* FSL_FEATURE_RCM_REG_WIDTH */
  40. }
  41. #if (defined(FSL_FEATURE_RCM_HAS_BOOTROM) && FSL_FEATURE_RCM_HAS_BOOTROM)
  42. /*!
  43. * brief Forces the boot from ROM.
  44. *
  45. * This function forces booting from ROM during all subsequent system resets.
  46. *
  47. * param base RCM peripheral base address.
  48. * param config Boot configuration.
  49. */
  50. void RCM_SetForceBootRomSource(RCM_Type *base, rcm_boot_rom_config_t config)
  51. {
  52. uint32_t reg;
  53. reg = base->FM;
  54. reg &= ~RCM_FM_FORCEROM_MASK;
  55. reg |= ((uint32_t)config << RCM_FM_FORCEROM_SHIFT);
  56. #if (defined(FSL_FEATURE_RCM_REG_WIDTH) && (FSL_FEATURE_RCM_REG_WIDTH == 32))
  57. base->FM = reg;
  58. #else
  59. base->FM = (uint8_t)reg;
  60. #endif /* FSL_FEATURE_RCM_REG_WIDTH == 32 */
  61. }
  62. #endif /* #if FSL_FEATURE_RCM_HAS_BOOTROM */