526 lines
16 KiB
C
526 lines
16 KiB
C
|
#include "app_config.h"
|
|||
|
|
|||
|
#ifdef CONFIG_BOARD_AC6329C_DEMO
|
|||
|
|
|||
|
#include "system/includes.h"
|
|||
|
#include "device/key_driver.h"
|
|||
|
#include "asm/chargestore.h"
|
|||
|
#include "asm/charge.h"
|
|||
|
#include "asm/pwm_led.h"
|
|||
|
#include "user_cfg.h"
|
|||
|
#include "usb/otg.h"
|
|||
|
#include "norflash.h"
|
|||
|
#include "asm/power/p33.h"
|
|||
|
|
|||
|
#define LOG_TAG_CONST BOARD
|
|||
|
#define LOG_TAG "[BOARD]"
|
|||
|
#define LOG_ERROR_ENABLE
|
|||
|
#define LOG_DEBUG_ENABLE
|
|||
|
#define LOG_INFO_ENABLE
|
|||
|
/* #define LOG_DUMP_ENABLE */
|
|||
|
#define LOG_CLI_ENABLE
|
|||
|
#include "debug.h"
|
|||
|
|
|||
|
void board_power_init(void);
|
|||
|
|
|||
|
/************************** LOW POWER config ****************************/
|
|||
|
const struct low_power_param power_param = {
|
|||
|
.config = TCFG_LOWPOWER_LOWPOWER_SEL, //0:sniff时芯片不进入低功耗 1:sniff时芯片进入powerdown
|
|||
|
.btosc_hz = TCFG_CLOCK_OSC_HZ, //外接晶振频率
|
|||
|
.delay_us = TCFG_CLOCK_SYS_HZ / 1000000L, //提供给低功耗模块的延时(不需要需修改)
|
|||
|
.btosc_disable = TCFG_LOWPOWER_BTOSC_DISABLE, //进入低功耗时BTOSC是否保持
|
|||
|
.vddiom_lev = TCFG_LOWPOWER_VDDIOM_LEVEL, //强VDDIO等级,可选:2.0V 2.2V 2.4V 2.6V 2.8V 3.0V 3.2V 3.6V
|
|||
|
.vddiow_lev = TCFG_LOWPOWER_VDDIOW_LEVEL, //弱VDDIO等级,可选:2.1V 2.4V 2.8V 3.2V
|
|||
|
.osc_type = TCFG_LOWPOWER_OSC_TYPE,
|
|||
|
.vd13_cap_en = TCFG_VD13_CAP_EN,
|
|||
|
};
|
|||
|
|
|||
|
/************************** KEY MSG****************************/
|
|||
|
/*各个按键的消息设置,如果USER_CFG中设置了USE_CONFIG_KEY_SETTING为1,则会从配置文件读取对应的配置来填充改结构体*/
|
|||
|
/* u8 key_table[KEY_NUM_MAX][KEY_EVENT_MAX] = { */
|
|||
|
// SHORT LONG HOLD UP DOUBLE TRIPLE
|
|||
|
/* }; */
|
|||
|
|
|||
|
|
|||
|
// *INDENT-OFF*
|
|||
|
/************************** UART config****************************/
|
|||
|
#if TCFG_UART0_ENABLE
|
|||
|
UART0_PLATFORM_DATA_BEGIN(uart0_data)
|
|||
|
.tx_pin = TCFG_UART0_TX_PORT, //串口打印TX引脚选择
|
|||
|
.rx_pin = TCFG_UART0_RX_PORT, //串口打印RX引脚选择
|
|||
|
.baudrate = TCFG_UART0_BAUDRATE, //串口波特率
|
|||
|
|
|||
|
.flags = UART_DEBUG, //串口用来打印需要把改参数设置为UART_DEBUG
|
|||
|
UART0_PLATFORM_DATA_END()
|
|||
|
#endif //TCFG_UART0_ENABLE
|
|||
|
|
|||
|
/************************** AD KEY ****************************/
|
|||
|
#if TCFG_ADKEY_ENABLE
|
|||
|
const struct adkey_platform_data adkey_data = {
|
|||
|
.enable = TCFG_ADKEY_ENABLE, //AD按键使能
|
|||
|
.adkey_pin = TCFG_ADKEY_PORT, //AD按键对应引脚
|
|||
|
.ad_channel = TCFG_ADKEY_AD_CHANNEL, //AD通道值
|
|||
|
.extern_up_en = TCFG_ADKEY_EXTERN_UP_ENABLE, //是否使用外接上拉电阻
|
|||
|
.ad_value = { //根据电阻算出来的电压值
|
|||
|
TCFG_ADKEY_VOLTAGE0,
|
|||
|
TCFG_ADKEY_VOLTAGE1,
|
|||
|
TCFG_ADKEY_VOLTAGE2,
|
|||
|
TCFG_ADKEY_VOLTAGE3,
|
|||
|
TCFG_ADKEY_VOLTAGE4,
|
|||
|
TCFG_ADKEY_VOLTAGE5,
|
|||
|
TCFG_ADKEY_VOLTAGE6,
|
|||
|
TCFG_ADKEY_VOLTAGE7,
|
|||
|
TCFG_ADKEY_VOLTAGE8,
|
|||
|
TCFG_ADKEY_VOLTAGE9,
|
|||
|
},
|
|||
|
.key_value = { //AD按键各个按键的键值
|
|||
|
TCFG_ADKEY_VALUE0,
|
|||
|
TCFG_ADKEY_VALUE1,
|
|||
|
TCFG_ADKEY_VALUE2,
|
|||
|
TCFG_ADKEY_VALUE3,
|
|||
|
TCFG_ADKEY_VALUE4,
|
|||
|
TCFG_ADKEY_VALUE5,
|
|||
|
TCFG_ADKEY_VALUE6,
|
|||
|
TCFG_ADKEY_VALUE7,
|
|||
|
TCFG_ADKEY_VALUE8,
|
|||
|
TCFG_ADKEY_VALUE9,
|
|||
|
},
|
|||
|
};
|
|||
|
#endif
|
|||
|
|
|||
|
/************************** IO KEY ****************************/
|
|||
|
#if TCFG_IOKEY_ENABLE
|
|||
|
const struct iokey_port iokey_list[] = {
|
|||
|
{
|
|||
|
.connect_way = TCFG_IOKEY_POWER_CONNECT_WAY, //IO按键的连接方式
|
|||
|
.key_type.one_io.port = TCFG_IOKEY_POWER_ONE_PORT, //IO按键对应的引脚
|
|||
|
.key_value = 0, //按键值
|
|||
|
},
|
|||
|
|
|||
|
{
|
|||
|
.connect_way = TCFG_IOKEY_PREV_CONNECT_WAY,
|
|||
|
.key_type.one_io.port = TCFG_IOKEY_PREV_ONE_PORT,
|
|||
|
.key_value = 1,
|
|||
|
},
|
|||
|
|
|||
|
{
|
|||
|
.connect_way = TCFG_IOKEY_NEXT_CONNECT_WAY,
|
|||
|
.key_type.one_io.port = TCFG_IOKEY_NEXT_ONE_PORT,
|
|||
|
.key_value = 2,
|
|||
|
},
|
|||
|
};
|
|||
|
const struct iokey_platform_data iokey_data = {
|
|||
|
.enable = TCFG_IOKEY_ENABLE, //是否使能IO按键
|
|||
|
.num = ARRAY_SIZE(iokey_list), //IO按键的个数
|
|||
|
.port = iokey_list, //IO按键参数表
|
|||
|
};
|
|||
|
|
|||
|
#if MULT_KEY_ENABLE
|
|||
|
//组合按键消息映射表
|
|||
|
//配置注意事项:单个按键按键值需要按照顺序编号,如power:0, prev:1, next:2
|
|||
|
//bit_value = BIT(0) | BIT(1) 指按键值为0和按键值为1的两个按键被同时按下,
|
|||
|
//remap_value = 3指当这两个按键被同时按下后重新映射的按键值;
|
|||
|
const struct key_remap iokey_remap_table[] = {
|
|||
|
{.bit_value = BIT(0) | BIT(1), .remap_value = 3},
|
|||
|
{.bit_value = BIT(0) | BIT(2), .remap_value = 4},
|
|||
|
{.bit_value = BIT(1) | BIT(2), .remap_value = 5},
|
|||
|
};
|
|||
|
|
|||
|
const struct key_remap_data iokey_remap_data = {
|
|||
|
.remap_num = ARRAY_SIZE(iokey_remap_table),
|
|||
|
.table = iokey_remap_table,
|
|||
|
};
|
|||
|
#endif
|
|||
|
|
|||
|
#endif
|
|||
|
|
|||
|
/************************** PWM_LED ****************************/
|
|||
|
#if TCFG_PWMLED_ENABLE
|
|||
|
LED_PLATFORM_DATA_BEGIN(pwm_led_data)
|
|||
|
.io_mode = TCFG_PWMLED_IOMODE, //推灯模式设置:支持单个IO推两个灯和两个IO推两个灯
|
|||
|
.io_cfg.one_io.pin = TCFG_PWMLED_PIN, //单个IO推两个灯的IO口配置
|
|||
|
LED_PLATFORM_DATA_END()
|
|||
|
#endif
|
|||
|
|
|||
|
/************************** norflash ****************************/
|
|||
|
NORFLASH_DEV_PLATFORM_DATA_BEGIN(norflash_fat_dev_data)
|
|||
|
.spi_hw_num = TCFG_FLASH_DEV_SPI_HW_NUM,
|
|||
|
.spi_cs_port = TCFG_FLASH_DEV_SPI_CS_PORT,
|
|||
|
.spi_read_width = 4,
|
|||
|
#if (TCFG_FLASH_DEV_SPI_HW_NUM == 1)
|
|||
|
.spi_pdata = &spi1_p_data,
|
|||
|
#elif (TCFG_FLASH_DEV_SPI_HW_NUM == 2)
|
|||
|
.spi_pdata = &spi2_p_data,
|
|||
|
#endif
|
|||
|
.start_addr = 0,
|
|||
|
.size = 16*1024*1024,
|
|||
|
NORFLASH_DEV_PLATFORM_DATA_END()
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/************************** otg data****************************/
|
|||
|
#if TCFG_OTG_MODE
|
|||
|
struct otg_dev_data otg_data = {
|
|||
|
.usb_dev_en = TCFG_OTG_USB_DEV_EN,
|
|||
|
.slave_online_cnt = TCFG_OTG_SLAVE_ONLINE_CNT,
|
|||
|
.slave_offline_cnt = TCFG_OTG_SLAVE_OFFLINE_CNT,
|
|||
|
.host_online_cnt = TCFG_OTG_HOST_ONLINE_CNT,
|
|||
|
.host_offline_cnt = TCFG_OTG_HOST_OFFLINE_CNT,
|
|||
|
.detect_mode = TCFG_OTG_MODE,
|
|||
|
.detect_time_interval = TCFG_OTG_DET_INTERVAL,
|
|||
|
};
|
|||
|
#endif
|
|||
|
|
|||
|
REGISTER_DEVICES(device_table) = {
|
|||
|
#if TCFG_OTG_MODE
|
|||
|
{ "otg", &usb_dev_ops, (void *) &otg_data},
|
|||
|
#endif
|
|||
|
#if TCFG_CHARGE_ENABLE
|
|||
|
{ "charge", &charge_dev_ops, (void *)&charge_data },
|
|||
|
#endif
|
|||
|
|
|||
|
};
|
|||
|
|
|||
|
void debug_uart_init(const struct uart_platform_data *data)
|
|||
|
{
|
|||
|
#if TCFG_UART0_ENABLE
|
|||
|
if (data) {
|
|||
|
uart_init(data);
|
|||
|
} else {
|
|||
|
uart_init(&uart0_data);
|
|||
|
}
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
static void board_devices_init(void)
|
|||
|
{
|
|||
|
#if TCFG_PWMLED_ENABLE
|
|||
|
pwm_led_init(&pwm_led_data);
|
|||
|
#endif
|
|||
|
|
|||
|
#if (TCFG_IOKEY_ENABLE || TCFG_ADKEY_ENABLE || TCFG_TOUCH_KEY_ENABLE)
|
|||
|
key_driver_init();
|
|||
|
#endif
|
|||
|
|
|||
|
#if TCFG_CHARGE_ENABLE
|
|||
|
charge_api_init(&charge_data);
|
|||
|
#else
|
|||
|
/* CHGBG_EN(0); */
|
|||
|
/* CHARGE_EN(0); */
|
|||
|
#endif
|
|||
|
|
|||
|
#if TCFG_RTC_ALARM_ENABLE
|
|||
|
alarm_init(&rtc_data);
|
|||
|
#endif
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
//maskrom 使用到的io
|
|||
|
static void mask_io_cfg()
|
|||
|
{
|
|||
|
struct boot_soft_flag_t boot_soft_flag = {0};
|
|||
|
boot_soft_flag.flag0.boot_ctrl.wdt_dis = 0;
|
|||
|
boot_soft_flag.flag0.boot_ctrl.poweroff = 0;
|
|||
|
boot_soft_flag.flag0.boot_ctrl.is_port_b = JL_IOMAP->CON0 & BIT(16) ? 1 : 0;
|
|||
|
|
|||
|
boot_soft_flag.flag1.misc.usbdm = SOFTFLAG_HIGH_RESISTANCE;
|
|||
|
boot_soft_flag.flag1.misc.usbdp = SOFTFLAG_HIGH_RESISTANCE;
|
|||
|
|
|||
|
boot_soft_flag.flag1.misc.uart_key_port = 0;
|
|||
|
boot_soft_flag.flag1.misc.ldoin = SOFTFLAG_HIGH_RESISTANCE;
|
|||
|
|
|||
|
boot_soft_flag.flag2.pa7_pb4.pa7 = SOFTFLAG_HIGH_RESISTANCE;
|
|||
|
boot_soft_flag.flag2.pa7_pb4.pb4 = SOFTFLAG_HIGH_RESISTANCE;
|
|||
|
|
|||
|
boot_soft_flag.flag3.pc3_pc5.pc3 = SOFTFLAG_HIGH_RESISTANCE;
|
|||
|
boot_soft_flag.flag3.pc3_pc5.pc5 = SOFTFLAG_HIGH_RESISTANCE;
|
|||
|
mask_softflag_config(&boot_soft_flag);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
extern void cfg_file_parse(u8 idx);
|
|||
|
void board_init()
|
|||
|
{
|
|||
|
board_power_init();
|
|||
|
adc_vbg_init();
|
|||
|
adc_init();
|
|||
|
cfg_file_parse(0);
|
|||
|
devices_init();
|
|||
|
|
|||
|
board_devices_init();
|
|||
|
|
|||
|
if(get_charge_online_flag()) {
|
|||
|
power_set_mode(PWR_LDO15);
|
|||
|
} else {
|
|||
|
power_set_mode(TCFG_LOWPOWER_POWER_SEL);
|
|||
|
}
|
|||
|
|
|||
|
/*close FAST CHARGE */
|
|||
|
#if TCFG_UART0_ENABLE
|
|||
|
if (uart0_data.rx_pin < IO_MAX_NUM) {
|
|||
|
gpio_set_die(uart0_data.rx_pin, 1);
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
enum {
|
|||
|
PORTA_GROUP = 0,
|
|||
|
PORTB_GROUP,
|
|||
|
PORTC_GROUP,
|
|||
|
};
|
|||
|
|
|||
|
static void port_protect(u16 *port_group, u32 port_num)
|
|||
|
{
|
|||
|
if (port_num == NO_CONFIG_PORT) {
|
|||
|
return;
|
|||
|
}
|
|||
|
port_group[port_num / IO_GROUP_NUM] &= ~BIT(port_num % IO_GROUP_NUM);
|
|||
|
}
|
|||
|
|
|||
|
void usb1_iomode(u32 enable);
|
|||
|
/*进软关机之前默认将IO口都设置成高阻状态,需要保留原来状态的请修改该函数*/
|
|||
|
static void close_gpio(void)
|
|||
|
{
|
|||
|
u16 port_group[] = {
|
|||
|
[PORTA_GROUP] = 0x1ff,
|
|||
|
[PORTB_GROUP] = 0x3ff,//
|
|||
|
[PORTC_GROUP] = 0x3ff,//
|
|||
|
};
|
|||
|
|
|||
|
if(P3_ANA_CON2 & BIT(3))
|
|||
|
{
|
|||
|
port_protect(port_group, IO_PORTB_02); //protect VCM_IO
|
|||
|
}
|
|||
|
|
|||
|
#if TCFG_ADKEY_ENABLE
|
|||
|
port_protect(port_group,TCFG_ADKEY_PORT);
|
|||
|
#endif /* */
|
|||
|
|
|||
|
#if TCFG_IOKEY_ENABLE
|
|||
|
port_protect(port_group, TCFG_IOKEY_POWER_ONE_PORT);
|
|||
|
port_protect(port_group, TCFG_IOKEY_PREV_ONE_PORT);
|
|||
|
port_protect(port_group, TCFG_IOKEY_NEXT_ONE_PORT);
|
|||
|
#endif /* TCFG_IOKEY_ENABLE */
|
|||
|
|
|||
|
#if TCFG_RTC_ALARM_ENABLE
|
|||
|
/* port_protect(port_group, IO_PORTA_01); */
|
|||
|
/* port_protect(port_group, IO_PORTA_02); */
|
|||
|
#endif /* TCFG_RTC_ALARM_ENABLE */
|
|||
|
|
|||
|
//< close gpio
|
|||
|
gpio_dir(GPIOA, 0, 9, port_group[PORTA_GROUP], GPIO_OR);
|
|||
|
gpio_set_pu(GPIOA, 0, 9, ~port_group[PORTA_GROUP], GPIO_AND);
|
|||
|
gpio_set_pd(GPIOA, 0, 9, ~port_group[PORTA_GROUP], GPIO_AND);
|
|||
|
gpio_die(GPIOA, 0, 9, ~port_group[PORTA_GROUP], GPIO_AND);
|
|||
|
gpio_dieh(GPIOA, 0, 9, ~port_group[PORTA_GROUP], GPIO_AND);
|
|||
|
|
|||
|
gpio_dir(GPIOB, 0, 10, port_group[PORTB_GROUP], GPIO_OR);
|
|||
|
gpio_set_pu(GPIOB, 0, 10, ~port_group[PORTB_GROUP], GPIO_AND);
|
|||
|
gpio_set_pd(GPIOB, 0, 10, ~port_group[PORTB_GROUP], GPIO_AND);
|
|||
|
gpio_die(GPIOB, 0, 10, ~port_group[PORTB_GROUP], GPIO_AND);
|
|||
|
gpio_dieh(GPIOB, 0, 10, ~port_group[PORTB_GROUP], GPIO_AND);
|
|||
|
|
|||
|
//< close usb io
|
|||
|
usb_iomode(1);
|
|||
|
gpio_set_pull_up(IO_PORT_DP, 0);
|
|||
|
gpio_set_pull_down(IO_PORT_DP, 0);
|
|||
|
gpio_set_direction(IO_PORT_DP, 1);
|
|||
|
gpio_set_die(IO_PORT_DP, 0);
|
|||
|
gpio_set_dieh(IO_PORT_DP, 0);
|
|||
|
|
|||
|
gpio_set_pull_up(IO_PORT_DM, 0);
|
|||
|
gpio_set_pull_down(IO_PORT_DM, 0);
|
|||
|
gpio_set_direction(IO_PORT_DM, 1);
|
|||
|
gpio_set_die(IO_PORT_DM, 0);
|
|||
|
gpio_set_dieh(IO_PORT_DM, 0);
|
|||
|
|
|||
|
usb1_iomode(1);
|
|||
|
gpio_set_pull_up(IO_PORT_DP1, 0);
|
|||
|
gpio_set_pull_down(IO_PORT_DP1, 0);
|
|||
|
gpio_set_direction(IO_PORT_DP1, 1);
|
|||
|
gpio_set_die(IO_PORT_DP1, 0);
|
|||
|
gpio_set_dieh(IO_PORT_DP1, 0);
|
|||
|
|
|||
|
gpio_set_pull_up(IO_PORT_DM1, 0);
|
|||
|
gpio_set_pull_down(IO_PORT_DM1, 0);
|
|||
|
gpio_set_direction(IO_PORT_DM1, 1);
|
|||
|
gpio_set_die(IO_PORT_DM1, 0);
|
|||
|
gpio_set_dieh(IO_PORT_DM1, 0);
|
|||
|
|
|||
|
/* printf("JL_USB_IO->CON0=0x%x\r\n", JL_USB_IO->CON0); */
|
|||
|
/* printf("JL_USB_IO->CON1=0x%x\r\n", JL_USB_IO->CON1); */
|
|||
|
/* printf("JL_USB->CON0=0x%x\r\n", JL_USB->CON0); */
|
|||
|
/* */
|
|||
|
/* printf("JL_USB1_IO->CON0=0x%x\r\n", JL_USB1_IO->CON0); */
|
|||
|
/* printf("JL_USB1_IO->CON1=0x%x\r\n", JL_USB1_IO->CON1); */
|
|||
|
/* printf("JL_USB1->CON0=0x%x\r\n", JL_USB1->CON0); */
|
|||
|
}
|
|||
|
|
|||
|
/************************** PWR config ****************************/
|
|||
|
struct port_wakeup port0 = {
|
|||
|
.pullup_down_enable = ENABLE, //配置I/O 内部上下拉是否使能
|
|||
|
.edge = FALLING_EDGE, //唤醒方式选择,可选:上升沿\下降沿
|
|||
|
.both_edge = 0,
|
|||
|
|
|||
|
#if TCFG_ADKEY_ENABLE
|
|||
|
.iomap = TCFG_ADKEY_PORT, //唤醒口选择
|
|||
|
#else
|
|||
|
.iomap = TCFG_IOKEY_POWER_ONE_PORT, //唤醒口选择
|
|||
|
#endif
|
|||
|
.filter = PORT_FLT_2ms,
|
|||
|
};
|
|||
|
|
|||
|
#if TCFG_TEST_BOX_ENABLE
|
|||
|
struct port_wakeup port1 = {
|
|||
|
.pullup_down_enable = DISABLE, //配置I/O 内部上下拉是否使能
|
|||
|
.edge = FALLING_EDGE, //唤醒方式选择,可选:上升沿\下降沿
|
|||
|
.both_edge = 1,
|
|||
|
.filter = PORT_FLT_1ms,
|
|||
|
.iomap = TCFG_CHARGESTORE_PORT, //唤醒口选择
|
|||
|
};
|
|||
|
#endif
|
|||
|
|
|||
|
#if TCFG_CHARGE_ENABLE
|
|||
|
struct port_wakeup charge_port = {
|
|||
|
.edge = RISING_EDGE, //唤醒方式选择,可选:上升沿\下降沿\双边沿
|
|||
|
.both_edge = 0,
|
|||
|
.filter = PORT_FLT_16ms,
|
|||
|
.iomap = IO_CHGFL_DET, //唤醒口选择
|
|||
|
};
|
|||
|
|
|||
|
struct port_wakeup vbat_port = {
|
|||
|
.edge = BOTH_EDGE, //唤醒方式选择,可选:上升沿\下降沿\双边沿
|
|||
|
.both_edge = 1,
|
|||
|
.filter = PORT_FLT_16ms,
|
|||
|
.iomap = IO_VBTCH_DET, //唤醒口选择
|
|||
|
};
|
|||
|
|
|||
|
struct port_wakeup ldoin_port = {
|
|||
|
.edge = BOTH_EDGE, //唤醒方式选择,可选:上升沿\下降沿\双边沿
|
|||
|
.both_edge = 1,
|
|||
|
.filter = PORT_FLT_16ms,
|
|||
|
.iomap = IO_LDOIN_DET, //唤醒口选择
|
|||
|
};
|
|||
|
#endif
|
|||
|
|
|||
|
const struct wakeup_param wk_param = {
|
|||
|
|
|||
|
#if TCFG_ADKEY_ENABLE || TCFG_IOKEY_ENABLE
|
|||
|
.port[1] = &port0,
|
|||
|
#endif
|
|||
|
/* .sub = &sub_wkup, */
|
|||
|
/* .charge = &charge_wkup, */
|
|||
|
|
|||
|
#if TCFG_TEST_BOX_ENABLE
|
|||
|
.port[2] = &port1,
|
|||
|
#endif
|
|||
|
#if TCFG_CHARGE_ENABLE
|
|||
|
.aport[0] = &charge_port,
|
|||
|
.aport[1] = &vbat_port,
|
|||
|
.aport[2] = &ldoin_port,
|
|||
|
#endif
|
|||
|
|
|||
|
};
|
|||
|
|
|||
|
//-----------------------------------------------
|
|||
|
|
|||
|
|
|||
|
/*进软关机之前默认将IO口都设置成高阻状态,需要保留原来状态的请修改该函数*/
|
|||
|
extern void dac_power_off(void);
|
|||
|
void board_set_soft_poweroff(void)
|
|||
|
{
|
|||
|
log_info("%s",__FUNCTION__);
|
|||
|
mask_io_cfg();
|
|||
|
|
|||
|
#if TCFG_TEST_BOX_ENABLE
|
|||
|
power_wakeup_index_disable(2);
|
|||
|
#endif
|
|||
|
|
|||
|
close_gpio();
|
|||
|
}
|
|||
|
|
|||
|
#define APP_IO_DEBUG_0(i,x) //{JL_PORT##i->DIR &= ~BIT(x), JL_PORT##i->OUT &= ~BIT(x);}
|
|||
|
#define APP_IO_DEBUG_1(i,x) //{JL_PORT##i->DIR &= ~BIT(x), JL_PORT##i->OUT |= BIT(x);}
|
|||
|
|
|||
|
|
|||
|
void sleep_exit_callback(u32 usec)
|
|||
|
{
|
|||
|
putchar('>');
|
|||
|
APP_IO_DEBUG_0(A, 5);
|
|||
|
}
|
|||
|
|
|||
|
void sleep_enter_callback(u8 step)
|
|||
|
{
|
|||
|
/* 此函数禁止添加打印 */
|
|||
|
if (step == 1) {
|
|||
|
putchar('<');
|
|||
|
APP_IO_DEBUG_1(A, 5);
|
|||
|
/*dac_power_off();*/
|
|||
|
} else {
|
|||
|
close_gpio();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void wl_audio_clk_on(void)
|
|||
|
{
|
|||
|
JL_WL_AUD->CON0 = 1;
|
|||
|
}
|
|||
|
|
|||
|
static void port_wakeup_callback(u8 index, u8 gpio)
|
|||
|
{
|
|||
|
/* log_info("%s:%d,%d",__FUNCTION__,index,gpio); */
|
|||
|
|
|||
|
switch (index) {
|
|||
|
#if TCFG_TEST_BOX_ENABLE
|
|||
|
case 2:
|
|||
|
extern void chargestore_ldo5v_fall_deal(void);
|
|||
|
chargestore_ldo5v_fall_deal();
|
|||
|
break;
|
|||
|
#endif
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void aport_wakeup_callback(u8 index, u8 gpio, u8 edge)
|
|||
|
{
|
|||
|
#if TCFG_CHARGE_ENABLE
|
|||
|
switch (gpio) {
|
|||
|
case IO_CHGFL_DET://charge port
|
|||
|
charge_wakeup_isr();
|
|||
|
break;
|
|||
|
case IO_VBTCH_DET://vbat port
|
|||
|
case IO_LDOIN_DET://ldoin port
|
|||
|
ldoin_wakeup_isr();
|
|||
|
break;
|
|||
|
}
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
void board_power_init(void)
|
|||
|
{
|
|||
|
log_info("Power init : %s", __FILE__);
|
|||
|
|
|||
|
power_init(&power_param);
|
|||
|
|
|||
|
//< close short key reset
|
|||
|
/* power_mclr(0); */
|
|||
|
//< close long key reset
|
|||
|
/* power_pin_reset(0); */
|
|||
|
|
|||
|
power_set_callback(TCFG_LOWPOWER_LOWPOWER_SEL, sleep_enter_callback, sleep_exit_callback, board_set_soft_poweroff);
|
|||
|
|
|||
|
// wl_audio_clk_on();
|
|||
|
|
|||
|
power_keep_dacvdd_en(0);
|
|||
|
|
|||
|
power_wakeup_init(&wk_param);
|
|||
|
|
|||
|
aport_edge_wkup_set_callback(aport_wakeup_callback);
|
|||
|
port_edge_wkup_set_callback(port_wakeup_callback);
|
|||
|
|
|||
|
/* #if (!TCFG_IOKEY_ENABLE && !TCFG_ADKEY_ENABLE) */
|
|||
|
/* charge_check_and_set_pinr(0); */
|
|||
|
/* #endif */
|
|||
|
}
|
|||
|
#endif
|