246 lines
		
	
	
	
		
			6.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			246 lines
		
	
	
	
		
			6.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /********************************** (C) COPYRIGHT *******************************
 | |||
|  |  * File Name          : CH59x_gpio.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      GPIOA_ModeCfg | |||
|  |  * | |||
|  |  * @brief   GPIOA端口引脚模式配置 | |||
|  |  * | |||
|  |  * @param   pin     - PA4-PA15,对应芯片12个GPIO引脚 | |||
|  |  * @param   mode    - 输入输出类型 | |||
|  |  * | |||
|  |  * @return  none | |||
|  |  */ | |||
|  | void GPIOA_ModeCfg(uint32_t pin, GPIOModeTypeDef mode) | |||
|  | { | |||
|  |     switch(mode) | |||
|  |     { | |||
|  |         case GPIO_ModeIN_Floating: | |||
|  |             R32_PA_PD_DRV &= ~pin; | |||
|  |             R32_PA_PU &= ~pin; | |||
|  |             R32_PA_DIR &= ~pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         case GPIO_ModeIN_PU: | |||
|  |             R32_PA_PD_DRV &= ~pin; | |||
|  |             R32_PA_PU |= pin; | |||
|  |             R32_PA_DIR &= ~pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         case GPIO_ModeIN_PD: | |||
|  |             R32_PA_PD_DRV |= pin; | |||
|  |             R32_PA_PU &= ~pin; | |||
|  |             R32_PA_DIR &= ~pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         case GPIO_ModeOut_PP_5mA: | |||
|  |             R32_PA_PD_DRV &= ~pin; | |||
|  |             R32_PA_DIR |= pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         case GPIO_ModeOut_PP_20mA: | |||
|  |             R32_PA_PD_DRV |= pin; | |||
|  |             R32_PA_DIR |= pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         default: | |||
|  |             break; | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | /*********************************************************************
 | |||
|  |  * @fn      GPIOB_ModeCfg | |||
|  |  * | |||
|  |  * @brief   GPIOB端口引脚模式配置 | |||
|  |  * | |||
|  |  * @param   pin     - PB0,PB4,PB6-PB7,PB10-PB15,PB22-PB23,对应芯片12个GPIO引脚 | |||
|  |  * @param   mode    - 输入输出类型 | |||
|  |  * | |||
|  |  * @return  none | |||
|  |  */ | |||
|  | void GPIOB_ModeCfg(uint32_t pin, GPIOModeTypeDef mode) | |||
|  | { | |||
|  |     switch(mode) | |||
|  |     { | |||
|  |         case GPIO_ModeIN_Floating: | |||
|  |             R32_PB_PD_DRV &= ~pin; | |||
|  |             R32_PB_PU &= ~pin; | |||
|  |             R32_PB_DIR &= ~pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         case GPIO_ModeIN_PU: | |||
|  |             R32_PB_PD_DRV &= ~pin; | |||
|  |             R32_PB_PU |= pin; | |||
|  |             R32_PB_DIR &= ~pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         case GPIO_ModeIN_PD: | |||
|  |             R32_PB_PD_DRV |= pin; | |||
|  |             R32_PB_PU &= ~pin; | |||
|  |             R32_PB_DIR &= ~pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         case GPIO_ModeOut_PP_5mA: | |||
|  |             R32_PB_PD_DRV &= ~pin; | |||
|  |             R32_PB_DIR |= pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         case GPIO_ModeOut_PP_20mA: | |||
|  |             R32_PB_PD_DRV |= pin; | |||
|  |             R32_PB_DIR |= pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         default: | |||
|  |             break; | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | /*********************************************************************
 | |||
|  |  * @fn      GPIOA_ITModeCfg | |||
|  |  * | |||
|  |  * @brief   GPIOA引脚中断模式配置 | |||
|  |  * | |||
|  |  * @param   pin     - PA4-PA15,对应芯片12个GPIO引脚 | |||
|  |  * @param   mode    - 触发类型 | |||
|  |  * | |||
|  |  * @return  none | |||
|  |  */ | |||
|  | void GPIOA_ITModeCfg(uint32_t pin, GPIOITModeTpDef mode) | |||
|  | { | |||
|  |     switch(mode) | |||
|  |     { | |||
|  |         case GPIO_ITMode_LowLevel: // 低电平触发
 | |||
|  |             R16_PA_INT_MODE &= ~pin; | |||
|  |             R32_PA_CLR |= pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         case GPIO_ITMode_HighLevel: // 高电平触发
 | |||
|  |             R16_PA_INT_MODE &= ~pin; | |||
|  |             R32_PA_OUT |= pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         case GPIO_ITMode_FallEdge: // 下降沿触发
 | |||
|  |             R16_PA_INT_MODE |= pin; | |||
|  |             R32_PA_CLR |= pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         case GPIO_ITMode_RiseEdge: // 上升沿触发
 | |||
|  |             R16_PA_INT_MODE |= pin; | |||
|  |             R32_PA_OUT |= pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         default: | |||
|  |             break; | |||
|  |     } | |||
|  |     R16_PA_INT_IF = pin; | |||
|  |     R16_PA_INT_EN |= pin; | |||
|  | } | |||
|  | 
 | |||
|  | /*********************************************************************
 | |||
|  |  * @fn      GPIOB_ITModeCfg | |||
|  |  * | |||
|  |  * @brief   GPIOB引脚中断模式配置 | |||
|  |  * | |||
|  |  * @param   pin     - PB0,PB4,PB6-PB7,PB10-PB15,PB22-PB23,对应芯片12个GPIO引脚 | |||
|  |  * @param   mode    - 触发类型 | |||
|  |  * | |||
|  |  * @return  none | |||
|  |  */ | |||
|  | void GPIOB_ITModeCfg(uint32_t pin, GPIOITModeTpDef mode) | |||
|  | { | |||
|  |     uint32_t Pin = pin | ((pin & (GPIO_Pin_22 | GPIO_Pin_23)) >> 14); | |||
|  |     switch(mode) | |||
|  |     { | |||
|  |         case GPIO_ITMode_LowLevel: // 低电平触发
 | |||
|  |             R16_PB_INT_MODE &= ~Pin; | |||
|  |             R32_PB_CLR |= pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         case GPIO_ITMode_HighLevel: // 高电平触发
 | |||
|  |             R16_PB_INT_MODE &= ~Pin; | |||
|  |             R32_PB_OUT |= pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         case GPIO_ITMode_FallEdge: // 下降沿触发
 | |||
|  |             R16_PB_INT_MODE |= Pin; | |||
|  |             R32_PB_CLR |= pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         case GPIO_ITMode_RiseEdge: // 上升沿触发
 | |||
|  |             R16_PB_INT_MODE |= Pin; | |||
|  |             R32_PB_OUT |= pin; | |||
|  |             break; | |||
|  | 
 | |||
|  |         default: | |||
|  |             break; | |||
|  |     } | |||
|  |     R16_PB_INT_IF = Pin; | |||
|  |     R16_PB_INT_EN |= Pin; | |||
|  | } | |||
|  | 
 | |||
|  | /*********************************************************************
 | |||
|  |  * @fn      GPIOPinRemap | |||
|  |  * | |||
|  |  * @brief   外设功能引脚映射 | |||
|  |  * | |||
|  |  * @param   s       - 是否使能映射 | |||
|  |  * @param   perph   - RB_RF_ANT_SW_EN -  RF antenna switch control output on PA4/PA5/PA12/PA13/PA14/PA15 | |||
|  |  *                    RB_PIN_MODEM  -  MODEM: PA6/PA7 -> PB12/PB13 | |||
|  |  *                    RB_PIN_PWMX   -  PWMX: PA12/PA13 -> PA6/PA7 | |||
|  |  *                    RB_PIN_SPI0   -  SPI0:  PA12/PA13/PA14/PA15 -> PB12/PB13/PB14/PB15 | |||
|  |  *                    RB_PIN_UART2  -  UART2: PB22/PB23 ->  PA6/PA7 | |||
|  |  *                    RB_PIN_UART1  -  UART1: PA8/PA9 ->  PB12/PB13 | |||
|  |  *                    RB_PIN_UART0  -  UART0: PB4/PB7 ->  PA15/PA14 | |||
|  |  *                    RB_PIN_TMR2   -  TMR2:  PA11 ->  PB11 | |||
|  |  *                    RB_PIN_TMR1   -  TMR1:  PA10 ->  PB10 | |||
|  |  *                    RB_PIN_TMR0   -  TMR0:  PA9 ->  PB23 | |||
|  |  * | |||
|  |  * @return  none | |||
|  |  */ | |||
|  | void GPIOPinRemap(FunctionalState s, uint16_t perph) | |||
|  | { | |||
|  |     if(s) | |||
|  |     { | |||
|  |         R16_PIN_ALTERNATE |= perph; | |||
|  |     } | |||
|  |     else | |||
|  |     { | |||
|  |         R16_PIN_ALTERNATE &= ~perph; | |||
|  |     } | |||
|  | } | |||
|  | 
 | |||
|  | /*********************************************************************
 | |||
|  |  * @fn      GPIOAGPPCfg | |||
|  |  * | |||
|  |  * @brief   模拟外设GPIO引脚功能控制 | |||
|  |  * | |||
|  |  * @param   s       -   ENABLE  - 打开模拟外设功能,关闭数字功能 | |||
|  |  *                      DISABLE - 启用数字功能,关闭模拟外设功能 | |||
|  |  * @param   perph   -   RB_PIN_USB_DP_PU  - USB UD+引脚内部上拉电阻 | |||
|  |  *                      RB_PIN_USB_IE     - USB 引脚 | |||
|  |  * | |||
|  |  * @return  none | |||
|  |  */ | |||
|  | void GPIOAGPPCfg(FunctionalState s, uint16_t perph) | |||
|  | { | |||
|  |     if(s) | |||
|  |     { | |||
|  |         R16_PIN_ANALOG_IE |= perph; | |||
|  |     } | |||
|  |     else | |||
|  |     { | |||
|  |         R16_PIN_ANALOG_IE &= ~perph; | |||
|  |     } | |||
|  | } |