221 lines
6.2 KiB
C
221 lines
6.2 KiB
C
/**
|
|
* @file board.c
|
|
* @brief
|
|
*
|
|
* Copyright (c) 2021 Bouffalolab team
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership. The
|
|
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance with the
|
|
* License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations
|
|
* under the License.
|
|
*
|
|
*/
|
|
|
|
#include "hal_gpio.h"
|
|
#include "hal_clock.h"
|
|
#include "bl602_glb.h"
|
|
#include "bl602_config.h"
|
|
|
|
struct pin_mux_cfg {
|
|
uint8_t pin;
|
|
uint16_t func;
|
|
};
|
|
|
|
static const struct pin_mux_cfg af_pin_table[] = {
|
|
#ifdef CONFIG_GPIO0_FUNC
|
|
{ .pin = GPIO_PIN_0,
|
|
.func = CONFIG_GPIO0_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO1_FUNC
|
|
{ .pin = GPIO_PIN_1,
|
|
.func = CONFIG_GPIO1_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO2_FUNC
|
|
{ .pin = GPIO_PIN_2,
|
|
.func = CONFIG_GPIO2_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO3_FUNC
|
|
{ .pin = GPIO_PIN_3,
|
|
.func = CONFIG_GPIO3_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO4_FUNC
|
|
{ .pin = GPIO_PIN_4,
|
|
.func = CONFIG_GPIO4_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO5_FUNC
|
|
{ .pin = GPIO_PIN_5,
|
|
.func = CONFIG_GPIO5_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO6_FUNC
|
|
{ .pin = GPIO_PIN_6,
|
|
.func = CONFIG_GPIO6_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO7_FUNC
|
|
{ .pin = GPIO_PIN_7,
|
|
.func = CONFIG_GPIO7_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO8_FUNC
|
|
{ .pin = GPIO_PIN_8,
|
|
.func = CONFIG_GPIO8_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO9_FUNC
|
|
{ .pin = GPIO_PIN_9,
|
|
.func = CONFIG_GPIO9_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO10_FUNC
|
|
{ .pin = GPIO_PIN_10,
|
|
.func = CONFIG_GPIO10_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO11_FUNC
|
|
{ .pin = GPIO_PIN_11,
|
|
.func = CONFIG_GPIO11_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO12_FUNC
|
|
{ .pin = GPIO_PIN_12,
|
|
.func = CONFIG_GPIO12_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO13_FUNC
|
|
{ .pin = GPIO_PIN_13,
|
|
.func = CONFIG_GPIO13_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO14_FUNC
|
|
{ .pin = GPIO_PIN_14,
|
|
.func = CONFIG_GPIO14_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO15_FUNC
|
|
{ .pin = GPIO_PIN_15,
|
|
.func = CONFIG_GPIO15_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO16_FUNC
|
|
{ .pin = GPIO_PIN_16,
|
|
.func = CONFIG_GPIO16_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO17_FUNC
|
|
{ .pin = GPIO_PIN_17,
|
|
.func = CONFIG_GPIO17_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO18_FUNC
|
|
{ .pin = GPIO_PIN_18,
|
|
.func = CONFIG_GPIO18_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO19_FUNC
|
|
{ .pin = GPIO_PIN_19,
|
|
.func = CONFIG_GPIO19_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO20_FUNC
|
|
{ .pin = GPIO_PIN_20,
|
|
.func = CONFIG_GPIO20_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO21_FUNC
|
|
{ .pin = GPIO_PIN_21,
|
|
.func = CONFIG_GPIO21_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO22_FUNC
|
|
{ .pin = GPIO_PIN_22,
|
|
.func = CONFIG_GPIO22_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO23_FUNC
|
|
{ .pin = GPIO_PIN_23,
|
|
.func = CONFIG_GPIO23_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO24_FUNC
|
|
{ .pin = GPIO_PIN_24,
|
|
.func = CONFIG_GPIO24_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO25_FUNC
|
|
{ .pin = GPIO_PIN_25,
|
|
.func = CONFIG_GPIO25_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO26_FUNC
|
|
{ .pin = GPIO_PIN_26,
|
|
.func = CONFIG_GPIO26_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO27_FUNC
|
|
{ .pin = GPIO_PIN_27,
|
|
.func = CONFIG_GPIO27_FUNC },
|
|
#endif
|
|
#ifdef CONFIG_GPIO28_FUNC
|
|
{ .pin = GPIO_PIN_28,
|
|
.func = CONFIG_GPIO28_FUNC },
|
|
#endif
|
|
};
|
|
|
|
static void board_pin_mux_init(void)
|
|
{
|
|
GLB_GPIO_Cfg_Type gpio_cfg;
|
|
|
|
gpio_cfg.drive = 0;
|
|
gpio_cfg.smtCtrl = 1;
|
|
|
|
for (int i = 0; i < sizeof(af_pin_table) / sizeof(af_pin_table[0]); i++) {
|
|
gpio_cfg.gpioMode = GPIO_MODE_AF;
|
|
gpio_cfg.pullType = GPIO_PULL_UP;
|
|
gpio_cfg.gpioPin = af_pin_table[i].pin;
|
|
gpio_cfg.gpioFun = af_pin_table[i].func;
|
|
|
|
if (af_pin_table[i].func == GPIO_FUN_UNUSED) {
|
|
continue;
|
|
} else if (af_pin_table[i].func == GPIO_FUN_PWM) {
|
|
gpio_cfg.pullType = GPIO_PULL_DOWN;
|
|
}
|
|
// else if((af_pin_table[i].func == GPIO_FUN_DAC)|| (af_pin_table[i].func == GPIO_FUN_ADC))
|
|
// {
|
|
// gpio_cfg.gpioFun = GPIO_FUN_ANALOG;
|
|
// gpio_cfg.gpioMode = GPIO_MODE_ANALOG;
|
|
// }
|
|
else if ((af_pin_table[i].func & 0x70) == 0x70) {
|
|
gpio_cfg.gpioFun = GPIO_FUN_UART;
|
|
uint8_t sig = af_pin_table[i].func & 0x07;
|
|
GLB_UART_Fun_Sel((gpio_cfg.gpioPin % 8), sig);
|
|
}
|
|
|
|
GLB_GPIO_Init(&gpio_cfg);
|
|
}
|
|
}
|
|
|
|
static void board_clock_init(void)
|
|
{
|
|
system_clock_init();
|
|
peripheral_clock_init();
|
|
}
|
|
|
|
void bl_show_info(void)
|
|
{
|
|
MSG("\r\n");
|
|
MSG(" ____ __ __ _ _ _ \r\n");
|
|
MSG(" | _ \\ / _|/ _| | | | | | | \r\n");
|
|
MSG(" | |_) | ___ _ _| |_| |_ __ _| | ___ | | __ _| |__ \r\n");
|
|
MSG(" | _ < / _ \\| | | | _| _/ _` | |/ _ \\| |/ _` | '_ \\ \r\n");
|
|
MSG(" | |_) | (_) | |_| | | | || (_| | | (_) | | (_| | |_) |\r\n");
|
|
MSG(" |____/ \\___/ \\__,_|_| |_| \\__,_|_|\\___/|_|\\__,_|_.__/ \r\n");
|
|
MSG("\r\n");
|
|
MSG("Build:%s,%s\r\n", __TIME__, __DATE__);
|
|
MSG("Copyright (c) 2021 Bouffalolab team\r\n");
|
|
|
|
#if 0
|
|
MSG("root clock:%dM\r\n", system_clock_get(SYSTEM_CLOCK_ROOT_CLOCK) / 1000000);
|
|
MSG("fclk clock:%dM\r\n", system_clock_get(SYSTEM_CLOCK_FCLK) / 1000000);
|
|
MSG("bclk clock:%dM\r\n", system_clock_get(SYSTEM_CLOCK_BCLK) / 1000000);
|
|
|
|
MSG("uart clock:%dM\r\n", peripheral_clock_get(PERIPHERAL_CLOCK_UART) / 1000000);
|
|
MSG("spi clock:%dM\r\n", peripheral_clock_get(PERIPHERAL_CLOCK_SPI) / 1000000);
|
|
MSG("i2c clock:%dM\r\n", peripheral_clock_get(PERIPHERAL_CLOCK_I2C) / 1000000);
|
|
#endif
|
|
}
|
|
|
|
void board_init(void)
|
|
{
|
|
board_clock_init();
|
|
board_pin_mux_init();
|
|
}
|