Files
2025-12-03 11:12:34 +08:00

89 lines
2.0 KiB
C

#ifdef SUPPORT_MS_EXTENSIONS
#pragma bss_seg(".gpio_config.data.bss")
#pragma data_seg(".gpio_config.data")
#pragma const_seg(".gpio_config.text.const")
#pragma code_seg(".gpio_config.text")
#endif
/*
important, sdk gpio_config!!!
important, sdk gpio config!!!
important, sdk gpio config!!!
1.soff/poweron reset
2.power_early_flowing, 所有io初始化为高阻
3.gpio_init, 根据配置初始化io
4.latch release
5.sdk io init
6.soff flowing, do platform_uninitcall{
1.gpio_uninit,配置关机io的状态
2.other flowing......
}
*/
#include "app_config.h"
#include "gpio_config.h"
#include "syscfg_id.h"
//--------------------------------------------------------
/*config
*/
#define __TCFG_IO_CFG_AT_POWER_ON TCFG_IO_CFG_AT_POWER_ON
#define __TCFG_IO_CFG_AT_POWER_OFF TCFG_IO_CFG_AT_POWER_OFF
//--------------------------------------------------------
/*app flowing
*/
struct gpio_cfg_item {
u8 len;
u16 uuid;
u8 mode;
u8 hd;
} __attribute__((packed));
int gpio_config_init()
{
#if __TCFG_IO_CFG_AT_POWER_ON
struct gpio_cfg_item item;
puts("gpio_cfg_at_power_on\n");
for (int i = 0; ; i++) {
int len = syscfg_read_item(CFG_ID_IO_CFG_AT_POWERON, i, &item, sizeof(item));
if (len != sizeof(item)) {
break;
}
u8 gpio = uuid2gpio(item.uuid);
struct gpio_config config = {
.pin = BIT(gpio % 16),
.mode = item.mode,
.hd = item.hd,
};
gpio_init(gpio / 16, &config);
}
#endif
return 0;
}
int gpio_config_uninit()
{
#if __TCFG_IO_CFG_AT_POWER_OFF
struct gpio_cfg_item item;
for (int i = 0; ; i++) {
int len = syscfg_read_item(CFG_ID_IO_CFG_AT_POWEROFF, i, &item, sizeof(item));
if (len != sizeof(item)) {
break;
}
u8 gpio = uuid2gpio(item.uuid);
struct gpio_config config = {
.pin = BIT(gpio % 16),
.mode = item.mode,
.hd = item.hd,
};
gpio_init(gpio / 16, &config);
}
#endif
return 0;
}