syscon_8xx.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /*
  2. * @brief LPC8xx System & Control driver
  3. *
  4. * @note
  5. * Copyright(C) NXP Semiconductors, 2012
  6. * All rights reserved.
  7. *
  8. * @par
  9. * Software that is described herein is for illustrative purposes only
  10. * which provides customers with programming information regarding the
  11. * LPC products. This software is supplied "AS IS" without any warranties of
  12. * any kind, and NXP Semiconductors and its licenser disclaim any and
  13. * all warranties, express or implied, including all implied warranties of
  14. * merchantability, fitness for a particular purpose and non-infringement of
  15. * intellectual property rights. NXP Semiconductors assumes no responsibility
  16. * or liability for the use of the software, conveys no license or rights under any
  17. * patent, copyright, mask work right, or any other intellectual property rights in
  18. * or to any products. NXP Semiconductors reserves the right to make changes
  19. * in the software without notification. NXP Semiconductors also makes no
  20. * representation or warranty that such application will be suitable for the
  21. * specified use without further testing or modification.
  22. *
  23. * @par
  24. * Permission to use, copy, modify, and distribute this software and its
  25. * documentation is hereby granted, under NXP Semiconductors' and its
  26. * licensor's relevant copyrights in the software, without fee, provided that it
  27. * is used in conjunction with NXP Semiconductors microcontrollers. This
  28. * copyright, permission, and disclaimer notice must appear in all copies of
  29. * this code.
  30. */
  31. #define _CHIP_COMMON_
  32. #include "chip.h"
  33. /*****************************************************************************
  34. * Private types/enumerations/variables
  35. ****************************************************************************/
  36. /* PDSLEEPCFG register mask */
  37. #define PDSLEEPWRMASK (0x0000FFB7)
  38. #define PDSLEEPDATMASK (0x00000048)
  39. #if defined(CHIP_LPC82X)
  40. /* PDWAKECFG and PDRUNCFG register masks */
  41. #define PDWAKEUPWRMASK (0x00006D00)
  42. #define PDWAKEUPDATMASK (0x000080FF)
  43. #else
  44. /* PDWAKECFG and PDRUNCFG register masks */
  45. #define PDWAKEUPWRMASK (0x00006D10)
  46. #define PDWAKEUPDATMASK (0x000080EF)
  47. #endif
  48. /*****************************************************************************
  49. * Public types/enumerations/variables
  50. ****************************************************************************/
  51. /*****************************************************************************
  52. * Private functions
  53. ****************************************************************************/
  54. /*****************************************************************************
  55. * Public functions
  56. ****************************************************************************/
  57. /* Setup deep sleep behaviour for power down */
  58. void Chip_SYSCTL_SetDeepSleepPD(uint32_t sleepmask)
  59. {
  60. /* Update new value */
  61. LPC_SYSCTL->PDSLEEPCFG = PDSLEEPWRMASK | (sleepmask & PDSLEEPDATMASK);
  62. }
  63. /* Setup wakeup behaviour from deep sleep */
  64. void Chip_SYSCTL_SetWakeup(uint32_t wakeupmask)
  65. {
  66. /* Update new value */
  67. LPC_SYSCTL->PDAWAKECFG = PDWAKEUPWRMASK | (wakeupmask & PDWAKEUPDATMASK);
  68. }
  69. /* Power down one or more blocks or peripherals */
  70. void Chip_SYSCTL_PowerDown(uint32_t powerdownmask)
  71. {
  72. uint32_t pdrun;
  73. /* Get current power states */
  74. pdrun = LPC_SYSCTL->PDRUNCFG & PDWAKEUPDATMASK;
  75. /* Disable peripheral states by setting high */
  76. pdrun |= (powerdownmask & PDWAKEUPDATMASK);
  77. /* Update power states with required register bits */
  78. LPC_SYSCTL->PDRUNCFG = (PDWAKEUPWRMASK | pdrun);
  79. }
  80. /* Power up one or more blocks or peripherals */
  81. void Chip_SYSCTL_PowerUp(uint32_t powerupmask)
  82. {
  83. uint32_t pdrun;
  84. /* Get current power states */
  85. pdrun = LPC_SYSCTL->PDRUNCFG & PDWAKEUPDATMASK;
  86. /* Enable peripheral states by setting low */
  87. pdrun &= ~(powerupmask & PDWAKEUPDATMASK);
  88. /* Update power states with required register bits */
  89. LPC_SYSCTL->PDRUNCFG = (PDWAKEUPWRMASK | pdrun);
  90. }