예제 #1
0
파일: W7500x_exti.c 프로젝트: Babody/mbed
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;
        }
    }

}
예제 #2
0
파일: W7500x_exti.c 프로젝트: Babody/mbed
/**
  * @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;
        }
    }

}
예제 #3
0
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;
}
예제 #4
0
파일: W7500x_exti.c 프로젝트: Babody/mbed
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;
}