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; }