123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- /*
- * @brief LPC8xx State Configurable Timer (SCT/PWM) Chip driver
- *
- * @note
- * Copyright(C) NXP Semiconductors, 2013
- * All rights reserved.
- *
- * @par
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * LPC products. This software is supplied "AS IS" without any warranties of
- * any kind, and NXP Semiconductors and its licenser disclaim any and
- * all warranties, express or implied, including all implied warranties of
- * merchantability, fitness for a particular purpose and non-infringement of
- * intellectual property rights. NXP Semiconductors assumes no responsibility
- * or liability for the use of the software, conveys no license or rights under any
- * patent, copyright, mask work right, or any other intellectual property rights in
- * or to any products. NXP Semiconductors reserves the right to make changes
- * in the software without notification. NXP Semiconductors also makes no
- * representation or warranty that such application will be suitable for the
- * specified use without further testing or modification.
- *
- * @par
- * Permission to use, copy, modify, and distribute this software and its
- * documentation is hereby granted, under NXP Semiconductors' and its
- * licensor's relevant copyrights in the software, without fee, provided that it
- * is used in conjunction with NXP Semiconductors microcontrollers. This
- * copyright, permission, and disclaimer notice must appear in all copies of
- * this code.
- */
- #ifndef __SCT_PWM_8XX_H_
- #define __SCT_PWM_8XX_H_
- #include "sct_8xx.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- /** @defgroup SCT_PWM_8XX CHIP: LPC15XX State Configurable Timer PWM driver
- *
- * For more information on how to use the driver please visit the FAQ page at
- * <a href="http://www.lpcware.com/content/faq/how-use-sct-standard-pwm-using-lpcopen">
- * www.lpcware.com</a>
- *
- * @ingroup CHIP_8XX_Drivers
- * @{
- */
- /**
- * @brief Get number of ticks per PWM cycle
- * @param pSCT : The base of SCT peripheral on the chip
- * @return Number ot ticks that will be counted per cycle
- * @note Return value of this function will be vaild only
- * after calling Chip_SCTPWM_SetRate()
- */
- STATIC INLINE uint32_t Chip_SCTPWM_GetTicksPerCycle(LPC_SCT_T *pSCT)
- {
- return pSCT->MATCHREL[0].U;
- }
- /**
- * @brief Converts a percentage to ticks
- * @param pSCT : The base of SCT peripheral on the chip
- * @param percent : Percentage to convert (0 - 100)
- * @return Number ot ticks corresponding to given percentage
- * @note Do not use this function when using very low
- * pwm rate (like 100Hz or less), on a chip that has
- * very high frequency as the calculation might
- * cause integer overflow
- */
- STATIC INLINE uint32_t Chip_SCTPWM_PercentageToTicks(LPC_SCT_T *pSCT, uint8_t percent)
- {
- return (Chip_SCTPWM_GetTicksPerCycle(pSCT) * percent) / 100;
- }
- /**
- * @brief Get number of ticks on per PWM cycle
- * @param pSCT : The base of SCT peripheral on the chip
- * @param index : Index of the PWM 1 to N (see notes)
- * @return Number ot ticks for which the output will be ON per cycle
- * @note @a index will be 1 to N where N is the "Number of
- * match registers available in the SCT - 1" or
- * "Number of OUTPUT pins available in the SCT" whichever
- * is minimum.
- */
- STATIC INLINE uint32_t Chip_SCTPWM_GetDutyCycle(LPC_SCT_T *pSCT, uint8_t index)
- {
- return pSCT->MATCHREL[index].U;
- }
- /**
- * @brief Get number of ticks on per PWM cycle
- * @param pSCT : The base of SCT peripheral on the chip
- * @param index : Index of the PWM 1 to N (see notes)
- * @param ticks : Number of ticks the output should say ON
- * @return None
- * @note @a index will be 1 to N where N is the "Number of
- * match registers available in the SCT - 1" or
- * "Number of OUTPUT pins available in the SCT" whichever
- * is minimum. The new duty cycle will be effective only
- * after completion of current PWM cycle.
- */
- STATIC INLINE void Chip_SCTPWM_SetDutyCycle(LPC_SCT_T *pSCT, uint8_t index, uint32_t ticks)
- {
- Chip_SCT_SetMatchReload(pSCT, (CHIP_SCT_MATCH_REG_T)index, ticks);
- }
- /**
- * @brief Initialize the SCT/PWM clock and reset
- * @param pSCT : The base of SCT peripheral on the chip
- * @return None
- */
- STATIC INLINE void Chip_SCTPWM_Init(LPC_SCT_T *pSCT)
- {
- Chip_SCT_Init(pSCT);
- }
- /**
- * @brief Start the SCT PWM
- * @param pSCT : The base of SCT peripheral on the chip
- * @return None
- * @note This function must be called after all the
- * configuration is completed. Do not call Chip_SCTPWM_SetRate()
- * or Chip_SCTPWM_SetOutPin() after the SCT/PWM is started. Use
- * Chip_SCTPWM_Stop() to stop the SCT/PWM before reconfiguring,
- * Chip_SCTPWM_SetDutyCycle() can be called when the SCT/PWM is
- * running to change the DutyCycle.
- */
- STATIC INLINE void Chip_SCTPWM_Start(LPC_SCT_T *pSCT)
- {
- Chip_SCT_ClearControl(pSCT, SCT_CTRL_HALT_L | SCT_CTRL_HALT_H);
- }
- /**
- * @brief Stop the SCT PWM
- * @param pSCT : The base of SCT peripheral on the chip
- * @return None
- */
- STATIC INLINE void Chip_SCTPWM_Stop(LPC_SCT_T *pSCT)
- {
- /* Stop SCT */
- Chip_SCT_SetControl(pSCT, SCT_CTRL_HALT_L | SCT_CTRL_HALT_H);
- /* Clear the counter */
- Chip_SCT_SetControl(pSCT, SCT_CTRL_CLRCTR_L | SCT_CTRL_CLRCTR_H);
- }
- /**
- * @brief Sets the frequency of the generated PWM wave
- * @param pSCT : The base of SCT peripheral on the chip
- * @param freq : Frequency in Hz
- * @return None
- */
- void Chip_SCTPWM_SetRate(LPC_SCT_T *pSCT, uint32_t freq);
- /**
- * @brief Setup the OUTPUT pin and associate it with an index
- * @param pSCT : The base of the SCT peripheral on the chip
- * @param index : Index of PWM 1 to N (see notes)
- * @param pin : COUT pin to be associated with the index
- * @return None
- * @note @a index will be 1 to N where N is the "Number of
- * match registers available in the SCT - 1" or
- * "Number of OUTPUT pins available in the SCT" whichever
- * is minimum.
- */
- void Chip_SCTPWM_SetOutPin(LPC_SCT_T *pSCT, uint8_t index, uint8_t pin);
- /**
- * @}
- */
- #ifdef __cplusplus
- }
- #endif
- #endif /* __SCT_PWM_8XX_H_ */
|