Beispiel #1
0
void am_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode)
{
    if (mode == PIN_MODE_OUTPUT)
    {
        /* output setting */
        am_hal_gpio_pin_config(pin, AM_HAL_GPIO_OUTPUT);
    }
    else if (mode == PIN_MODE_INPUT)
    {
        /* input setting: not pull. */
        am_hal_gpio_pin_config(pin, AM_HAL_GPIO_INPUT);
    }
    else if (mode == PIN_MODE_INPUT_PULLUP)
    {
        /* input setting: pull up. */
        am_hal_gpio_pin_config(pin, AM_HAL_GPIO_OPENDRAIN);
    }
    else
    {
        /* input setting:default. */
        am_hal_gpio_pin_config(pin, AM_HAL_GPIO_INPUT);
    }
}
int
hal_uart_init(int port, void *arg)
{
    struct apollo2_uart_cfg *cfg;
    uint32_t pincfg;

    cfg = arg;

    if (port >= UART_CNT) {
        return SYS_EINVAL;
    }

    switch (cfg->suc_pin_tx) {
    case 1:
        pincfg = AM_HAL_GPIO_FUNC(2);
        break;

    case 7:
        pincfg = AM_HAL_GPIO_FUNC(5);
        break;

    case 16:
        pincfg = AM_HAL_GPIO_FUNC(6);
        break;

    case 20:
    case 30:
        pincfg = AM_HAL_GPIO_FUNC(4);
        break;

    case 22:
    case 39:
        pincfg = AM_HAL_GPIO_FUNC(0);
        break;

    default:
        return SYS_EINVAL;
    }
    am_hal_gpio_pin_config(cfg->suc_pin_tx, pincfg);

    switch (cfg->suc_pin_rx) {
    case 2:
        pincfg = AM_HAL_GPIO_FUNC(2);
        break;

    case 11:
    case 17:
        pincfg = AM_HAL_GPIO_FUNC(6);
        break;

    case 21:
    case 31:
        pincfg = AM_HAL_GPIO_FUNC(4);
        break;

    case 23:
    case 40:
        pincfg = AM_HAL_GPIO_FUNC(0);
        break;

    default:
        return SYS_EINVAL;
    }
    pincfg |= AM_HAL_PIN_DIR_INPUT;
    am_hal_gpio_pin_config(cfg->suc_pin_rx, pincfg);

    /* RTS pin is optional. */
    if (cfg->suc_pin_rts != 0) {
        switch (cfg->suc_pin_rts) {
        case 3:
            pincfg = AM_HAL_GPIO_FUNC(0);
            break;

        case 5:
        case 37:
            pincfg = AM_HAL_GPIO_FUNC(2);
            break;

        case 13:
        case 35:
            pincfg = AM_HAL_GPIO_FUNC(6);
            break;

        case 41:
            pincfg = AM_HAL_GPIO_FUNC(7);
            break;

        default:
            return SYS_EINVAL;
        }
        am_hal_gpio_pin_config(cfg->suc_pin_rts, pincfg);
    }

    /* CTS pin is optional. */
    if (cfg->suc_pin_cts != 0) {
        switch (cfg->suc_pin_cts) {
        case 4:
            pincfg = AM_HAL_GPIO_FUNC(0);
            break;

        case 6:
        case 38:
            pincfg = AM_HAL_GPIO_FUNC(2);
            break;

        case 12:
        case 36:
            pincfg = AM_HAL_GPIO_FUNC(6);
            break;

        case 29:
            pincfg = AM_HAL_GPIO_FUNC(4);
            break;

        default:
            return SYS_EINVAL;
        }
        pincfg |= AM_HAL_PIN_DIR_INPUT;
        am_hal_gpio_pin_config(cfg->suc_pin_cts, pincfg);
    }

    apollo2_uart_set_nvic(port);
    return 0;
}