NANO130_H2Press/User/gpio_vcc.c

231 lines
10 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
*********************************************************************************************************
* IAR Development Kits
* on the
*
* M451
*
* Filename : gpio_vcc.c
* Version : V1.00
* Programmer(s) : Qian Xianghong
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* INCLUDE FILES
*********************************************************************************************************
*/
#include "includes.h"
volatile uint8_t LCD_Disabled = 0;
void Vcc_Init()
{
// 把悬空引脚设为数字输入(上电默认状态)
// PA.9~8为SC0_TXRX
// PF.4为加速度计的INT1
// PE.0悬空
// 关掉悬空引脚的数字输入通道
// PA.9~8
GPIO_DISABLE_DIGITAL_PATH(PA, 0x0300ul);
// PE.0
GPIO_DISABLE_DIGITAL_PATH(PE, 0x0001ul);
// PF.4
GPIO_DISABLE_DIGITAL_PATH(PF, 0x0010ul);
// 再设置要用的引脚
/* Set GPA as VCC_SENSOR_5V */
SYS->PA_L_MFP &= ~SYS_PA_L_MFP_PA7_MFP_Msk;
SYS->PA_L_MFP |= SYS_PA_L_MFP_PA7_MFP_GPA7;
GPIO_SetMode(PA, 1 << 7, GPIO_PMD_OUTPUT);
VCC_SENSOR_5V_OFF();
// PC.12 as VCC_SFLASH_FRAM
SYS->PC_H_MFP &= ~SYS_PC_H_MFP_PC12_MFP_Msk;
SYS->PC_H_MFP |= SYS_PC_H_MFP_PC12_MFP_GPC12;
GPIO_SetMode(PC, 1 << 12, GPIO_PMD_OUTPUT); // 低电平打开
VCC_SFLASH_FRAM_ON();
/* Set GPE as VCC_GSM */
SYS->PE_L_MFP &= ~SYS_PE_L_MFP_PE5_MFP_Msk;
SYS->PE_L_MFP |= SYS_PE_L_MFP_PE5_MFP_GPE5;
GPIO_SetMode(PE, 1 << 5, GPIO_PMD_OUTPUT);
VCC_GSM_OFF();
/* Set GPE as VCC_GPS */
SYS->PE_L_MFP &= ~SYS_PE_L_MFP_PE6_MFP_Msk;
SYS->PE_L_MFP |= SYS_PE_L_MFP_PE6_MFP_GPE6;
GPIO_SetMode(PE, 1 << 6, GPIO_PMD_OUTPUT); // 低电平打开
VCC_GPS_OFF();
/* Set GPC as VCC_RF */
SYS->PC_H_MFP &= ~SYS_PC_H_MFP_PC13_MFP_Msk;
SYS->PC_H_MFP |= SYS_PC_H_MFP_PC13_MFP_GPC13;
GPIO_SetMode(PC, 1 << 13, GPIO_PMD_OUTPUT);
VCC_RF_OFF();
/* Set GPB as VCC_BD */ // 氢压力版本,这个脚被改作按键发送
// SYS->PB_H_MFP &= ~SYS_PB_H_MFP_PB9_MFP_Msk;
// SYS->PB_H_MFP |= SYS_PB_H_MFP_PB9_MFP_GPB9;
// GPIO_SetMode(PB, 1 << 9, GPIO_PMD_OUTPUT);
// VCC_BD_OFF();
}
// 禁止引脚输出
void Vcc_Disable()
{
// 把除了按键、加速度中断、充电检测、控制开关和悬空以外的外设引脚设为数字输入
// PA.15~12,6~0
// PB.11~10,5~4
// PC.11~8,1~0
// PD.3~0
// PE.4~1
// PF.3~2
SYS->PA_H_MFP &= ~(SYS_PA_H_MFP_PA15_MFP_Msk | SYS_PA_H_MFP_PA14_MFP_Msk | SYS_PA_H_MFP_PA13_MFP_Msk | SYS_PA_H_MFP_PA12_MFP_Msk);
SYS->PA_H_MFP |= (SYS_PA_H_MFP_PA15_MFP_GPA15 | SYS_PA_H_MFP_PA14_MFP_GPA14 | SYS_PA_H_MFP_PA13_MFP_GPA13 | SYS_PA_H_MFP_PA12_MFP_GPA12);
SYS->PA_L_MFP &= ~(SYS_PA_L_MFP_PA6_MFP_Msk | SYS_PA_L_MFP_PA5_MFP_Msk | SYS_PA_L_MFP_PA4_MFP_Msk);
SYS->PA_L_MFP |= (SYS_PA_L_MFP_PA6_MFP_GPA6 | SYS_PA_L_MFP_PA5_MFP_GPA5 | SYS_PA_L_MFP_PA4_MFP_GPA4);
SYS->PA_L_MFP &= ~(SYS_PA_L_MFP_PA3_MFP_Msk | SYS_PA_L_MFP_PA2_MFP_Msk | SYS_PA_L_MFP_PA1_MFP_Msk | SYS_PA_L_MFP_PA0_MFP_Msk);
SYS->PA_L_MFP |= (SYS_PA_L_MFP_PA3_MFP_GPA3 | SYS_PA_L_MFP_PA2_MFP_GPA2 | SYS_PA_L_MFP_PA1_MFP_GPA1 | SYS_PA_L_MFP_PA0_MFP_GPA0);
GPIO_SetMode(PA, BIT15, GPIO_PMD_INPUT);
GPIO_SetMode(PA, BIT14, GPIO_PMD_INPUT);
GPIO_SetMode(PA, BIT13, GPIO_PMD_INPUT);
GPIO_SetMode(PA, BIT12, GPIO_PMD_INPUT);
GPIO_SetMode(PA, BIT6, GPIO_PMD_INPUT);
GPIO_SetMode(PA, BIT5, GPIO_PMD_INPUT);
GPIO_SetMode(PA, BIT4, GPIO_PMD_INPUT);
GPIO_SetMode(PA, BIT3, GPIO_PMD_INPUT);
GPIO_SetMode(PA, BIT2, GPIO_PMD_INPUT);
GPIO_SetMode(PA, BIT1, GPIO_PMD_INPUT);
GPIO_SetMode(PA, BIT0, GPIO_PMD_INPUT);
SYS->PB_H_MFP &= ~(SYS_PB_H_MFP_PB11_MFP_Msk | SYS_PB_H_MFP_PB10_MFP_Msk);
SYS->PB_H_MFP |= (SYS_PB_H_MFP_PB11_MFP_GPB11 | SYS_PB_H_MFP_PB10_MFP_GPB10);
SYS->PB_L_MFP &= ~(SYS_PB_L_MFP_PB5_MFP_Msk | SYS_PB_L_MFP_PB4_MFP_Msk);
SYS->PB_L_MFP |= (SYS_PB_L_MFP_PB5_MFP_GPB5 | SYS_PB_L_MFP_PB4_MFP_GPB4);
GPIO_SetMode(PB, BIT11, GPIO_PMD_INPUT);
GPIO_SetMode(PB, BIT10, GPIO_PMD_INPUT);
GPIO_SetMode(PB, BIT5, GPIO_PMD_INPUT);
GPIO_SetMode(PB, BIT4, GPIO_PMD_INPUT);
SYS->PC_H_MFP &= ~(SYS_PC_H_MFP_PC11_MFP_Msk | SYS_PC_H_MFP_PC10_MFP_Msk | SYS_PC_H_MFP_PC9_MFP_Msk | SYS_PC_H_MFP_PC8_MFP_Msk);
SYS->PC_H_MFP |= (SYS_PC_H_MFP_PC11_MFP_GPC11 | SYS_PC_H_MFP_PC10_MFP_GPC10 | SYS_PC_H_MFP_PC9_MFP_GPC9 | SYS_PC_H_MFP_PC8_MFP_GPC8);
SYS->PC_L_MFP &= ~(SYS_PC_L_MFP_PC1_MFP_Msk | SYS_PC_L_MFP_PC0_MFP_Msk);
SYS->PC_L_MFP |= (SYS_PC_L_MFP_PC1_MFP_GPC1 | SYS_PC_L_MFP_PC0_MFP_GPC0);
GPIO_SetMode(PC, BIT11, GPIO_PMD_INPUT);
GPIO_SetMode(PC, BIT10, GPIO_PMD_INPUT);
GPIO_SetMode(PC, BIT9, GPIO_PMD_INPUT);
GPIO_SetMode(PC, BIT8, GPIO_PMD_INPUT);
GPIO_SetMode(PC, BIT1, GPIO_PMD_INPUT);
GPIO_SetMode(PC, BIT0, GPIO_PMD_INPUT);
SYS->PD_L_MFP &= ~(SYS_PD_L_MFP_PD3_MFP_Msk | SYS_PD_L_MFP_PD2_MFP_Msk | SYS_PD_L_MFP_PD1_MFP_Msk | SYS_PD_L_MFP_PD0_MFP_Msk);
SYS->PD_L_MFP |= (SYS_PD_L_MFP_PD3_MFP_GPD3 | SYS_PD_L_MFP_PD2_MFP_GPD2 | SYS_PD_L_MFP_PD1_MFP_GPD1 | SYS_PD_L_MFP_PD0_MFP_GPD0);
GPIO_SetMode(PD, BIT3, GPIO_PMD_INPUT);
GPIO_SetMode(PD, BIT2, GPIO_PMD_INPUT);
GPIO_SetMode(PD, BIT1, GPIO_PMD_INPUT);
GPIO_SetMode(PD, BIT0, GPIO_PMD_INPUT);
SYS->PE_L_MFP &= ~SYS_PE_L_MFP_PE4_MFP_Msk;
SYS->PE_L_MFP |= SYS_PE_L_MFP_PE4_MFP_GPE4;
SYS->PE_L_MFP &= ~(SYS_PE_L_MFP_PE3_MFP_Msk | SYS_PE_L_MFP_PE2_MFP_Msk | SYS_PE_L_MFP_PE1_MFP_Msk | SYS_PE_L_MFP_PE0_MFP_Msk);
SYS->PE_L_MFP |= (SYS_PE_L_MFP_PE3_MFP_GPE3 | SYS_PE_L_MFP_PE2_MFP_GPE2 | SYS_PE_L_MFP_PE1_MFP_GPE1 | SYS_PE_L_MFP_PE0_MFP_GPE0);
GPIO_SetMode(PE, BIT4, GPIO_PMD_INPUT);
GPIO_SetMode(PE, BIT3, GPIO_PMD_INPUT);
GPIO_SetMode(PE, BIT2, GPIO_PMD_INPUT);
GPIO_SetMode(PE, BIT1, GPIO_PMD_INPUT);
GPIO_SetMode(PE, BIT0, GPIO_PMD_INPUT);
SYS->PF_L_MFP &= ~(SYS_PF_L_MFP_PF3_MFP_Msk | SYS_PF_L_MFP_PF2_MFP_Msk);
SYS->PF_L_MFP |= (SYS_PF_L_MFP_PF3_MFP_GPF3 | SYS_PF_L_MFP_PF2_MFP_GPF2);
GPIO_SetMode(PF, BIT3, GPIO_PMD_INPUT);
GPIO_SetMode(PF, BIT2, GPIO_PMD_INPUT);
// 关掉这部分引脚的数字输入通道
// PA.15~12,6~0
GPIO_DISABLE_DIGITAL_PATH(PA, 0xF07Ful);
// PB.11~10,5~4
GPIO_DISABLE_DIGITAL_PATH(PB, 0x0C30ul);
// PC.11~8,1~0
GPIO_DISABLE_DIGITAL_PATH(PC, 0x0F03ul);
// PD.3~0
GPIO_DISABLE_DIGITAL_PATH(PD, 0x000Ful);
// PE.4~1
GPIO_DISABLE_DIGITAL_PATH(PE, 0x001Eul);
// PF.3~2
GPIO_DISABLE_DIGITAL_PATH(PF, 0x000Cul);
}
// 恢复通信引脚输出
void Vcc_Enable()
{
/* Set GPB multi-function pins for UART1 RXD and TXD */
SYS->PB_L_MFP &= ~(SYS_PB_L_MFP_PB4_MFP_Msk | SYS_PB_L_MFP_PB5_MFP_Msk);
SYS->PB_L_MFP |= (SYS_PB_L_MFP_PB4_MFP_UART1_RX | SYS_PB_L_MFP_PB5_MFP_UART1_TX);
GPIO_ENABLE_DIGITAL_PATH(PB, 0x0010ul); // PB.4: RXD
/* Configure the PA6BAT_VAL), PA5(P), PA4(DP), PA3-2(T_2), PA1-0(T_1) analog input pins. */
SYS->PA_L_MFP &= ~(SYS_PA_L_MFP_PA6_MFP_Msk | SYS_PA_L_MFP_PA5_MFP_Msk | SYS_PA_L_MFP_PA4_MFP_Msk);
SYS->PA_L_MFP |= (SYS_PA_L_MFP_PA6_MFP_ADC_CH6 | SYS_PA_L_MFP_PA5_MFP_ADC_CH5 | SYS_PA_L_MFP_PA4_MFP_ADC_CH4);
SYS->PA_L_MFP &= ~(SYS_PA_L_MFP_PA3_MFP_Msk | SYS_PA_L_MFP_PA2_MFP_Msk
| SYS_PA_L_MFP_PA1_MFP_Msk | SYS_PA_L_MFP_PA0_MFP_Msk);
SYS->PA_L_MFP |= (SYS_PA_L_MFP_PA3_MFP_ADC_CH3 | SYS_PA_L_MFP_PA2_MFP_ADC_CH2
| SYS_PA_L_MFP_PA1_MFP_ADC_CH1 | SYS_PA_L_MFP_PA0_MFP_ADC_CH0);
/* Disable the PA6~0 digital input path to avoid the leakage current. */
GPIO_DISABLE_DIGITAL_PATH(PA, 0x007Ful);
// // PA.15 as CAP_CAPTURE
// SYS->PA_H_MFP &= ~SYS_PA_H_MFP_PA15_MFP_Msk;
// SYS->PA_H_MFP |= SYS_PA_H_MFP_PA15_MFP_PWM0_CH3;
// GPIO_ENABLE_DIGITAL_PATH(PA, 0x8000ul);
// // PB.8 as CAP_TRIGGER
// SYS->PB_H_MFP &= ~SYS_PB_H_MFP_PB8_MFP_Msk;
// SYS->PB_H_MFP |= SYS_PB_H_MFP_PB8_MFP_GPB8;
// GPIO_SetMode(PB, BIT8, GPIO_PMD_OUTPUT);
SYS->PC_H_MFP &= ~(SYS_PC_H_MFP_PC8_MFP_Msk | SYS_PC_H_MFP_PC9_MFP_Msk | SYS_PC_H_MFP_PC10_MFP_Msk | SYS_PC_H_MFP_PC11_MFP_Msk);
SYS->PC_H_MFP |= (SYS_PC_H_MFP_PC8_MFP_SPI1_SS0 | SYS_PC_H_MFP_PC9_MFP_SPI1_SCLK | SYS_PC_H_MFP_PC10_MFP_SPI1_MISO0 | SYS_PC_H_MFP_PC11_MFP_SPI1_MOSI0);
GPIO_ENABLE_DIGITAL_PATH(PC, 0x0600ul); // SCLK、MISO
SYS->PE_L_MFP &= ~(SYS_PE_L_MFP_PE1_MFP_Msk | SYS_PE_L_MFP_PE2_MFP_Msk | SYS_PE_L_MFP_PE3_MFP_Msk | SYS_PE_L_MFP_PE4_MFP_Msk);
SYS->PE_L_MFP |= (SYS_PE_L_MFP_PE1_MFP_SPI0_SS0 | SYS_PE_L_MFP_PE2_MFP_SPI0_SCLK | SYS_PE_L_MFP_PE3_MFP_SPI0_MISO0 | SYS_PE_L_MFP_PE4_MFP_SPI0_MOSI0);
GPIO_ENABLE_DIGITAL_PATH(PE, 0x000Cul); // SCLK、MISO
SYS->PD_L_MFP &= ~(SYS_PD_L_MFP_PD0_MFP_Msk | SYS_PD_L_MFP_PD1_MFP_Msk | SYS_PD_L_MFP_PD2_MFP_Msk | SYS_PD_L_MFP_PD3_MFP_Msk);
SYS->PD_L_MFP |= (SYS_PD_L_MFP_PD0_MFP_SPI2_SS0 | SYS_PD_L_MFP_PD1_MFP_SPI2_SCLK | SYS_PD_L_MFP_PD2_MFP_SPI2_MISO0 | SYS_PD_L_MFP_PD3_MFP_SPI2_MOSI0);
GPIO_ENABLE_DIGITAL_PATH(PD, 0x0006ul); // SCLK、MISO
/* Set PC.0 and PC.1 pin for SC UART mode */
SYS->PC_L_MFP &= ~(SYS_PC_L_MFP_PC0_MFP_Msk | SYS_PC_L_MFP_PC1_MFP_Msk);
SYS->PC_L_MFP |= (SYS_PC_L_MFP_PC0_MFP_SC1_CLK | SYS_PC_L_MFP_PC1_MFP_SC1_DAT);
GPIO_ENABLE_DIGITAL_PATH(PC, 0x0002ul); // PC1: RXD
/* Set GPA multi-function pins for UART0 RXD and TXD */
SYS->PA_H_MFP &= ~(SYS_PA_H_MFP_PA14_MFP_Msk | SYS_PA_H_MFP_PA15_MFP_Msk);
SYS->PA_H_MFP |= (SYS_PA_H_MFP_PA14_MFP_UART0_RX | SYS_PA_H_MFP_PA15_MFP_UART0_TX);
GPIO_ENABLE_DIGITAL_PATH(PA, 0x4000ul); // PA14: RXD
// RF MD0, MD1
SYS->PA_H_MFP &= ~(SYS_PA_H_MFP_PA13_MFP_Msk | SYS_PA_H_MFP_PA12_MFP_Msk);
SYS->PA_H_MFP |= (SYS_PA_H_MFP_PA13_MFP_GPA13 | SYS_PA_H_MFP_PA12_MFP_GPA12);
GPIO_SetMode(PA, 1 << 13, GPIO_PMD_OUTPUT);
GPIO_SetMode(PA, 1 << 12, GPIO_PMD_OUTPUT);
/* Set PB.10 and PB.11 pin for SC UART mode */
SYS->PB_H_MFP &= ~(SYS_PB_H_MFP_PB10_MFP_Msk | SYS_PB_H_MFP_PB11_MFP_Msk);
SYS->PB_H_MFP |= (SYS_PB_H_MFP_PB10_MFP_SC2_CLK | SYS_PB_H_MFP_PB11_MFP_SC2_DAT);
GPIO_ENABLE_DIGITAL_PATH(PB, 0x0800ul); // PB11: RXD
// 恢复外设引脚
VCC_SFLASH_FRAM_ON();
}