void EXTI_Polarity_Set(PAD_Type Px, uint16_t GPIO_Pin, uint16_t Polarity ) { uint32_t pinpos = 0x00, pos = 0x00, currentpin = 0x00, loop = 16; P_Port_Def *px_exti; assert_param(IS_PAD_TYPE(Px)); if (Px == PAD_PA) px_exti = EXTI_PA; else if (Px == PAD_PB) px_exti = EXTI_PB; else if (Px == PAD_PC) px_exti = EXTI_PC; else { px_exti = (P_Port_Def*)EXTI_PD; loop = 5; } for(pinpos = 0x00; pinpos < loop; pinpos++) { pos = ((uint32_t)0x01) << pinpos; currentpin = GPIO_Pin & pos; if(currentpin == pos) { if(Polarity == EXTI_Trigger_Rising) px_exti->Port[pinpos] |= EXTI_Px_INTPOR_RISING_EDGE; else px_exti->Port[pinpos] |= EXTI_Px_INTPOR_FALLING_EDGE; } } }
/** * @brief Initializes the EXTI peripheral according to the specified * parameters in the EXTI_InitStruct. * @param EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure * that contains the configuration information for the EXTI peripheral. * @retval None */ void EXTI_Init(PAD_Type Px, EXTI_InitTypeDef* EXTI_InitStruct) { uint32_t pinpos = 0x00, pos = 0x00, currentpin = 0x00, loop = 16; P_Port_Def *px_exti; assert_param(IS_PAD_TYPE(Px)); if (Px == PAD_PA) px_exti = EXTI_PA; else if (Px == PAD_PB) px_exti = EXTI_PB; else if (Px == PAD_PC) px_exti = EXTI_PC; else { px_exti = (P_Port_Def*)EXTI_PD; loop = 5; } for(pinpos = 0x00; pinpos < loop; pinpos++) { pos = ((uint32_t)0x01) << pinpos; currentpin = (EXTI_InitStruct->EXTI_Line) & pos; if(currentpin == pos) { px_exti->Port[pinpos] |= EXTI_Px_INTEN_ENABLE; if(EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising) px_exti->Port[pinpos] |= EXTI_Px_INTPOR_RISING_EDGE; else px_exti->Port[pinpos] |= EXTI_Px_INTPOR_FALLING_EDGE; } } }
uint16_t EXTI_Px_GetEXTINTPOL(PAD_Type Px) { uint32_t i, loop = 16; uint16_t ret=0; P_Port_Def *px_exti; assert_param(IS_PAD_TYPE(Px)); if (Px == PAD_PA) { px_exti =(P_Port_Def*)EXTI_PA; loop = 15; } else if (Px == PAD_PB) { px_exti = (P_Port_Def*)EXTI_PB; loop = 4; } else { px_exti = (P_Port_Def*)EXTI_PC; loop = 16; } for(i = 0x00; i < loop; i++) { ret |= ((px_exti->Port[i]&0x1)<<i); } return ret; }
uint16_t EXTI_Px_GetEXTEN(PAD_Type Px) { uint32_t i, loop = 16; uint16_t ret=0; P_Port_Def *px_exti; assert_param(IS_PAD_TYPE(Px)); if (Px == PAD_PA) px_exti = EXTI_PA; else if (Px == PAD_PB) px_exti = EXTI_PB; else if (Px == PAD_PC) px_exti = EXTI_PC; else { px_exti = (P_Port_Def*)EXTI_PD; loop = 5; } for(i = 0x00; i < loop; i++) { ret |= (((px_exti->Port[i]&0x2)>>1)<<i); } return ret; }