MCUXpresso_LPC845/components/pwm/fsl_adapter_pwm.h

163 lines
5.9 KiB
C

/*
* Copyright 2018-2019 NXP
* All rights reserved.
*
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef _PWM_H_
#define _PWM_H_
/*!
* @addtogroup PWM_Adapter
* @{
*/
/************************************************************************************
*************************************************************************************
* Include
*************************************************************************************
***********************************************************************************/
/************************************************************************************
*************************************************************************************
* Public types
*************************************************************************************
************************************************************************************/
/*! @brief Hal pwm mode. */
typedef enum _hal_pwm_mode
{
kHAL_EdgeAlignedPwm = 0U, /*!< Edge aligned PWM */
kHAL_CenterAlignedPwm, /*!< Center aligned PWM */
} hal_pwm_mode_t;
/*! @brief PWM output pulse level select: high-true, low-true or no output */
typedef enum _hal_pwm_level_select
{
kHAL_PwmNoPwmSignal = 0U, /*!< No PWM output on pin */
kHAL_PwmLowTrue, /*!< Low true pulses */
kHAL_PwmHighTrue, /*!< High true pulses */
} hal_pwm_level_select_t;
/*! @brief Hal pwm status. */
typedef enum _hal_pwm_status
{
kStatus_HAL_PwmSuccess = kStatus_Success, /*!< Success */
kStatus_HAL_PwmFail = MAKE_STATUS(kStatusGroup_HAL_PWM, 1), /*!< Failure*/
kStatus_HAL_PwmNotSupport = MAKE_STATUS(kStatusGroup_HAL_PWM, 2), /*!< Not support*/
kStatus_HAL_PwmOutOfRanger = MAKE_STATUS(kStatusGroup_HAL_PWM, 3), /*!< Pwm is Out Of Ranger */
} hal_pwm_status_t;
/*! @brief hal pwm configuration structure for hal pwm setting. */
typedef struct _hal_pwm_setup_config
{
hal_pwm_level_select_t level; /*!< PWM output pulse level select */
hal_pwm_mode_t mode; /*!< PWM mode select */
uint32_t pwmFreq_Hz; /*!< PWM frequency */
uint8_t dutyCyclePercent; /*!< PWM duty cycle percent */
} hal_pwm_setup_config_t;
/*! @brief Hal pwm handle size. */
#define HAL_PWM_HANDLE_SIZE (8U)
/*! @brief Hal pwm handle. */
typedef void *hal_pwm_handle_t;
/*!
* @brief Defines the PMW handle
*
* This macro is used to define a 4 byte aligned PWM handle.
* Then use "(hal_pwm_handle_t)name" to get the PWM handle.
*
* The macro should be global and could be optional. You could also define PWM handle by yourself.
*
* This is an example,
* @code
* HAL_PWM_HANDLE_DEFINE(pwmHandle);
* @endcode
*
* @param name The name string of the PMW handle.
*/
#define HAL_PWM_HANDLE_DEFINE(name) uint32_t name[(HAL_PWM_HANDLE_SIZE + sizeof(uint32_t) - 1U) / sizeof(uint32_t)]
/************************************************************************************
*************************************************************************************
* Public prototypes
*************************************************************************************
************************************************************************************/
#if defined(__cplusplus)
extern "C" {
#endif /* _cplusplus */
/*!
* @brief Initializes the pwm adapter module for a pwm basic operation.
*
* @note This API should be called at the beginning of the application using the pwm adapter.
*
* Example below shows how to use this API to configure the PWM.
* @code
* HAL_PWM_HANDLE_DEFINE(pwmHandle);
* HAL_PwmInit((hal_pwm_handle_t)pwmHandle, BOARD_PWM_INSTANCE, BOARD_PWM_SOURCE_CLOCK);
* @endcode
*
* @param halPwmHandle Hal pwm adapter handle, the handle buffer with size #HAL_PWM_HANDLE_SIZE should be
* allocated at upper level
* The handle should be 4 byte aligned, because unaligned access doesn't be supported on some devices.
* You can define the handle in the following two ways:
* #HAL_PWM_HANDLE_DEFINE(halPwmHandle);
* or
* uint32_t halPwmHandle[((HAL_PWM_HANDLE_SIZE + sizeof(uint32_t) - 1U) / sizeof(uint32_t))];
* @param instance The instance index of the hardware PWM. For example, if FTM is used as the PWM hardware,
* 0 should be set to "instance" to use FTM0; 2 should be set to "instance" to use FTM2
* detail information please refer to the SOC corresponding RM.
* Invalid instance value will cause initialization failure.
* @param srcClock_Hz Frequency of source clock of the pwm module
* @retval kStatus_HAL_PwmSuccess pwm initialization succeed
*
*/
hal_pwm_status_t HAL_PwmInit(hal_pwm_handle_t halPwmHandle, uint8_t instance, uint32_t srcClock_Hz);
/*!
* @brief DeInitilizate the pwm adapter module.
*
* @note This API should be called when not using the pwm adapter driver anymore.
*
* @param halPwmHandle Hal pwm adapter handle
*/
void HAL_PwmDeinit(hal_pwm_handle_t halPwmHandle);
/*!
* @brief setup pwm.
*
* @note This API should be called when setup the pwm.
*
* @param halPwmHandle Hal pwm adapter handle
* @param channel Channel of pwm
* @param setupConfig A pointer to the HAL pwm setup configuration structure
* @retval kStatus_HAL_PwmSuccess pwm setup succeed
*/
hal_pwm_status_t HAL_PwmSetupPwm(hal_pwm_handle_t halPwmHandle, uint8_t channel, hal_pwm_setup_config_t *setupConfig);
/*!
* @brief Update duty cycle of pwm.
*
* @note This API should be called when need update duty cycle.
*
* @param halPwmHandle Hal pwm adapter handle
* @param channel Channel of pwm
* @param mode PWM mode select
* @param dutyCyclePercent PWM duty cycle percent
* @retval kStatus_HAL_PwmSuccess pwm Update duty cycle succeed
*/
hal_pwm_status_t HAL_PwmUpdateDutycycle(hal_pwm_handle_t halPwmHandle,
uint8_t channel,
hal_pwm_mode_t mode,
uint8_t dutyCyclePercent);
#if defined(__cplusplus)
}
#endif
/*! @}*/
#endif /* _PWM_H_ */