|
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
// File name : pwm_drv.h
|
|
|
// Version : V0.1
|
|
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
#ifndef PWM_DRV_H_
|
|
|
#define PWM_DRV_H_
|
|
|
|
|
|
#include "pwm_reg.h"
|
|
|
|
|
|
#define PWM ((PWM_TypeDef *)(PWM_BASE_ADDR))
|
|
|
|
|
|
//PWM_PORT DEFINITION
|
|
|
#define PWM_PORT0 0
|
|
|
#define PWM_PORT1 1
|
|
|
#define PWM_PORT2 2
|
|
|
#define PWM_PORT3 3
|
|
|
|
|
|
#define IS_PWM_PORTx(port) (((port) == PWM_PORT0) || \
|
|
|
((port) == PWM_PORT1) || \
|
|
|
((port) == PWM_PORT2) || \
|
|
|
((port) == PWM_PORT3))
|
|
|
|
|
|
|
|
|
//PWM Clock divider
|
|
|
#define PWM_CLK_DIV_1 4
|
|
|
#define PWM_CLK_DIV_2 0
|
|
|
#define PWM_CLK_DIV_4 1
|
|
|
#define PWM_CLK_DIV_8 2
|
|
|
#define PWM_CLK_DIV_16 3
|
|
|
#define IS_PWM_CLK_DIV(div) (((div) == PWM_CLK_DIV_1) || \
|
|
|
((div) == PWM_CLK_DIV_2) || \
|
|
|
((div) == PWM_CLK_DIV_4) || \
|
|
|
((div) == PWM_CLK_DIV_8) || \
|
|
|
((div) == PWM_CLK_DIV_16))
|
|
|
|
|
|
|
|
|
#define PWM_PULLUP_EN 1
|
|
|
#define PWM_PULLUP_DIS 0
|
|
|
|
|
|
#define IS_PWM_PULLUP_STA(sta) (((sta) == PWM_PULLUP_EN) || \
|
|
|
((sta) == PWM_PULLUP_DIS))
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PWM_OutputInit
|
|
|
* Description : PWM输出初始化,输出脉冲
|
|
|
* Input : - PWMx : PWM channel;where x can be 0, 1, 2, 3 to select the PWM peripheral.
|
|
|
* - PWM_Prescaler: PWM预分频值
|
|
|
* - PWM_Csr:Clock Source Selection
|
|
|
* 取值:PWM_CLK_DIV_1、PWM_CLK_DIV_16、PWM_CLK_DIV_8、PWM_CLK_DIV_4、PWM_CLK_DIV_2
|
|
|
* - PWM_Period:PWM Counter/Timer Loaded Value, data range : 65535~0 (Unit : 1 PWM clock cycle)
|
|
|
* One PWM cycle width = PWM_Period + 1
|
|
|
* - PWM_Width:PWM Comparator Register Value;data range : 65535~0 (Unit : 1 PWM clock cycle)
|
|
|
* used to determine PWM output duty ratio
|
|
|
* PWM_Width >= PWM_Period : PWM output is always high
|
|
|
* PWM_Width >= PWM_Period : PWM output high = (PWM_Width + 1) unit
|
|
|
* PWM_Width = 0 : PWM output high = 1 unit
|
|
|
* - PWM_CHxINV_Flg:Timer Inverter ON/OFF flag
|
|
|
* 1 = Inverter ON
|
|
|
* 0 = Inverter OFF
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
*******************************************************************************/
|
|
|
extern void PWM_OutputInit(UINT8 PWMx, UINT8 PWM_Prescaler, UINT8 PWM_Csr, UINT16 PWM_Period, UINT16 PWM_Width, UINT8 PWM_CHxINV_Flg);
|
|
|
extern void PWM3_OutputInit(UINT8 PWMx, UINT8 PWM_Prescaler, UINT8 PWM_Csr, UINT16 PWM_Period, UINT16 PWM_Width, UINT8 PWM_CHxINV_Flg);
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PWM_InputInit
|
|
|
* Description : PWM输入初始化,可触发中断
|
|
|
* Input : - - PWMx : PWM channel;where x can be 0, 1, 2, 3 to select the PWM peripheral.
|
|
|
* - PWM_Prescaler: PWM预分频值
|
|
|
* - PWM_Csr:Clock Source Selection
|
|
|
* 取值:PWM_CLK_DIV_1、PWM_CLK_DIV_16、PWM_CLK_DIV_8、PWM_CLK_DIV_4、PWM_CLK_DIV_2
|
|
|
* - PWM_Period:PWM Counter/Timer Loaded Value, data range : 65535~0 (Unit : 1 PWM clock cycle)
|
|
|
* One PWM cycle width = PWM_Period + 1
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
*******************************************************************************/
|
|
|
extern void PWM_InputInit(UINT8 PWMx, UINT8 pwm_prescaler, UINT8 pwm_csr,UINT16 pwm_period);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PWM_ISR
|
|
|
* Description : PWM中断处理函数
|
|
|
* Input : - None
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
*******************************************************************************/
|
|
|
extern void PWM_ISR(void);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PWM_Start
|
|
|
* Description : PWM打开
|
|
|
* Input : - PWMx : PWM channel;where x can be 0, 1, 2, 3 to select the PWM peripheral.
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
*******************************************************************************/
|
|
|
extern void PWM_Start(UINT8 PWMx);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PWM_Stop
|
|
|
* Description : PWM关闭
|
|
|
* Input : - PWMx : PWM channel;where x can be 0, 1, 2, 3 to select the PWM peripheral.
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
*******************************************************************************/
|
|
|
extern void PWM_Stop(UINT8 PWMx);
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PWM_ConfigGpio
|
|
|
* Description : PWM配置成GPIO用途
|
|
|
* Input : - PWMx: PWM channel;where x can be 0, 1, 2 to select the PWM peripheral.
|
|
|
*
|
|
|
* - SPI_Dir:设置GPIO方向 GPIO_OUTPUT:输出 GPIO_INPUT:输入
|
|
|
* - PullUp_En:设置相应的脚上拉使能
|
|
|
* PWM_PULLUP_EN: enable上拉
|
|
|
* PWM_PULLUP_DIS: disable上拉
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
INT8 PWM_ConfigGpio(UINT8 PWMx, UINT8 GPIO_Dir, UINT8 PullUp_En);
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PWM_ReadGpioData
|
|
|
* Description : 获取PWMx对应引脚的电平
|
|
|
* Input : - PWMx: PWM channel;where x can be 0, 1, 2 to select the PWM peripheral.
|
|
|
* - PWM_Port: 0,1,2,3
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : Bit_SET:高电平 Bit_RESET:低电平 -1:fail
|
|
|
******************************************************************************/
|
|
|
INT8 PWM_ReadGpioData(UINT8 PWMx);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PWM_WriteGpioData
|
|
|
* Description : 设置PWMx对应引脚的电平
|
|
|
* Input : - PWMx: PWM channel;where x can be 0, 1, 2 to select the PWM peripheral.
|
|
|
* - PWM_Port: 0,1,2,3
|
|
|
* - bitVal:设置的电平,Bit_SET:设置为高电平 Bit_RESET:设置为低电平
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : 0: 设置成功 other:设置失败
|
|
|
******************************************************************************/
|
|
|
INT8 PWM_WriteGpioData(UINT8 PWMx, UINT8 bitVal);
|
|
|
|
|
|
|
|
|
#endif /* PWM_DRV_H_ */
|