#ifndef __SWM120_PWM_H__
#define	__SWM120_PWM_H__

typedef struct {
	uint8_t mode;			//0 A路和B路独立输出	1 A路和B路互补输出
	uint8_t align;			//0 左对齐输出			1 中心对称输出
	uint16_t cycleA;		//A路周期，此为16位寄存器
	uint16_t hdutyA;		//A路占空比，此为16位寄存器
	uint16_t deadzoneA;		//A路死区时长，此为16位寄存器
	uint16_t cycleB;		//B路周期，此为16位寄存器
	uint16_t hdutyB;		//B路占空比，此为16位寄存器
	uint16_t deadzoneB;		//B路死区时长，此为16位寄存器
	uint8_t IntHEndAEn;		//A路高电平结束中断
	uint8_t IntNCycleAEn;	//A路新周期开始中断 
	uint8_t IntHEndBEn;		//B路高电平结束中断
	uint8_t IntNCycleBEn;	//B路新周期开始中断
	uint8_t clk_div;		//将分频clk_div的系统时钟提供给PWM用作工作时钟
} PWM_InitStructure;

void PWM_Init(PWM_T * PWMx,PWM_InitStructure * initStruct);	//PWM初始化，包括模式选择（A/B独立输出、A/B互补输出）、对齐选择（左对齐输出、中心对齐输出）、周期、占空比、死区、中断、时钟分频
void PWM_Open(PWM_T * PWMx,uint32_t chA,uint32_t chB);		//PWM使能，使能是指给PWM模块提供工作时钟
void PWM_Close(PWM_T * PWMx,uint32_t chA,uint32_t chB);		//PWM禁能，禁能是指切断PWM模块的时钟供给，从而减小能耗
void PWM_Start(PWM_T * PWMx,uint32_t chA,uint32_t chB);		//启动指定PWM，开始PWM输出
void PWM_Stop(PWM_T * PWMx,uint32_t chA,uint32_t chB);		//关闭指定PWM，停止PWM输出

void PWM_SetMode(PWM_T * PWMx,uint32_t mode);				//设置PWM工作模式
uint32_t PWM_GetMode(PWM_T * PWMx);							//获取PWM当前工作模式
void PWM_SetAlign(PWM_T * PWMx,uint32_t align);				//设置PWM输出对齐方式
uint32_t PWM_GetAlign(PWM_T * PWMx);						//获取PWM当前输出对齐方式

void PWM_SetCycleA(PWM_T * PWMx,uint16_t cycle);			//设置通道A周期
uint16_t PWM_GetCycleA(PWM_T * PWMx);	   					//获取通道A周期
void PWM_SetHDutyA(PWM_T * PWMx,uint16_t hduty);			//设置通道A占空比，即高电平时长
uint16_t PWM_GetHDutyA(PWM_T * PWMx);						//获取通道A占空比，即高电平时长
void PWM_SetDeadzoneA(PWM_T * PWMx,uint16_t deadzone);		//设置通道A死区时长
uint16_t PWM_GetDeadzoneA(PWM_T * PWMx);		 			//获取通道A死区时长
void PWM_SetCycleB(PWM_T * PWMx,uint16_t cycle); 			//设置通道B周期
uint16_t PWM_GetCycleB(PWM_T * PWMx);		   				//获取通道B周期
void PWM_SetHDutyB(PWM_T * PWMx,uint16_t hduty); 			//设置通道B占空比，即高电平时长
uint16_t PWM_GetHDutyB(PWM_T * PWMx);			   			//获取通道B占空比，即高电平时长
void PWM_SetDeadzoneB(PWM_T * PWMx,uint16_t deadzone); 		//设置通道B死区时长
uint16_t PWM_GetDeadzoneB(PWM_T * PWMx);	   				//获取通道B死区时长

void PWM_IntHEndAEn(PWM_T * PWMx); 							//A通道高电平结束中断使能
void PWM_IntHEndADis(PWM_T * PWMx);							//A通道高电平结束中断禁能
void PWM_IntHEndAClr(PWM_T * PWMx);	 						//A通道高电平结束中断标志清除
uint32_t PWM_IntHEndAStat(PWM_T * PWMx);					//A通道高电平结束中断是否发生
void PWM_IntNCycleAEn(PWM_T * PWMx);   						//A通道新周期开始中断使能
void PWM_IntNCycleADis(PWM_T * PWMx);  						//A通道新周期开始中断禁能
void PWM_IntNCycleAClr(PWM_T * PWMx);  						//A通道新周期开始中断标志清除
uint32_t PWM_IntNCycleAStat(PWM_T * PWMx); 					//A通道新周期开始中断是否发生
void PWM_IntHEndBEn(PWM_T * PWMx);	  						//B通道高电平结束中断使能
void PWM_IntHEndBDis(PWM_T * PWMx);	 						//B通道高电平结束中断禁能
void PWM_IntHEndBClr(PWM_T * PWMx);	  						//B通道高电平结束中断标志清除
uint32_t PWM_IntHEndBStat(PWM_T * PWMx); 					//B通道高电平结束中断是否发生
void PWM_IntNCycleBEn(PWM_T * PWMx);						//B通道新周期开始中断使能
void PWM_IntNCycleBDis(PWM_T * PWMx);	 					//B通道新周期开始中断禁能
void PWM_IntNCycleBClr(PWM_T * PWMx);	 					//B通道新周期开始中断标志清除
uint32_t PWM_IntNCycleBStat(PWM_T * PWMx); 					//B通道高电平结束中断是否发生

#endif //__SWM120_PWM_H__
