/* ********************************************************************************************************* * 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 PA6(BAT_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(); }