/*
|
* Copyright (c) 2019-2023 Beijing Hanwei Innovation Technology Ltd. Co. and
|
* its subsidiaries and affiliates (collectly called MKSEMI).
|
*
|
* All rights reserved.
|
*
|
* Redistribution and use in source and binary forms, with or without
|
* modification, are permitted provided that the following conditions are met:
|
*
|
* 1. Redistributions of source code must retain the above copyright notice,
|
* this list of conditions and the following disclaimer.
|
*
|
* 2. Redistributions in binary form, except as embedded into an MKSEMI
|
* integrated circuit in a product or a software update for such product,
|
* must reproduce the above copyright notice, this list of conditions and
|
* the following disclaimer in the documentation and/or other materials
|
* provided with the distribution.
|
*
|
* 3. Neither the name of MKSEMI nor the names of its contributors may be used
|
* to endorse or promote products derived from this software without
|
* specific prior written permission.
|
*
|
* 4. This software, with or without modification, must only be used with a
|
* MKSEMI integrated circuit.
|
*
|
* 5. Any software provided in binary form under this license must not be
|
* reverse engineered, decompiled, modified and/or disassembled.
|
*
|
* THIS SOFTWARE IS PROVIDED BY MKSEMI "AS IS" AND ANY EXPRESS OR IMPLIED
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
* MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* DISCLAIMED. IN NO EVENT SHALL MKSEMI OR CONTRIBUTORS BE LIABLE FOR ANY
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
*/
|
|
#ifndef MK_PWM_H_
|
#define MK_PWM_H_
|
#include "mk_common.h"
|
|
#ifndef PWM_INT_MODE_EN
|
#define PWM_INT_MODE_EN (1)
|
#endif
|
|
/**
|
* @addtogroup MK8000_PWM
|
* @{
|
*/
|
|
/**
|
* @brief PWM channel IDs enumeration
|
*/
|
enum PWM_CH_T
|
{
|
PWM_ID0 = 0,
|
PWM_ID1 = 1,
|
PWM_ID2 = 2,
|
PWM_ID3 = 3,
|
PWM_ID4 = 4,
|
PWM_MAX_NUM
|
};
|
|
/**
|
* @brief PWM waveform mode enumeration
|
*/
|
enum PWM_WAVEFORM_T
|
{
|
PWM_SEQUENTIAL = 0,
|
PWM_SCATTERED,
|
};
|
|
/**
|
* @brief PWM channel config structure
|
*/
|
struct PWM_CH_CFG_T
|
{
|
enum PWM_WAVEFORM_T waveform; /*!< Specifies the PWM waveform mode */
|
uint8_t prescale; /*!< Specifies the prescale (0 ~ 15) of the PWM waveform */
|
uint8_t ratio; /*!< Specifies the duty cycle of the PWM waveform. \n
|
This parameter ranges from 0 to 100.
|
*/
|
uint8_t phase; /*!< Specifies the phase of the PWM waveform. \n
|
This parameter ranges from 0 to 360.
|
*/
|
uint8_t pol_inv; /*!< Specifies the inverting of the PWM waveform. \n
|
This parameter ranges from 0 to 1.
|
*/
|
uint8_t int_en; /*!< Enable or disable PWN channel interrupt */
|
};
|
|
/**
|
* @brief PWM general config structure
|
*/
|
struct PWM_CFG_T
|
{
|
uint8_t general_prescale; /*!< Specifies the prescale (0 ~ 15) of the PWM waveform */
|
|
uint8_t int_en; /*!< Specifies whether interupt in the NVIC interrupt controller is enabled or disabled. \n
|
This parameter shoule be one of the following values:
|
@arg true is enable
|
@arg false is disable
|
*/
|
drv_callback_t callback; /*!< Specifies the pointer to PWM Callback function */
|
};
|
|
/**
|
* @brief PWM handle Structure
|
*/
|
struct PWM_HANDLE_T
|
{
|
PWM_TypeDef *const base; /*!< PWM registers base address */
|
const IRQn_Type irq; /*!< PWM interupt number */
|
uint8_t general_prescale; /*!< PWM general prescale (0 ~ 15) */
|
uint8_t int_en; /*!< PWM interupt switch */
|
uint16_t reserved;
|
drv_callback_t callback; /*!< Pointer to PWM Callback function */
|
};
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
/**
|
* @brief Open PWM
|
* @param[in] config Pointer to a PWM_CFG_T structure that contains the configuration information for PWM. \n
|
* If this parameter is NULL, this function will use an PWM default config
|
* @return
|
* @arg DRV_ERROR error id
|
* @arg DEV_OK open succeed
|
*/
|
int pwm_open(struct PWM_CFG_T *config);
|
|
/**
|
* @brief Close PWM
|
* @return
|
* @arg DRV_ERROR error id
|
* @arg DEV_OK open succeed
|
*/
|
int pwm_close(void);
|
|
/**
|
* @brief Enable PWM channel
|
* @param[in] id PWM channel ID. \n
|
* This parameter should be one of the PWM_CH_T enum values without PWM_MAX_NUM
|
* @param[in] cfg Pointer to a PWM_CH_CFG_T structure that contains the configuration information for PWM channel.
|
* @return
|
* @arg DRV_ERROR error id
|
* @arg DEV_OK open succeed
|
*/
|
int pwm_ch_enable(enum PWM_CH_T id, const struct PWM_CH_CFG_T *cfg);
|
|
/**
|
* @brief Disable PWM channel
|
* @param[in] id PWM channel ID. \n
|
* This parameter should be one of the PWM_CH_T enum values without PWM_MAX_NUM
|
* @return
|
* @arg DRV_ERROR error id
|
* @arg DEV_OK open succeed
|
*/
|
int pwm_ch_disable(enum PWM_CH_T id);
|
|
/**
|
* @brief This function handles PWM interrupt.
|
*/
|
void PWM_IRQHandler(void);
|
|
#ifdef __cplusplus
|
}
|
#endif
|
|
/**
|
* @}
|
*/
|
|
#endif /* MK_PWM_H_ */
|