171 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /********************************** (C) COPYRIGHT *******************************
 | |
|  * File Name          : CH59x_pwm.c
 | |
|  * Author             : WCH
 | |
|  * Version            : V1.2
 | |
|  * Date               : 2021/11/17
 | |
|  * Description
 | |
|  *********************************************************************************
 | |
|  * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
 | |
|  * Attention: This software (modified or not) and binary are used for 
 | |
|  * microcontroller manufactured by Nanjing Qinheng Microelectronics.
 | |
|  *******************************************************************************/
 | |
| 
 | |
| #include "CH59x_common.h"
 | |
| 
 | |
| /*********************************************************************
 | |
|  * @fn      PWMX_CycleCfg
 | |
|  *
 | |
|  * @brief   PWM4-PWM11周期配置
 | |
|  *
 | |
|  * @param   cyc     - refer to PWMX_CycleTypeDef
 | |
|  *
 | |
|  * @return  none
 | |
|  */
 | |
| void PWMX_CycleCfg(PWMX_CycleTypeDef cyc)
 | |
| {
 | |
|     switch(cyc)
 | |
|     {
 | |
|         case PWMX_Cycle_256:
 | |
|             R8_PWM_CONFIG = R8_PWM_CONFIG & 0xf0;
 | |
|             break;
 | |
| 
 | |
|         case PWMX_Cycle_255:
 | |
|             R8_PWM_CONFIG = (R8_PWM_CONFIG & 0xf0) | 0x01;
 | |
|             break;
 | |
| 
 | |
|         case PWMX_Cycle_128:
 | |
|             R8_PWM_CONFIG = (R8_PWM_CONFIG & 0xf0) | (1 << 2);
 | |
|             break;
 | |
| 
 | |
|         case PWMX_Cycle_127:
 | |
|             R8_PWM_CONFIG = (R8_PWM_CONFIG & 0xf0) | (1 << 2) | 0x01;
 | |
|             break;
 | |
| 
 | |
|         case PWMX_Cycle_64:
 | |
|             R8_PWM_CONFIG = (R8_PWM_CONFIG & 0xf0) | (2 << 2);
 | |
|             break;
 | |
| 
 | |
|         case PWMX_Cycle_63:
 | |
|             R8_PWM_CONFIG = (R8_PWM_CONFIG & 0xf0) | (2 << 2) | 0x01;
 | |
|             break;
 | |
| 
 | |
|         default:
 | |
|             break;
 | |
|     }
 | |
| }
 | |
| 
 | |
| /*********************************************************************
 | |
|  * @fn      PWMX_16bit_CycleCfg
 | |
|  *
 | |
|  * @brief   PWM4-PWM9 16位周期配置
 | |
|  *
 | |
|  * @param   cyc     - 16位周期
 | |
|  *
 | |
|  * @return  none
 | |
|  */
 | |
| void PWMX_16bit_CycleCfg(uint16_t cyc)
 | |
| {
 | |
|     R8_PWM_CONFIG = (R8_PWM_CONFIG & 0xf0) | (3 << 2);
 | |
|     R32_PWM_REG_CYCLE = cyc;
 | |
| }
 | |
| 
 | |
| /*********************************************************************
 | |
|  * @fn      PWMX_16bit_ACTOUT
 | |
|  *
 | |
|  * @brief   PWM4-PWM9 通道16位输出波形配置
 | |
|  *
 | |
|  * @param   ch      - select channel of pwm, refer to channel of PWM define
 | |
|  * @param   da      - effective pulse width
 | |
|  * @param   pr      - select wave polar, refer to PWMX_PolarTypeDef
 | |
|  * @param   s       - control pwmx function, ENABLE or DISABLE
 | |
|  *
 | |
|  * @return  none
 | |
|  */
 | |
| void PWMX_16bit_ACTOUT(uint8_t ch, uint16_t da, PWMX_PolarTypeDef pr, FunctionalState s)
 | |
| {
 | |
|     uint8_t i;
 | |
| 
 | |
|     if(s == DISABLE)
 | |
|     {
 | |
|         R8_PWM_OUT_EN &= ~(ch);
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         (pr) ? (R8_PWM_POLAR |= (ch)) : (R8_PWM_POLAR &= ~(ch));
 | |
|         for(i = 0; i < 6; i++)
 | |
|         {
 | |
|             if((ch >> i) & 1)
 | |
|             {
 | |
|                 if(i<4)
 | |
|                 {
 | |
|                     *((volatile uint16_t *)((&R16_PWM4_DATA) + i)) = da;
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     *((volatile uint16_t *)((&R16_PWM8_DATA) + (i-4))) = da;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         R8_PWM_OUT_EN |= (ch);
 | |
|     }
 | |
| }
 | |
| 
 | |
| /*********************************************************************
 | |
|  * @fn      PWMX_ACTOUT
 | |
|  *
 | |
|  * @brief   PWM4-PWM11通道输出波形配置
 | |
|  *
 | |
|  * @param   ch      - select channel of pwm, refer to channel of PWM define
 | |
|  * @param   da      - effective pulse width
 | |
|  * @param   pr      - select wave polar, refer to PWMX_PolarTypeDef
 | |
|  * @param   s       - control pwmx function, ENABLE or DISABLE
 | |
|  *
 | |
|  * @return  none
 | |
|  */
 | |
| void PWMX_ACTOUT(uint8_t ch, uint8_t da, PWMX_PolarTypeDef pr, FunctionalState s)
 | |
| {
 | |
|     uint8_t i;
 | |
| 
 | |
|     if(s == DISABLE)
 | |
|     {
 | |
|         R8_PWM_OUT_EN &= ~(ch);
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         (pr) ? (R8_PWM_POLAR |= (ch)) : (R8_PWM_POLAR &= ~(ch));
 | |
|         for(i = 0; i < 8; i++)
 | |
|         {
 | |
|             if((ch >> i) & 1)
 | |
|             {
 | |
|                 *((volatile uint8_t *)((&R8_PWM4_DATA) + i)) = da;
 | |
|             }
 | |
|         }
 | |
|         R8_PWM_OUT_EN |= (ch);
 | |
|     }
 | |
| }
 | |
| 
 | |
| /*********************************************************************
 | |
|  * @fn      PWMX_AlterOutCfg
 | |
|  *
 | |
|  * @brief   PWM 交替输出模式配置
 | |
|  *
 | |
|  * @param   ch      - select group of PWM alternate output
 | |
|  *                    RB_PWM4_5_STAG_EN     -  PWM4 和 PWM5 通道交替输出
 | |
|  *                    RB_PWM6_7_STAG_EN     -  PWM6 和 PWM7 通道交替输出
 | |
|  *                    RB_PWM8_9_STAG_EN     -  PWM8 和 PWM9 通道交替输出
 | |
|  *                    RB_PWM10_11_STAG_EN   -  PWM10 和 PWM11 通道交替输出
 | |
|  * @param   s       - control pwmx function, ENABLE or DISABLE
 | |
|  *
 | |
|  * @return  none
 | |
|  */
 | |
| void PWMX_AlterOutCfg(uint8_t ch, FunctionalState s)
 | |
| {
 | |
|     if(s == DISABLE)
 | |
|     {
 | |
|         R8_PWM_CONFIG &= ~(ch);
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         R8_PWM_CONFIG |= (ch);
 | |
|     }
 | |
| }
 |