/*FUNCTION**********************************************************************
 *
 * Function Name : gpio_clear_pin_interrupt_flag
 * Description   : Clear individual GPIO pin interrupt status flag.
 *
 *END**************************************************************************/
void gpio_clear_pin_interrupt_flag(uint32_t pinName)
{
    uint32_t gpioInstance = GPIO_EXTRACT_PORT(pinName);
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);
 
    port_hal_clear_pin_interrupt_flag(gpioInstance, pin);
}
Beispiel #2
0
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_WritePinOutput
 * Description   : Set output level of individual GPIO pin to logic 1 or 0.
 *
 *END**************************************************************************/
void GPIO_DRV_WritePinOutput(uint32_t pinName, uint32_t output)
{
    uint32_t gpioBaseAddr = g_gpioBaseAddr[GPIO_EXTRACT_PORT(pinName)];
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);

    GPIO_HAL_WritePinOutput(gpioBaseAddr, pin, output);
}
/*FUNCTION**********************************************************************
 *
 * Function Name : gpio_write_pin_output
 * Description   : Set output level of individual GPIO pin to logic 1 or 0.
 *
 *END**************************************************************************/
void gpio_write_pin_output(uint32_t pinName, uint32_t output)
{
    uint32_t gpioInstance = GPIO_EXTRACT_PORT(pinName);
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);

    gpio_hal_write_pin_output(gpioInstance, pin, output);
}
/*FUNCTION**********************************************************************
 *
 * Function Name : gpio_read_pin_input
 * Description   : Read current input value of individual GPIO pin.
 *
 *END**************************************************************************/
uint32_t gpio_read_pin_input(uint32_t pinName)
{
    uint32_t gpioInstance = GPIO_EXTRACT_PORT(pinName);
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);
    
    return gpio_hal_read_pin_input(gpioInstance, pin);
}
Beispiel #5
0
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_InputPinInit
 * Description   : Initialize one GPIO input pin used by board.
 *
 *END**************************************************************************/
void GPIO_DRV_InputPinInit(const gpio_input_pin_user_config_t *inputPin)
{
    /* Get actual port and pin number.*/
    uint32_t port = GPIO_EXTRACT_PORT(inputPin->pinName);
    uint32_t pin = GPIO_EXTRACT_PIN(inputPin->pinName);
    uint32_t gpioBaseAddr = g_gpioBaseAddr[port];
    uint32_t portBaseAddr = g_portBaseAddr[port];

    /* Un-gate port clock*/
    CLOCK_SYS_EnablePortClock(port);

    /* Set current pin as digital input.*/
    GPIO_HAL_SetPinDir(gpioBaseAddr, pin, kGpioDigitalInput);

    /* Configure GPIO input features. */
    PORT_HAL_SetPullCmd(portBaseAddr, pin, inputPin->config.isPullEnable);
    PORT_HAL_SetPullMode(portBaseAddr, pin, inputPin->config.pullSelect);
    PORT_HAL_SetPassiveFilterCmd(portBaseAddr, pin,
            inputPin->config.isPassiveFilterEnabled);
    #if FSL_FEATURE_PORT_HAS_DIGITAL_FILTER
    PORT_HAL_SetDigitalFilterCmd(portBaseAddr, pin, 
            inputPin->config.isDigitalFilterEnabled); 
    #endif
    PORT_HAL_SetPinIntMode(portBaseAddr, pin, inputPin->config.interrupt);

    /* Configure NVIC */
    if ((inputPin->config.interrupt) && (g_portIrqId[port]))
    {
        /* Enable GPIO interrupt.*/
        INT_SYS_EnableIRQ(g_portIrqId[port]);
    }
}
/*FUNCTION**********************************************************************
 *
 * Function Name : gpio_get_pin_direction
 * Description   : Get current direction of individual GPIO pin.
 *
 *END**************************************************************************/
uint32_t gpio_get_pin_direction(uint32_t pinName)
{
    uint32_t gpioInstance = GPIO_EXTRACT_PORT(pinName);
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);

    return gpio_hal_get_pin_direction(gpioInstance, pin);
}
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_IsPinIntPending
 * Description   : Read the individual pin-interrupt status flag.
 *
 *END**************************************************************************/
bool GPIO_DRV_IsPinIntPending(uint32_t pinName)
{
    PORT_Type * portBase = g_portBase[GPIO_EXTRACT_PORT(pinName)];
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);

    return PORT_HAL_IsPinIntPending(portBase, pin);
}
Beispiel #8
0
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_SetDigitalFilterCmd
 * Description   : Enable or disable digital filter in one single port.
 *
 *END**************************************************************************/
void GPIO_DRV_SetDigitalFilterCmd(uint32_t pinName, bool isDigitalFilterEnabled)
{
    uint32_t portBaseAddr = g_portBaseAddr[GPIO_EXTRACT_PORT(pinName)];
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);
 
    PORT_HAL_SetDigitalFilterCmd(portBaseAddr, pin, isDigitalFilterEnabled);
}
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_TogglePinOutput
 * Description   : Reverse current output logic of individual GPIO pin.
 *
 *END**************************************************************************/
void GPIO_DRV_TogglePinOutput(uint32_t pinName)
{
    GPIO_Type * gpioBase = g_gpioBase[GPIO_EXTRACT_PORT(pinName)];
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);

    GPIO_HAL_TogglePinOutput(gpioBase, pin);
}
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_ReadPinInput
 * Description   : Read current input value of individual GPIO pin.
 *
 *END**************************************************************************/
uint32_t GPIO_DRV_ReadPinInput(uint32_t pinName)
{
    GPIO_Type * gpioBase = g_gpioBase[GPIO_EXTRACT_PORT(pinName)];
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);

    return GPIO_HAL_ReadPinInput(gpioBase, pin);
}
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_WritePinOutput
 * Description   : Set output level of individual GPIO pin to logic 1 or 0.
 *
 *END**************************************************************************/
void GPIO_DRV_WritePinOutput(uint32_t pinName, uint32_t output)
{
    GPIO_Type * gpioBase = g_gpioBase[GPIO_EXTRACT_PORT(pinName)];
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);

    GPIO_HAL_WritePinOutput(gpioBase, pin, output);
}
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_SetPinDir
 * Description   : Set current direction of individual GPIO pin.
 *
 *END**************************************************************************/
void GPIO_DRV_SetPinDir(uint32_t pinName, gpio_pin_direction_t direction)
{
    GPIO_Type * gpioBase = g_gpioBase[GPIO_EXTRACT_PORT(pinName)];
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);

    GPIO_HAL_SetPinDir(gpioBase, pin, direction);
}
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_GetPinDir
 * Description   : Get current direction of individual GPIO pin.
 *
 *END**************************************************************************/
gpio_pin_direction_t GPIO_DRV_GetPinDir(uint32_t pinName)
{
    GPIO_Type * gpioBase = g_gpioBase[GPIO_EXTRACT_PORT(pinName)];
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);

    return GPIO_HAL_GetPinDir(gpioBase, pin);
}
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_OutputPinInit
 * Description   : Initialize one GPIO output pin used by board.
 *
 *END**************************************************************************/
void GPIO_DRV_OutputPinInit(const gpio_output_pin_user_config_t *outputPin)
{
    /* Get actual port and pin number.*/
    uint32_t port = GPIO_EXTRACT_PORT(outputPin->pinName);
    uint32_t pin = GPIO_EXTRACT_PIN(outputPin->pinName);
    GPIO_Type * gpioBase = g_gpioBase[port];
    PORT_Type * portBase = g_portBase[port];

    /* Un-gate port clock*/
    CLOCK_SYS_EnablePortClock(port);

    /* Set current pin as gpio.*/
    PORT_HAL_SetMuxMode(portBase, pin, kPortMuxAsGpio);

    /* Set current pin as digital output.*/
    GPIO_HAL_SetPinDir(gpioBase, pin, kGpioDigitalOutput);

    /* Configure GPIO output features. */
    GPIO_HAL_WritePinOutput(gpioBase, pin, outputPin->config.outputLogic);
    #if FSL_FEATURE_PORT_HAS_SLEW_RATE
    PORT_HAL_SetSlewRateMode(portBase, pin, outputPin->config.slewRate);
    #endif
    #if FSL_FEATURE_PORT_HAS_DRIVE_STRENGTH
    PORT_HAL_SetDriveStrengthMode(portBase, pin, outputPin->config.driveStrength);
    #endif
    #if FSL_FEATURE_PORT_HAS_OPEN_DRAIN
    PORT_HAL_SetOpenDrainCmd(portBase, pin, outputPin->config.isOpenDrainEnabled);
    #endif
}
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_ClearPinIntFlag
 * Description   : Clear individual GPIO pin interrupt status flag.
 *
 *END**************************************************************************/
void GPIO_DRV_ClearPinIntFlag(uint32_t pinName)
{
    PORT_Type * portBase = g_portBase[GPIO_EXTRACT_PORT(pinName)];
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);

    PORT_HAL_ClearPinIntFlag(portBase, pin);
}
Beispiel #16
0
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_ReadPinInput
 * Description   : Read current input value of individual GPIO pin.
 *
 *END**************************************************************************/
uint32_t GPIO_DRV_ReadPinInput(uint32_t pinName)
{
    uint32_t gpioBaseAddr = g_gpioBaseAddr[GPIO_EXTRACT_PORT(pinName)];
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);
    
    return GPIO_HAL_ReadPinInput(gpioBaseAddr, pin);
}
/*FUNCTION**********************************************************************
 *
 * Function Name : gpio_input_pin_init
 * Description   : Initialize one GPIO input pin used by board.
 *
 *END**************************************************************************/
void gpio_input_pin_init(const gpio_input_pin_user_config_t *inputPin)
{
    /* Get actual port and pin number.*/
    uint32_t gpioInstance = GPIO_EXTRACT_PORT(inputPin->pinName);
    uint32_t pin = GPIO_EXTRACT_PIN(inputPin->pinName);

    /* Un-gate port clock*/
    clock_manager_set_gate(kClockModulePORT, gpioInstance, true);

    /* Set current pin as digital input.*/
    gpio_hal_set_pin_direction(gpioInstance, pin, kGpioDigitalInput);

    /* Configure GPIO input features. */
    port_hal_configure_pull(gpioInstance, pin, inputPin->config.isPullEnable);
    port_hal_pull_select(gpioInstance, pin, inputPin->config.pullSelect);
    port_hal_configure_passive_filter(gpioInstance, pin,
            inputPin->config.isPassiveFilterEnabled);
    #if FSL_FEATURE_PORT_HAS_DIGITAL_FILTER
    port_hal_configure_digital_filter(gpioInstance, pin, 
            inputPin->config.isDigitalFilterEnabled); 
    #endif
    port_hal_configure_pin_interrupt(gpioInstance, pin, inputPin->config.interrupt);

    /* Configure NVIC */
    if ((inputPin->config.interrupt) && (gpio_irq_ids[gpioInstance]))
    {
        /* Enable GPIO interrupt.*/
        interrupt_enable(gpio_irq_ids[gpioInstance]);
    }
}
Beispiel #18
0
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_ClearPinIntFlag
 * Description   : Clear individual GPIO pin interrupt status flag.
 *
 *END**************************************************************************/
void GPIO_DRV_ClearPinIntFlag(uint32_t pinName)
{
    uint32_t portBaseAddr = g_portBaseAddr[GPIO_EXTRACT_PORT(pinName)];
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);
 
    PORT_HAL_ClearPinIntFlag(portBaseAddr, pin);
}
Beispiel #19
0
void hardware_init(void)
{

    uint8_t i;

    /* enable clock for PORTs */
    for (i = 0; i < PORT_INSTANCE_COUNT; i++)
    {
        CLOCK_SYS_EnablePortClock(i);
    }

#if (SD_CARD_APP)
#if ((defined TWR_K64F120M) || (defined FRDM_K64F) || (defined TWR_K60D100M) || (defined TWR_K21F120M) || (defined TWR_K65F180M))
    /* configure detect pin as gpio (alt1) */
    uint32_t port = GPIO_EXTRACT_PORT(sdhcCdPin[0].pinName);
    uint32_t pin = GPIO_EXTRACT_PIN(sdhcCdPin[0].pinName);
    PORT_Type * portBase = g_portBase[port];
    PORT_HAL_SetMuxMode(portBase, pin, kPortMuxAsGpio);

    configure_sdhc_pins(BOARD_SDHC_INSTANCE);
#endif
#endif
    /* Init board clock */
    BOARD_ClockInit();
    dbg_uart_init();
}
Beispiel #20
0
GpioPin::GpioPin(uint32_t combinedPin, pin_direction_t dir)
:   m_bank(GPIO_EXTRACT_BANK(combinedPin)),
    m_pin(GPIO_EXTRACT_PIN(combinedPin))
{
    gpio_set_gpio(m_bank, m_pin);
    setDirection(dir);
}
// handler associated to SW1 (labeled SW2 on board)
void SW1_Intr_Handler(void)
{
  static uint32_t c_ifsr;          // port c interrupt flag status register
  uint32_t c_portBaseAddr = g_portBaseAddr[GPIO_EXTRACT_PORT(kGpioSW1)];
  uint32_t portPinMask = (1 << GPIO_EXTRACT_PIN(kGpioSW1));

  CPU_CRITICAL_ENTER();         // enter critical section (disable interrupts)

  OSIntEnter();         // notify to scheduler the beginning of an ISR ("This allows ?C/OS-III to keep track of interrupt nesting")

  c_ifsr = PORT_HAL_GetPortIntFlag(c_portBaseAddr);         // get intr flag reg related to port C

  if( (c_ifsr & portPinMask) ) // check if kGpioSW1 generated the interrupt [pin 6 -> 7th flag (flags start with index 0)]
  {
      //sem_sw1_post
    OSSemPost(&MySem1,
                         OS_OPT_POST_1 + OS_OPT_POST_NO_SCHED,
                        &os_err);
  }

  GPIO_DRV_ClearPinIntFlag( kGpioSW1 );
  CPU_CRITICAL_EXIT();  // renable interrupts

  OSIntExit();          /* notify to scheduler the end of an ISR ("determines if a higher priority task is ready-to-run.
                          If so, the interrupt returns to the higher priority task instead of the interrupted task.") */
}
/*FUNCTION**********************************************************************
 *
 * Function Name : gpio_set_pin_direction
 * Description   : Set current direction of individual GPIO pin.
 *
 *END**************************************************************************/
void gpio_set_pin_direction(uint32_t pinName, gpio_pin_direction_t direction)
{
    uint32_t gpioInstance = GPIO_EXTRACT_PORT(pinName);
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);

    gpio_hal_set_pin_direction(gpioInstance, pin, direction);
}
Beispiel #23
0
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_GetPinDir
 * Description   : Get current direction of individual GPIO pin.
 *
 *END**************************************************************************/
gpio_pin_direction_t GPIO_DRV_GetPinDir(uint32_t pinName)
{
    uint32_t gpioBaseAddr = g_gpioBaseAddr[GPIO_EXTRACT_PORT(pinName)];
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);

    return GPIO_HAL_GetPinDir(gpioBaseAddr, pin);
}
/*FUNCTION**********************************************************************
 *
 * Function Name : gpio_toggle_pin_output
 * Description   : Reverse current output logic of individual GPIO pin.
 *
 *END**************************************************************************/
void gpio_toggle_pin_output(uint32_t pinName) 
{
    uint32_t gpioInstance = GPIO_EXTRACT_PORT(pinName);
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);
 
    gpio_hal_toggle_pin_output(gpioInstance, pin);
}
Beispiel #25
0
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_SetPinDir
 * Description   : Set current direction of individual GPIO pin.
 *
 *END**************************************************************************/
void GPIO_DRV_SetPinDir(uint32_t pinName, gpio_pin_direction_t direction)
{
    uint32_t gpioBaseAddr = g_gpioBaseAddr[GPIO_EXTRACT_PORT(pinName)];
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);

    GPIO_HAL_SetPinDir(gpioBaseAddr, pin, direction);
}
/*FUNCTION**********************************************************************
 *
 * Function Name : gpio_configure_digital_filter
 * Description   : Enable or disable digital filter in one single port.
 *
 *END**************************************************************************/
void gpio_configure_digital_filter(uint32_t pinName, bool isDigitalFilterEnabled)
{
    uint32_t gpioInstance = GPIO_EXTRACT_PORT(pinName);
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);
 
    port_hal_configure_digital_filter(gpioInstance, pin, isDigitalFilterEnabled);
}
Beispiel #27
0
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_TogglePinOutput
 * Description   : Reverse current output logic of individual GPIO pin.
 *
 *END**************************************************************************/
void GPIO_DRV_TogglePinOutput(uint32_t pinName) 
{
    uint32_t gpioBaseAddr = g_gpioBaseAddr[GPIO_EXTRACT_PORT(pinName)];
    uint32_t pin = GPIO_EXTRACT_PIN(pinName);
 
    GPIO_HAL_TogglePinOutput(gpioBaseAddr, pin);
}
Beispiel #28
0
/*!
 * @brief gpio IRQ handler with the same name in startup code
 */
void BOARD_SDHC_CD_GPIO_IRQ_HANDLER(void)
{
    PORT_Type * gpioBase = g_portBase[GPIO_EXTRACT_PORT(kGpioSdhc0Cd)];
    uint32_t pin = GPIO_EXTRACT_PIN(kGpioSdhc0Cd);

    if(PORT_HAL_GetPortIntFlag(gpioBase) == (1 << pin))
    {
        sdhc_card_detection();
    }
    /* Clear interrupt flag.*/
    PORT_HAL_ClearPortIntFlag(gpioBase);
}
Beispiel #29
0
/*!
 * @brief gpio IRQ handler with the same name in startup code
 */
void SDCARD_CD_GPIO_IRQ_HANDLER(void)
{
    PORT_Type * gpioBase = g_portBase[GPIO_EXTRACT_PORT(kGpioSdcardCardDetection)];
    uint32_t pin = GPIO_EXTRACT_PIN(kGpioSdcardCardDetection);

    if(PORT_HAL_GetPortIntFlag(gpioBase) == (1 << pin))
    {
        spiSDcard_card_detection();
    }
    /* Clear interrupt flag.*/
    PORT_HAL_ClearPortIntFlag(gpioBase);
}
/*FUNCTION**********************************************************************
 *
 * Function Name : GPIO_DRV_InputPinInit
 * Description   : Initialize one GPIO input pin used by board.
 *
 *END**************************************************************************/
void GPIO_DRV_InputPinInit(const gpio_input_pin_user_config_t *inputPin)
{
    /* Get actual port and pin number.*/
    uint32_t port = GPIO_EXTRACT_PORT(inputPin->pinName);
    uint32_t pin = GPIO_EXTRACT_PIN(inputPin->pinName);
    GPIO_Type * gpioBase = g_gpioBase[port];
    PORT_Type * portBase = g_portBase[port];

    /* Un-gate port clock*/
    CLOCK_SYS_EnablePortClock(port);

    /* Set current pin as gpio.*/
    PORT_HAL_SetMuxMode(portBase, pin, kPortMuxAsGpio);

    /* Set current pin as digital input.*/
    GPIO_HAL_SetPinDir(gpioBase, pin, kGpioDigitalInput);

    /* Configure GPIO input features. */
    #if FSL_FEATURE_PORT_HAS_PULL_ENABLE
    PORT_HAL_SetPullCmd(portBase, pin, inputPin->config.isPullEnable);
    #endif
    #if FSL_FEATURE_PORT_HAS_PULL_SELECTION
    PORT_HAL_SetPullMode(portBase, pin, inputPin->config.pullSelect);
    #endif
    #if FSL_FEATURE_PORT_HAS_PASSIVE_FILTER
    PORT_HAL_SetPassiveFilterCmd(portBase, pin,
            inputPin->config.isPassiveFilterEnabled);
    #endif
    #if FSL_FEATURE_PORT_HAS_DIGITAL_FILTER
    PORT_HAL_SetDigitalFilterCmd(portBase, pin,
            inputPin->config.isDigitalFilterEnabled);
    #endif
    #if FSL_FEATURE_GPIO_HAS_INTERRUPT_VECTOR
    PORT_HAL_SetPinIntMode(portBase, pin, inputPin->config.interrupt);

    /* Configure NVIC */
    if ((inputPin->config.interrupt) && (g_portIrqId[port]))
    {
        /* Enable GPIO interrupt.*/
        INT_SYS_EnableIRQ(g_portIrqId[port]);
    }
    #endif
}