// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // File name : eport_drv.c // Version : V0.1 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #include "uart.h" //#include "iccemv.h" #include "eport_drv.h" #include "ccm_drv.h" #include "common.h" unsigned char eport_isr_mark = 0; /******************************************************************************* * Function Name : EPORT0_x_IRQHandler * Description : EPORT0_x中断处理 * Input : None * * Output : None * Return : None ******************************************************************************/ static void EPORT_IRQHandler(EPORT_TypeDef *EPORTx,EPORT_PINx PINx) { UINT8 status; status = EPORTx->EPFR; printf("enter eport interrupt.current status = %02x\r\n",status); if(status&(0x01<< PINx)) { EPORTx->EPFR |= 0x01<< PINx; //clear flag by writing 1 to it. if(EPORTx == EPORT) { printf("Enter EPORT%d interrupt.PIN = %d\r\n",0,PINx); } if(EPORTx == EPORT1) { printf("Enter EPORT%d interrupt.PIN = %d\r\n",1,PINx); } if(EPORTx == EPORT2) { printf("Enter EPORT%d interrupt.PIN = %d\r\n",2,PINx); } if(EPORTx == EPORT3) { printf("Enter EPORT%d interrupt.PIN = %d\r\n",3,PINx); } if(EPORTx == EPORT4) { printf("Enter EPORT%d interrupt.PIN = %d\r\n",4,PINx); } } } void EPORT0_0_IRQHandler(void) { EPORT_IRQHandler(EPORT,EPORT_PIN0); EPORT_IRQHandler(EPORT2,EPORT_PIN0); } void EPORT0_1_IRQHandler(void) { EPORT_IRQHandler(EPORT,EPORT_PIN1); EPORT_IRQHandler(EPORT2,EPORT_PIN1); } //void EPORT0_2_IRQHandler(void) //{ // EPORT_IRQHandler(EPORT,EPORT_PIN2); // EPORT_IRQHandler(EPORT2,EPORT_PIN2); //} void EPORT0_3_IRQHandler(void) { EPORT_IRQHandler(EPORT,EPORT_PIN3); EPORT_IRQHandler(EPORT2,EPORT_PIN3); } extern UINT8 ctp_active_index; void EPORT0_4_IRQHandler(void) { //EPORT_IRQHandler(EPORT,EPORT_PIN4); //EPORT_IRQHandler(EPORT2,EPORT_PIN4); EPORT->EPFR |= 0x01<< EPORT_PIN4; //clear flag by writing 1 to it. ctp_active_index = 1; // printf("*********EPORT0_4_IRQHandler*********\r\n"); } void EPORT0_5_IRQHandler(void) { EPORT_IRQHandler(EPORT,EPORT_PIN5); EPORT_IRQHandler(EPORT2,EPORT_PIN5); } void EPORT0_6_IRQHandler(void) { EPORT_IRQHandler(EPORT,EPORT_PIN6); EPORT_IRQHandler(EPORT2,EPORT_PIN6); } void EPORT0_7_IRQHandler(void) { EPORT_IRQHandler(EPORT,EPORT_PIN7); EPORT_IRQHandler(EPORT2,EPORT_PIN7); } void EPORT1_0_IRQHandler(void) { EPORT_IRQHandler(EPORT1,EPORT_PIN0); EPORT_IRQHandler(EPORT3,EPORT_PIN0); EPORT_IRQHandler(EPORT4,EPORT_PIN0); } void EPORT1_1_IRQHandler(void) { EPORT_IRQHandler(EPORT1,EPORT_PIN1); EPORT_IRQHandler(EPORT3,EPORT_PIN1); EPORT_IRQHandler(EPORT4,EPORT_PIN1); } void EPORT1_2_IRQHandler(void) { EPORT_IRQHandler(EPORT1,EPORT_PIN2); EPORT_IRQHandler(EPORT3,EPORT_PIN2); EPORT_IRQHandler(EPORT4,EPORT_PIN2); } void EPORT1_3_IRQHandler(void) { EPORT_IRQHandler(EPORT1,EPORT_PIN3); EPORT_IRQHandler(EPORT3,EPORT_PIN3); EPORT_IRQHandler(EPORT4,EPORT_PIN3); } void EPORT1_4_IRQHandler(void) { EPORT_IRQHandler(EPORT1,EPORT_PIN4); EPORT_IRQHandler(EPORT3,EPORT_PIN4); EPORT_IRQHandler(EPORT4,EPORT_PIN4); } void EPORT1_5_IRQHandler(void) { EPORT_IRQHandler(EPORT1,EPORT_PIN5); EPORT_IRQHandler(EPORT3,EPORT_PIN5); EPORT_IRQHandler(EPORT4,EPORT_PIN5); } void EPORT1_6_IRQHandler(void) { EPORT_IRQHandler(EPORT1,EPORT_PIN6); EPORT_IRQHandler(EPORT3,EPORT_PIN6); EPORT_IRQHandler(EPORT4,EPORT_PIN6); } void EPORT1_7_IRQHandler(void) { EPORT_IRQHandler(EPORT1,EPORT_PIN7); EPORT_IRQHandler(EPORT3,EPORT_PIN7); EPORT_IRQHandler(EPORT4,EPORT_PIN7); } /******************************************************************************* * Function Name : EPORT_ConfigGpio * Description : EPORT配置成GPIO用途 * Input : - EPORT_PINx: EPORT Pin;where x can be 0~15 to select the EPORT peripheral. * - GpioDir:设置GPIO方向 GPIO_OUTPUT:输出 GPIO_INPUT:输入 * * Output : None * Return : None ******************************************************************************/ INT8 EPORT_ConfigGpio(EPORT_PINx GpioNo, UINT8 GpioDir) { //UINT32 temp = 0x01; assert_param(IS_EPORT_PINx(GpioNo)); assert_param(IS_GPIO_DIR_BIT(GpioDir)); if (GpioNo > EPORT_PIN39) { return -1; } if ((GpioNo >= EPORT_PIN9) && (GpioNo <= EPORT_PIN11)) { *(volatile unsigned int *)(0x4000001c) |= (1 << 0); } if ((GpioNo >= EPORT_PIN14) && (GpioNo <= EPORT_PIN15)) { *(volatile unsigned int *)(0x4000001c) &= ~(1 << 1); } if ((GpioNo >= EPORT_PIN38) && (GpioNo <= EPORT_PIN39)) { *(volatile unsigned int *)(0x4000001c) |= (1 << 2); } if ((GpioNo >= EPORT_PIN6) && (GpioNo <= EPORT_PIN7)) { *(volatile unsigned int *)(0x4000001c) &= ~(1 << 4); } if ((GpioNo >= EPORT_PIN32) && (GpioNo <= EPORT_PIN37)) { *(volatile unsigned int *)(0x4000001c) |= (1 << 7); } if ((GpioNo >= EPORT_PIN26) && (GpioNo <= EPORT_PIN31)) { *(volatile unsigned int *)(0x4000001c) |= (1 << 12); } if ((GpioNo >= EPORT_PIN22) && (GpioNo <= EPORT_PIN25)) { *(volatile unsigned int *)(0x40000044) &= ~((UINT32)0xf << 28); *(volatile unsigned int *)(0x4000001c) |= (1 << 13); } if ((GpioNo >= EPORT_PIN18) && (GpioNo <= EPORT_PIN21)) { *(volatile unsigned int *)(0x4000001c) |= (1 << 14); } if ((GpioNo >= EPORT_PIN16) && (GpioNo <= EPORT_PIN17)) { *(volatile unsigned int *)(0x4000001c) |= (1 << 15); } if (GpioDir == GPIO_INPUT)//EPORT_EPDDR { if((GpioNo >>3) == 0) { EPORT->EPDDR &= ~(1<<(GpioNo - EPORT_PIN0)); } else if((GpioNo >>3) == 1) { EPORT1->EPDDR &= ~(1<<(GpioNo - EPORT_PIN8)); } else if((GpioNo >>3) == 2) { EPORT2->EPDDR &= ~(1<<(GpioNo - EPORT_PIN16)); } else if((GpioNo >>3) == 3) { EPORT3->EPDDR &= ~(1<<(GpioNo - EPORT_PIN24)); } else { EPORT4->EPDDR &= ~(1<<(GpioNo - EPORT_PIN32)); } } else { if((GpioNo >>3) == 0) { EPORT->EPDDR |= (1<<(GpioNo- EPORT_PIN0)); } else if((GpioNo >>3) == 1) { EPORT1->EPDDR |= (1<<(GpioNo - EPORT_PIN8)); } else if((GpioNo >>3) == 2) { EPORT2->EPDDR |= (1<<(GpioNo - EPORT_PIN16)); } else if((GpioNo >>3) == 3) { EPORT3->EPDDR |= (1<<(GpioNo - EPORT_PIN24)); } else { EPORT4->EPDDR |= (1<<(GpioNo - EPORT_PIN32)); } } return 0; } /******************************************************************************* * Function Name : EPORT_WriteGpioData * Description : 设置EPORT_PINx对应引脚的电平 * Input : - EPORT_PINx: EPORT Pin;where x can be 0~15 to select the EPORT peripheral. * - bitVal:设置的电平,Bit_SET:设置为高电平 Bit_RESET:设置为低电平 * * Output : None * Return : 0: 设置成功 other:设置失败 ******************************************************************************/ void EPORT_WriteGpioData(EPORT_PINx GpioNo, UINT8 bitVal) { assert_param(IS_EPORT_PINx(GpioNo)); assert_param(IS_GPIO_BIT_ACTION(bitVal)); if (GpioNo > EPORT_PIN39) return; if((GpioNo >>3) == 0) { EPORT->EPDDR |= (1<<(GpioNo - EPORT_PIN0)); if (bitVal == Bit_SET) { EPORT->EPDR |= (Bit_SET<<(GpioNo - EPORT_PIN0)); } else { EPORT->EPDR &= ~(Bit_SET<<(GpioNo - EPORT_PIN0)); } } else if((GpioNo >>3) == 1) { EPORT1->EPDDR |= (1<<(GpioNo - EPORT_PIN8)); if (bitVal == Bit_SET) { EPORT1->EPDR |= (Bit_SET<<(GpioNo - EPORT_PIN8)); } else { EPORT1->EPDR &= ~(Bit_SET<<(GpioNo - EPORT_PIN8)); } } else if((GpioNo >>3) == 2) { EPORT2->EPDDR |= (1<<(GpioNo - EPORT_PIN16)); if (bitVal == Bit_SET) { EPORT2->EPDR |= (Bit_SET<<(GpioNo - EPORT_PIN16)); } else { EPORT2->EPDR &= ~(Bit_SET<<(GpioNo - EPORT_PIN16)); } } else if((GpioNo >>3) == 3) { EPORT3->EPDDR |= (1<<(GpioNo - EPORT_PIN24)); if (bitVal == Bit_SET) { EPORT3->EPDR |= (Bit_SET<<(GpioNo - EPORT_PIN24)); } else { EPORT3->EPDR &= ~(Bit_SET<<(GpioNo - EPORT_PIN24)); } } else { EPORT4->EPDDR |= (1<<(GpioNo - EPORT_PIN32)); if (bitVal == Bit_SET) { EPORT4->EPDR |= (Bit_SET<<(GpioNo - EPORT_PIN32)); } else { EPORT4->EPDR &= ~(Bit_SET<<(GpioNo - EPORT_PIN32)); } } } /******************************************************************************* * Function Name : EPORT_ReadGpioData * Description : 获取EPORT_PINx对应引脚的电平 * Input : - EPORT_PINx: EPORT Pin;where x can be 0~15 to select the EPORT peripheral. * * Output : None * Return : Bit_SET:高电平 Bit_RESET:低电平 ******************************************************************************/ INT8 EPORT_ReadGpioData(EPORT_PINx GpioNo) { INT8 bitstatus = 0x00; assert_param(IS_EPORT_PINx(GpioNo)); if (GpioNo > EPORT_PIN39) return -1; if((GpioNo >>3) == 0) { // EPORTx->EPDDR &= ~(1<<(GpioNo - EPORT_PIN0));//xukai20181209实际应用中,当配置为输出时,也有可能读取电平状态,所以这里不能设置为输入。 bitstatus = EPORT->EPPDR; if (bitstatus&(Bit_SET<<(GpioNo - EPORT_PIN0))) { return Bit_SET; } else { return Bit_RESET; } } else if((GpioNo >>3) == 1) { //EPORT1->EPDDR &= ~(1<<(GpioNo - EPORT_PIN8));//xukai20181209实际应用中,当配置为输出时,也有可能读取电平状态,所以这里不能设置为输入。 bitstatus = EPORT1->EPPDR; if (bitstatus&(Bit_SET<<(GpioNo - EPORT_PIN8))) { return Bit_SET; } else { return Bit_RESET; } } else if((GpioNo >>3) == 2) { //EPORT2->EPDDR &= ~(1<<(GpioNo - EPORT_PIN16));//xukai20181209实际应用中,当配置为输出时,也有可能读取电平状态,所以这里不能设置为输入。 bitstatus = EPORT2->EPPDR; if (bitstatus&(Bit_SET<<(GpioNo - EPORT_PIN16))) { return Bit_SET; } else { return Bit_RESET; } } else if((GpioNo >>3) == 3) { //EPORT3->EPDDR &= ~(1<<(GpioNo - EPORT_PIN24));//xukai20181209实际应用中,当配置为输出时,也有可能读取电平状态,所以这里不能设置为输入。 bitstatus = EPORT3->EPPDR; if (bitstatus&(Bit_SET<<(GpioNo - EPORT_PIN24))) { return Bit_SET; } else { return Bit_RESET; } } else { //EPORT4->EPDDR &= ~(1<<(GpioNo - EPORT_PIN32));//xukai20181209实际应用中,当配置为输出时,也有可能读取电平状态,所以这里不能设置为输入。 bitstatus = EPORT4->EPPDR; if (bitstatus&(Bit_SET<<(GpioNo - EPORT_PIN32))) { return Bit_SET; } else { return Bit_RESET; } } } /******************************************************************************* * Function Name : EPORT_ITTypeConfig * Description : 设置EPORT_PINx脚的中断触发方式,并使能中断 * Input : - EPORT_PINx: EPORT Pin;where x can be 0~15 to select the EPORT peripheral. * - IntMode:中断触发方式 * LOW_LEVEL_INT: 低电平触发 * HIGH_LEVEL_INT: 高电平触发 * RISING_EDGE_INT:上升沿触发 * FALLING_EDGE_INT:下降沿触发 * RISING_FALLING_EDGE_INT:上升沿或下降沿触发 * * Output : None * Return : None ******************************************************************************/ void EPORT_ITTypeConfig( EPORT_PINx IntNo, EPORT_INT_MODE IntMode) { assert_param(IS_EPORT_PINx(IntNo)); assert_param(IS_EPORT_INT_MODE(IntMode)); if (IntNo > EPORT_PIN39) return; if ((IntNo >= EPORT_PIN9) && (IntNo <= EPORT_PIN11)) { *(volatile unsigned int *)(0x4000001c) |= (1 << 0); } if ((IntNo >= EPORT_PIN14) && (IntNo <= EPORT_PIN15)) { *(volatile unsigned int *)(0x4000001c) &= ~(1 << 1); } if ((IntNo >= EPORT_PIN38) && (IntNo <= EPORT_PIN39)) { *(volatile unsigned int *)(0x4000001c) |= (1 << 2); } if ((IntNo >= EPORT_PIN6) && (IntNo <= EPORT_PIN7)) { *(volatile unsigned int *)(0x4000001c) &= ~(1 << 4); } if ((IntNo >= EPORT_PIN32) && (IntNo <= EPORT_PIN37)) { *(volatile unsigned int *)(0x4000001c) |= (1 << 7); } if ((IntNo >= EPORT_PIN26) && (IntNo <= EPORT_PIN31)) { *(volatile unsigned int *)(0x4000001c) |= (1 << 12); } if ((IntNo >= EPORT_PIN22) && (IntNo <= EPORT_PIN25)) { *(volatile unsigned int *)(0x4000001c) |= (1 << 13); } if ((IntNo >= EPORT_PIN18) && (IntNo <= EPORT_PIN21)) { *(volatile unsigned int *)(0x4000001c) |= (1 << 14); } if ((IntNo >= EPORT_PIN16) && (IntNo <= EPORT_PIN17)) { *(volatile unsigned int *)(0x4000001c) |= (1 << 15); } if((IntNo >>3) == 0) { EPORT->EPDDR &= ~(0x01<<(IntNo - EPORT_PIN0)); //输入 } else if((IntNo >>3) == 1) { EPORT1->EPDDR &= ~(0x01<<(IntNo - EPORT_PIN8)); //输入 } else if((IntNo >>3) == 2) { EPORT2->EPDDR &= ~(0x01<<(IntNo - EPORT_PIN16)); //输入 } else if((IntNo >>3) == 3) { EPORT3->EPDDR &= ~(0x01<<(IntNo - EPORT_PIN24)); //输入 } else { EPORT4->EPDDR &= ~(0x01<<(IntNo - EPORT_PIN32)); //输入 } switch (IntMode) { case LOW_LEVEL_INT: //低电平触发 { if((IntNo >>3) == 0) { EPORT->EPPAR &= ~(0x0003<<((IntNo-EPORT_PIN0)*2)); } else if((IntNo >>3) == 1) { EPORT1->EPPAR &= ~(0x0003<<((IntNo-EPORT_PIN8)*2)); } else if((IntNo >>3) == 2) { EPORT2->EPPAR &= ~(0x0003<<((IntNo-EPORT_PIN16)*2)); } else if((IntNo >>3) == 3) { EPORT3->EPPAR &= ~(0x0003<<((IntNo-EPORT_PIN24)*2)); } else { EPORT4->EPPAR &= ~(0x0003<<((IntNo-EPORT_PIN32)*2)); } break; } case HIGH_LEVEL_INT: //高电平触发 { if((IntNo >>3) == 0) { EPORT->EPPAR &= ~(0x0003<<((IntNo - EPORT_PIN0)*2)); EPORT->EPLPR |= (0x01<<(IntNo - EPORT_PIN0)); } else if((IntNo >>3) == 1) { EPORT1->EPPAR &= ~(0x0003<<((IntNo - EPORT_PIN8)*2)); EPORT1->EPLPR |= (0x01<<(IntNo - EPORT_PIN8)); } else if((IntNo >>3) == 2) { EPORT2->EPPAR &= ~(0x0003<<((IntNo - EPORT_PIN16)*2)); EPORT2->EPLPR |= (0x01<<(IntNo - EPORT_PIN16)); } else if((IntNo >>3) == 3) { EPORT3->EPPAR &= ~(0x0003<<((IntNo - EPORT_PIN24)*2)); EPORT3->EPLPR |= (0x01<<(IntNo - EPORT_PIN24)); } else { EPORT4->EPPAR &= ~(0x0003<<((IntNo - EPORT_PIN32)*2)); EPORT4->EPLPR |= (0x01<<(IntNo - EPORT_PIN32)); } break; } case RISING_EDGE_INT: //上升沿触发 { if((IntNo >>3) == 0) { EPORT->EPPAR &= ~(0x0003<<((IntNo - EPORT_PIN0)*2)); EPORT->EPPAR |= (0x0001<<((IntNo - EPORT_PIN0)*2)); } else if((IntNo >>3) == 1) { EPORT1->EPPAR &= ~(0x0003<<((IntNo - EPORT_PIN8)*2)); EPORT1->EPPAR |= (0x0001<<((IntNo - EPORT_PIN8)*2)); } else if((IntNo >>3) == 2) { EPORT2->EPPAR &= ~(0x0003<<((IntNo - EPORT_PIN16)*2)); EPORT2->EPPAR |= (0x0001<<((IntNo - EPORT_PIN16)*2)); } else if((IntNo >>3) == 3) { EPORT3->EPPAR &= ~(0x0003<<((IntNo - EPORT_PIN24)*2)); EPORT3->EPPAR |= (0x0001<<((IntNo - EPORT_PIN24)*2)); } else { EPORT4->EPPAR &= ~(0x0003<<((IntNo - EPORT_PIN32)*2)); EPORT4->EPPAR |= (0x0001<<((IntNo - EPORT_PIN32)*2)); } break; } case FALLING_EDGE_INT: //下降沿触发 { if((IntNo >>3) == 0) { EPORT->EPPAR &= ~(0x0003<<((IntNo - EPORT_PIN0)*2)); EPORT->EPPAR |= (0x0002<<((IntNo - EPORT_PIN0)*2)); } else if((IntNo >>3) == 1) { EPORT1->EPPAR &= ~(0x0003<<((IntNo - EPORT_PIN8)*2)); EPORT1->EPPAR |= (0x0002<<((IntNo - EPORT_PIN8)*2)); } else if((IntNo >>3) == 2) { EPORT2->EPPAR &= ~(0x0003<<((IntNo - EPORT_PIN16)*2)); EPORT2->EPPAR |= (0x0002<<((IntNo - EPORT_PIN16)*2)); } else if((IntNo >>3) == 3) { EPORT3->EPPAR &= ~(0x0003<<((IntNo - EPORT_PIN24)*2)); EPORT3->EPPAR |= (0x0002<<((IntNo - EPORT_PIN24)*2)); } else { EPORT4->EPPAR &= ~(0x0003<<((IntNo - EPORT_PIN32)*2)); EPORT4->EPPAR |= (0x0002<<((IntNo - EPORT_PIN32)*2)); } break; } case RISING_FALLING_EDGE_INT: //上升沿和下降沿都触发 { if((IntNo >>3) == 0) { EPORT->EPPAR |= (0x0003<<((IntNo - EPORT_PIN0)*2)); } else if((IntNo >>3) == 1) { EPORT1->EPPAR |= (0x0003<<((IntNo - EPORT_PIN8)*2)); } else if((IntNo >>3) == 2) { EPORT2->EPPAR |= (0x0003<<((IntNo - EPORT_PIN16)*2)); } else if((IntNo >>3) == 3) { EPORT3->EPPAR |= (0x0003<<((IntNo - EPORT_PIN24)*2)); } else { EPORT4->EPPAR |= (0x0003<<((IntNo - EPORT_PIN32)*2)); } break; } default: { break; } } //使能中断 if((IntNo >>3) == 0) { EPORT->EPIER |= (0x01<<(IntNo - EPORT_PIN0)); } else if((IntNo >>3) == 1) { EPORT1->EPIER |= (0x01<<(IntNo - EPORT_PIN8)); } else if((IntNo >>3) == 2) { EPORT2->EPIER |= (0x01<<(IntNo - EPORT_PIN16)); } else if((IntNo >>3) == 3) { EPORT3->EPIER |= (0x01<<(IntNo - EPORT_PIN24)); } else { EPORT4->EPIER |= (0x01<<(IntNo - EPORT_PIN32)); } } /******************************************************************************* * Function Name : EPORT_ITConfig * Description : EPORT中断使能控制 * Input : - EPORT_PINx: EPORT Pin;where x can be 0~15 to select the EPORT peripheral. * - NewState:new state of the specified EPORT interrupts. * This parameter can be: ENABLE or DISABLE. * * Output : None * Return : None ******************************************************************************/ void EPORT_ITConfig(EPORT_PINx IntNo, FunctionalState NewState) { assert_param(IS_EPORT_PINx(IntNo)); assert_param(IS_FUNCTIONAL_STATE(NewState)); if (IntNo > EPORT_PIN39) return; if (NewState != DISABLE) { if((IntNo >>3) == 0) { EPORT->EPIER |= (0x01<<(IntNo - EPORT_PIN0)); //使能中断 } else if((IntNo >>3) == 1) { EPORT1->EPIER |= (0x01<<(IntNo - EPORT_PIN8)); //使能中断 } else if((IntNo >>3) == 2) { EPORT2->EPIER |= (0x01<<(IntNo - EPORT_PIN16)); //使能中断 } else if((IntNo >>3) == 3) { EPORT3->EPIER |= (0x01<<(IntNo - EPORT_PIN24)); //使能中断 } else { EPORT4->EPIER |= (0x01<<(IntNo - EPORT_PIN32)); //使能中断 } } else { if((IntNo >>3) == 0) { EPORT->EPIER &= ~(0x01<<(IntNo - EPORT_PIN0)); //disable中断 } else if((IntNo >>3) == 1) { EPORT1->EPIER &= ~(0x01<<(IntNo - EPORT_PIN8)); //disable中断 } else if((IntNo >>3) == 2) { EPORT2->EPIER &= ~(0x01<<(IntNo - EPORT_PIN16)); //disable中断 } else if((IntNo >>3) == 3) { EPORT3->EPIER &= ~(0x01<<(IntNo - EPORT_PIN24)); //disable中断 } else { EPORT4->EPIER &= ~(0x01<<(IntNo - EPORT_PIN32)); //disable中断 } } } /******************************************************************************* * Function Name : EPORT_PullupConfig * Description : EPORT上拉使能控制 * Input : - EPORT_PINx: EPORT Pin;where x can be 0~15 to select the EPORT peripheral. * - NewState:new state of the specified EPORT Pullup. * This parameter can be: ENABLE or DISABLE. * * Output : None * Return : None ******************************************************************************/ void EPORT_PullupConfig(EPORT_PINx IntNo, FunctionalState NewState) { assert_param(IS_EPORT_PINx(IntNo)); assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { if((IntNo >>3) == 0) { EPORT->EPPUER |= (0x01<<(IntNo - EPORT_PIN0)); } else if((IntNo >>3) == 1) { EPORT1->EPPUER |= (0x01<<(IntNo - EPORT_PIN8)); } else if((IntNo >>3) == 2) { EPORT2->EPPUER |= (0x01<<(IntNo - EPORT_PIN16)); } else if((IntNo >>3) == 3) { EPORT3->EPPUER |= (0x01<<(IntNo - EPORT_PIN24)); } else { EPORT4->EPPUER |= (0x01<<(IntNo - EPORT_PIN32)); } } else { if((IntNo >>3) == 0) { EPORT->EPPUER &= ~(0x01<<(IntNo - EPORT_PIN0)); } else if((IntNo >>3) == 1) { EPORT1->EPPUER &= ~(0x01<<(IntNo - EPORT_PIN8)); } else if((IntNo >>3) == 2) { EPORT2->EPPUER &= ~(0x01<<(IntNo - EPORT_PIN16)); } else if((IntNo >>3) == 3) { EPORT3->EPPUER &= ~(0x01<<(IntNo - EPORT_PIN24)); } else { EPORT4->EPPUER &= ~(0x01<<(IntNo - EPORT_PIN32)); } } } /******************************************************************************* * Function Name : EPORT_Init * Description : EPORT初始化 * Input : -PINx 中断引脚号 * -IntMode 中断模式 * * Output : None * Return : None ******************************************************************************/ extern void EPORT_Init(EPORT_PINx PINx,EPORT_INT_MODE IntMode) { if(((PINx>>3) == 0) ||((PINx>>3) == 2)) //EPORT0 或 EPORT2 { NVIC_Init(3, 3, (EPORT0_0_IRQn) + (PINx&7), 2); } else { NVIC_Init(3, 3, (EPORT1_0_IRQn) + (PINx&7), 2); } EPORT_ITTypeConfig(PINx, IntMode); EPORT_ITConfig(PINx, ENABLE); }