#include "iot_bitops.h" #include "dtest_printf.h" #include "cpu.h" #include "ahb.h" #if HW_PLATFORM > HW_PLATFORM_SIMU #include "dbg_io.h" #endif #include "chip_reg_base.h" #include "ahb_rf_s.h" #include "uart.h" #include "strformat.h" #include "uart_e.h" #include "iot_irq.h" #include "dev_spinlock.h" #include "apb.h" #include "gpio_mtx.h" #include "ledc_hw.h" #include "watchdog.h" #include "gp_timer.h" #include "iot_clock.h" #include "iot_led.h" void register_print_by_addr(uint32_t addr, int num); void delay_sometime(void); void wdt_cpu_reset_test(LEDC_PORT ch); void wdt_full_reset_test(LEDC_PORT ch); void software_rst_test(LEDC_PORT ch); void led_hal_test(void); void ledc_interrrupt_cb(uint8_t port) { iot_printf("port%d done\r\n", port); } typedef struct ledc_para_t { uint16_t div;//uint32_t clk_period; uint16_t l2h_point; uint16_t h2l_point; uint16_t phase1_blink_times; uint16_t phase2_blink_times; uint16_t thrs; uint8_t phase_num; uint8_t phase1_mode; uint8_t phase2_mode; uint8_t phase1_scale; uint8_t phase2_scale; uint8_t cycle_times; uint8_t loop_times; uint16_t nop_num; }ledc_para_s; void start_ledc(uint8_t ch) { ledc_cnt_ena(ch, LEDC_ENA_ENABLE); } void stop_ledc(uint8_t ch) { ledc_cnt_ena(ch, LEDC_ENA_DISABLE); } void config_ledc(uint8_t ch, ledc_para_s * para) { //中断初始化 ledc_interrupt_init(ch, ledc_interrrupt_cb); //2 ledc_timer_rst(ch); ledc_timer_init(ch, para->div); // 24 --> 1M ledc_timer_ctrl(ch, TIMER_CTRL_START); //3 ledc_polarity_sel(ch, OUT_POL_ORIGINAL);//OUT_POL_INVERT); ledc_idle_level_sel(ch, IDLE_LEVEL_LOW);//IDLE_LEVEL_HIGH); //4 ledc_h2l_point_set(ch, para->h2l_point); ledc_l2h_point_set(ch, para->l2h_point); //5 ledc_phase1_blink_times_set(ch, para->phase1_blink_times); // thrs/scale ledc_phase2_blink_times_set(ch, para->phase2_blink_times); //6 ledc_duty_cnt_sel(ch, DUTY_CNT_OWN); ledc_thrs_set(ch, para->thrs); // 1000 -> 1k //7 ledc_phase_opt_sel(ch, DUTY_OPT_MODE_NEW); ledc_phase_num_sel(ch, para->phase_num); ledc_phase1_mode_sel(ch, para->phase1_mode); ledc_phase2_mode_sel(ch, para->phase2_mode); ledc_phase1_scale_set(ch, para->phase1_scale); ledc_phase2_scale_set(ch, para->phase2_scale); ledc_cycle_times_set(ch, para->cycle_times); ledc_loop_times_set(ch, para->loop_times); ledc_nop_num_set(ch, para->nop_num); } void delay(int times) { for(int i = 0; i < times; i++) { delay_sometime(); } } ledc_para_s para_table[] = { {//0 .div = 24, .h2l_point = 999, .l2h_point = 500, .phase1_blink_times = 50, .phase2_blink_times = 50, .thrs = 999, .phase_num = PHASE_NUM_ONE, .phase1_mode = PHASE_MODE_INCREASE, .phase2_mode = PHASE_MODE_INCREASE, .phase1_scale = 15, .phase2_scale = 20, .cycle_times = 3, .loop_times = 7, .nop_num = 200, }, {//1 .div = 24, .h2l_point = 1000, .l2h_point = 500, .phase1_blink_times = 10, .phase2_blink_times = 10, .thrs = 1000, .phase_num = PHASE_NUM_TWO, .phase1_mode = PHASE_MODE_INCREASE, .phase2_mode = PHASE_MODE_DECREASE, .phase1_scale = 50, .phase2_scale = 50, .cycle_times = 3, .loop_times = 7, .nop_num = 200, }, {//2 .div = 24, .h2l_point = 1000, .l2h_point = 500, .phase1_blink_times = 10, .phase2_blink_times = 10, .thrs = 1000, .phase_num = PHASE_NUM_TWO, .phase1_mode = PHASE_MODE_INCREASE, .phase2_mode = PHASE_MODE_DECREASE, .phase1_scale = 50, .phase2_scale = 100, .cycle_times = 3, .loop_times = 7, .nop_num = 200, }, {//3 .div = 24, .h2l_point = 1000, .l2h_point = 500, .phase1_blink_times = 10, .phase2_blink_times = 10, .thrs = 1000, .phase_num = PHASE_NUM_TWO, .phase1_mode = PHASE_MODE_INCREASE, .phase2_mode = PHASE_MODE_DECREASE, .phase1_scale = 50, .phase2_scale = 25, .cycle_times = 3, .loop_times = 7, .nop_num = 200, }, {//4 .div = 24, .h2l_point = 1000, .l2h_point = 500, .phase1_blink_times = 10, .phase2_blink_times = 10, .thrs = 1000, .phase_num = PHASE_NUM_TWO, .phase1_mode = PHASE_MODE_INCREASE, .phase2_mode = PHASE_MODE_INCREASE, .phase1_scale = 50, .phase2_scale = 25, .cycle_times = 3, .loop_times = 7, .nop_num = 200, }, {//5 .div = 24, .h2l_point = 1000, .l2h_point = 250, .phase1_blink_times = 10, .phase2_blink_times = 10, .thrs = 1000, .phase_num = PHASE_NUM_TWO, .phase1_mode = PHASE_MODE_FIXED_DUTY, .phase2_mode = PHASE_MODE_INCREASE, .phase1_scale = 50, .phase2_scale = 25, .cycle_times = 3, .loop_times = 7, .nop_num = 200, }, {//6 .div = 24, .h2l_point = 1000, .l2h_point = 250, .phase1_blink_times = 10, .phase2_blink_times = 10, .thrs = 1000, .phase_num = PHASE_NUM_TWO, .phase1_mode = PHASE_MODE_FIXED_DUTY, .phase2_mode = PHASE_MODE_INCREASE, .phase1_scale = 50, .phase2_scale = 150, .cycle_times = 5, .loop_times = 7, .nop_num = 200, }, {//7 .div = 24, .h2l_point = 1000, .l2h_point = 250, .phase1_blink_times = 10, .phase2_blink_times = 10, .thrs = 1000, .phase_num = PHASE_NUM_TWO, .phase1_mode = PHASE_MODE_FIXED_DUTY, .phase2_mode = PHASE_MODE_DECREASE, .phase1_scale = 50, .phase2_scale = 150, .cycle_times = 5, .loop_times = 7, .nop_num = 200, }, {//8 .div = 24, .h2l_point = 1000, .l2h_point = 250, .phase1_blink_times = 20, .phase2_blink_times = 15, .thrs = 1000, .phase_num = PHASE_NUM_TWO, .phase1_mode = PHASE_MODE_INCREASE, .phase2_mode = PHASE_MODE_DECREASE, .phase1_scale = 100, .phase2_scale = 100, .cycle_times = 5, .loop_times = 7, .nop_num = 200, }, {//9 .div = 24, .h2l_point = 1000, .l2h_point = 250, .phase1_blink_times = 20, .phase2_blink_times = 15, .thrs = 1000, .phase_num = PHASE_NUM_TWO, .phase1_mode = PHASE_MODE_INCREASE, .phase2_mode = PHASE_MODE_FIXED_DUTY, .phase1_scale = 100, .phase2_scale = 100, .cycle_times = 5, .loop_times = 7, .nop_num = 200, }, }; extern struct uart_ctrl uart_e_ctrl; void mode_switch_test(int ch) { ledc_para_s para_flash; ledc_para_s para_dark2light_breath; ledc_para_s para_light2dark_breath; ledc_para_s light2dark_flash; ledc_para_s dark2light_flash; //----------------------------- para_flash.div = 249; // 100k para_flash.l2h_point = 20000; para_flash.h2l_point = 40000; para_flash.phase1_blink_times = 10; para_flash.phase2_blink_times = 10; para_flash.thrs = 40000; // 5hz para_flash.phase_num = PHASE_NUM_TWO; para_flash.phase1_mode = PHASE_MODE_FIXED_DUTY; para_flash.phase2_mode = PHASE_MODE_FIXED_DUTY; para_flash.phase1_scale = 200; para_flash.phase2_scale = 200; para_flash.cycle_times = 70; para_flash.loop_times = 10; para_flash.nop_num = 10; //---------------------------------------------- para_light2dark_breath.div = 24; // 100k para_light2dark_breath.l2h_point = 10000; para_light2dark_breath.h2l_point = 20000; para_light2dark_breath.phase1_blink_times = 100; para_light2dark_breath.phase2_blink_times = 100; para_light2dark_breath.thrs = 20000; // 5hz para_light2dark_breath.phase_num = PHASE_NUM_TWO; para_light2dark_breath.phase1_mode = PHASE_MODE_INCREASE; para_light2dark_breath.phase2_mode = PHASE_MODE_DECREASE; para_light2dark_breath.phase1_scale = 200; para_light2dark_breath.phase2_scale = 200; para_light2dark_breath.cycle_times = 70; para_light2dark_breath.loop_times = 10; para_light2dark_breath.nop_num = 10; //---------------------------------------------- para_dark2light_breath.div = 24; // 100k para_dark2light_breath.l2h_point = 10000; para_dark2light_breath.h2l_point = 20000; para_dark2light_breath.phase1_blink_times = 100; para_dark2light_breath.phase2_blink_times = 100; para_dark2light_breath.thrs = 20000; // 5hz para_dark2light_breath.phase_num = PHASE_NUM_TWO; para_dark2light_breath.phase1_mode = PHASE_MODE_DECREASE; para_dark2light_breath.phase2_mode = PHASE_MODE_INCREASE; para_dark2light_breath.phase1_scale = 200; para_dark2light_breath.phase2_scale = 200; para_dark2light_breath.cycle_times = 70; para_dark2light_breath.loop_times = 10; para_dark2light_breath.nop_num = 10; //---------------------------------------------- light2dark_flash.div = 24; // 100k light2dark_flash.l2h_point = 10000; light2dark_flash.h2l_point = 20000; light2dark_flash.phase1_blink_times = 100; light2dark_flash.phase2_blink_times = 100; light2dark_flash.thrs = 20000; // 5hz light2dark_flash.phase_num = PHASE_NUM_ONE; light2dark_flash.phase1_mode = PHASE_MODE_INCREASE; light2dark_flash.phase2_mode = PHASE_MODE_FIXED_DUTY; light2dark_flash.phase1_scale = 200; light2dark_flash.phase2_scale = 200; light2dark_flash.cycle_times = 70; light2dark_flash.loop_times = 10; light2dark_flash.nop_num = 10; //---------------------------------------------- dark2light_flash.div = 24; // 100k dark2light_flash.l2h_point = 10000; dark2light_flash.h2l_point = 20000; dark2light_flash.phase1_blink_times = 100; dark2light_flash.phase2_blink_times = 100; dark2light_flash.thrs = 20000; // 5hz dark2light_flash.phase_num = PHASE_NUM_ONE; dark2light_flash.phase1_mode = PHASE_MODE_DECREASE; dark2light_flash.phase2_mode = PHASE_MODE_FIXED_DUTY; dark2light_flash.phase1_scale = 200; dark2light_flash.phase2_scale = 200; dark2light_flash.cycle_times = 70; dark2light_flash.loop_times = 10; dark2light_flash.nop_num = 10; for(;;) { stop_ledc(ch); config_ledc(ch, ¶_flash); start_ledc(ch); delay(100); stop_ledc(ch); config_ledc(ch, ¶_dark2light_breath); start_ledc(ch); delay(100); stop_ledc(ch); config_ledc(ch, ¶_light2dark_breath); start_ledc(ch); delay(100); stop_ledc(ch); config_ledc(ch, &light2dark_flash); start_ledc(ch); delay(100); stop_ledc(ch); config_ledc(ch, &dark2light_flash); start_ledc(ch); delay(100); } } #define foreach(times, statement) \ for(int __i__ = 0; __i__ < times; __i__ ++) { \ statement \ } void wdt_reset_test() { } uint8_t g_pin_table[] = { 26, // j208 8 27, // j208 7 28, // j208 10 9, // j204 19 12, // 38 11, // 36 39, // 10 8, // j213 T1 只能作为输出 7 // R1 只能作为输入 }; /* cmd ch gpio 00 00 08 以para_table[0]为参数进行测试对LEDC0进行测试,波形从GPIO8输出 00 01 08 以para_table[1]为参数进行测试对LEDC1进行测试,波形从GPIO8输出 02 02 08 以para_table[2]为参数进行测试对LEDC2进行测试,波形从GPIO8输出 55 00 08 LEDC0 动态模式切换测试,波形从GPIO8输出 56 01 08 LEDC1 看门狗cputrst测试,波形从GPIO8输出 57 full rst 其他同上 58 software rst */ extern void _start(void); int main(void) { iot_interrupt_init(0); dbg_uart_init(); iot_printf("total paras = %d\r\n", sizeof(para_table)/sizeof(para_table[0]) ); ahb_core0_set_start((uint32_t) _start); volatile int i = 0; while(1) { if (uart_e_ctrl.rx_fifo_cnt(UART_PT0) > 2) { int c = uart_e_ctrl.getc(UART_PT0); int ch = uart_e_ctrl.getc(UART_PT0); int gpio = 8; gpio = uart_e_ctrl.getc(UART_PT0); iot_printf("cmd=%d,ch=%d;gpio=%d\r\n", c, ch, gpio); if (c == 0x59) { iot_printf("entry mode led hal test \r\n"); led_hal_test(); } ledc_ena_rst(); ledc_gpio_config(ch, gpio); //中断初始化 ledc_interrupt_init(ch, ledc_interrrupt_cb); if (c >=0 && c <= sizeof(para_table)/sizeof(para_table[0])) { iot_printf("use para %d testig\r\n", c); stop_ledc(ch); config_ledc(ch, ¶_table[c]); start_ledc(ch); } else if(c == 0x55) { iot_printf("entry mode switch test dead loop\r\n"); mode_switch_test(ch); } else if( c == 0x56) { iot_printf("entry mode wdt cpu rst test \r\n"); wdt_cpu_reset_test(ch); } else if (c == 0x57) { iot_printf("entry mode wdt full rst test \r\n"); wdt_full_reset_test(ch); } else if (c == 0x58) { iot_printf("entry mode software rst test \r\n"); software_rst_test(ch); } }else { i ++; if (i >= 100000) { //iot_printf("wait cmd\r\n"); i = 0; } } } } //中断测试 //25M int main3(void) { uint8_t ch = 0; uint8_t div = 24; // 1M uint16_t h2l = 20000; // h2l must large than l2h uint16_t l2h = 5000; uint16_t phase1_blink_times = 100; uint16_t phase2_blink_times = 100; uint16_t thrs = 20000; uint8_t phase_num = PHASE_NUM_TWO; uint8_t phase1_mode = PHASE_MODE_INCREASE;//PHASE_MODE_FIXED_DUTY;//PHASE_MODE_DECREASE uint8_t phase2_mode = PHASE_MODE_DECREASE; uint8_t phase1_scale = 200; uint8_t phase2_scale = 200; uint8_t cycle_times = 70; uint8_t loop_times = 1; uint16_t nop_num = 200; dbg_uart_init(); iot_interrupt_init(); ledc_ena_rst(); ledc_gpio_config(ch, 26); //1 ledc_cnt_ena(ch, LEDC_ENA_DISABLE); //中断初始化 ledc_interrupt_init(ch, ledc_interrrupt_cb); //2 ledc_timer_rst(ch); ledc_timer_init(ch, div); // 24 --> 1M ledc_timer_ctrl(ch, TIMER_CTRL_START); //3 ledc_polarity_sel(ch, OUT_POL_INVERT); ledc_idle_level_sel(ch, IDLE_LEVEL_HIGH); //4 ledc_h2l_point_set(ch, h2l); ledc_l2h_point_set(ch, l2h); //5 ledc_phase1_blink_times_set(ch, phase1_blink_times); // thrs/scale ledc_phase2_blink_times_set(ch, phase2_blink_times); //6 ledc_duty_cnt_sel(ch, DUTY_CNT_OWN); ledc_thrs_set(ch, thrs); // 1000 -> 1k //7 ledc_phase_opt_sel(ch, DUTY_OPT_MODE_NEW); ledc_phase_num_sel(ch, phase_num); ledc_phase1_mode_sel(ch, phase1_mode); ledc_phase2_mode_sel(ch, phase2_mode); ledc_phase1_scale_set(ch, phase1_scale); ledc_phase2_scale_set(ch, phase2_scale); ledc_cycle_times_set(ch, cycle_times); ledc_loop_times_set(ch, loop_times); ledc_nop_num_set(ch, nop_num); // ledc_cnt_ena(ch, LEDC_ENA_ENABLE); //1.5.3 //////////////////////////////////////////////////////////////////////// ch = 2; ledc_gpio_config(ch, 27); //1 ledc_cnt_ena(ch, LEDC_ENA_DISABLE); //中断初始化 ledc_interrupt_init(ch, ledc_interrrupt_cb); //2 ledc_timer_rst(ch); ledc_timer_init(ch, 4); // 24 --> 1M ledc_timer_ctrl(ch, TIMER_CTRL_START); //3 ledc_polarity_sel(ch, OUT_POL_ORIGINAL); ledc_idle_level_sel(ch, IDLE_LEVEL_LOW); //4 ledc_h2l_point_set(ch, 500); ledc_l2h_point_set(ch, 250); //5 ledc_phase1_blink_times_set(ch, 50); // thrs/scale ledc_phase2_blink_times_set(ch, 50); //6 ledc_duty_cnt_sel(ch, DUTY_CNT_OWN); ledc_thrs_set(ch, 1000); // 1000 -> 500hz //7 ledc_phase_opt_sel(ch, DUTY_OPT_MODE_NEW); ledc_phase_num_sel(ch, PHASE_NUM_TWO); ledc_phase1_mode_sel(ch, PHASE_MODE_INCREASE); ledc_phase2_mode_sel(ch, PHASE_MODE_FIXED_DUTY); ledc_phase1_scale_set(ch, 10); ledc_phase2_scale_set(ch, 20); ledc_cycle_times_set(ch, 10); ledc_loop_times_set(ch, 10); ledc_nop_num_set(ch, 200); // ledc_cnt_ena(ch, LEDC_ENA_ENABLE); while(1) { delay_sometime(); delay_sometime(); //LEDC0->ledc0_conf._b.ledc0_idle_lv = 1; delay_sometime(); delay_sometime(); //LEDC0->ledc0_conf._b.ledc0_idle_lv = 0; register_print_by_addr(LEDC_REG_BASEADDR | (0x200 << 0), 8); register_print_by_addr(LEDC_REG_BASEADDR | (0x600 << 0), 4); } return 0; } int main2(void) { uint8_t ch = 0; uint8_t div = 24; uint16_t h2l[4] = {997, 998, 999, 1000}; uint16_t l2h[4] = {497, 498, 499, 500}; uint16_t phase1_blink_times[4] = {10, 10, 10, 10}; uint16_t phase2_blink_times[4] = {5, 5, 5, 5}; uint16_t thrs = 1000; uint8_t phase_num[4] = {PHASE_NUM_ONE, PHASE_NUM_ONE, PHASE_NUM_ONE, PHASE_NUM_ONE}; uint8_t phase1_mode[4] = {PHASE_MODE_FIXED_DUTY, PHASE_MODE_FIXED_DUTY, PHASE_MODE_FIXED_DUTY, PHASE_MODE_FIXED_DUTY}; uint8_t phase2_mode[4] = {PHASE_MODE_DECREASE, PHASE_MODE_DECREASE, PHASE_MODE_DECREASE, PHASE_MODE_DECREASE}; uint8_t phase1_scale[4] = {100, 100, 100, 100}; uint8_t phase2_scale[4] = {100, 100, 100, 100}; uint8_t cycle_times[4] = {1, 1, 1, 1}; uint8_t loop_times[4] = {7, 7, 7, 7}; uint16_t nop_num[4]= {200, 200, 200, 200}; dbg_uart_init(); ledc_ena_rst(); //2 int common_timer = 0; ledc_timer_rst(common_timer); ledc_timer_init(common_timer, div); // 24 --> 1M ledc_timer_ctrl(common_timer, TIMER_CTRL_START); common_timer = 1; ledc_timer_rst(common_timer); ledc_timer_init(common_timer, div * 2); // 24 --> 1M ledc_timer_ctrl(common_timer, TIMER_CTRL_START); ledc_common_cnt_ena(LEDC_ENA_DISABLE); for (ch = 0; ch <=3; ch++) { ledc_gpio_config(ch, 26 + ch); //1 ledc_cnt_ena(ch, LEDC_ENA_DISABLE); //3 ledc_polarity_sel(ch, OUT_POL_ORIGINAL); ledc_idle_level_sel(ch, IDLE_LEVEL_LOW); //4 ledc_h2l_point_set(ch, h2l[ch]); ledc_l2h_point_set(ch, l2h[ch]); //5 ledc_phase1_blink_times_set(ch, phase1_blink_times[ch]); // thrs/scale ledc_phase2_blink_times_set(ch, phase2_blink_times[ch]); //6 ledc_duty_cnt_sel(ch, DUTY_CNT_COMMON); ledc_thrs_set(ch, thrs); // 1000 -> 1k //7 ledc_phase_opt_sel(ch, DUTY_OPT_MODE_NEW); ledc_phase_num_sel(ch, phase_num[ch]); ledc_phase1_mode_sel(ch, phase1_mode[ch]); ledc_phase2_mode_sel(ch, phase2_mode[ch]); ledc_phase1_scale_set(ch, phase1_scale[ch]); ledc_phase2_scale_set(ch, phase2_scale[ch]); ledc_cycle_times_set(ch, cycle_times[ch]); ledc_loop_times_set(ch, loop_times[ch]); ledc_nop_num_set(ch, nop_num[ch]); // ledc_cnt_ena(ch, LEDC_ENA_ENABLE); delay_sometime(); } ledc_common_thrs_set(thrs); ledc_common_timer_sel(COMMON_TIMER_SEL_0); ledc_common_cnt_ena(LEDC_ENA_ENABLE); while(1) { delay_sometime(); delay_sometime(); delay_sometime(); delay_sometime(); register_print_by_addr(LEDC_REG_BASEADDR , 3); register_print_by_addr(LEDC_REG_BASEADDR | (0x200 << 0), 8); register_print_by_addr(LEDC_REG_BASEADDR | (0x600 << 0), 4); } } uint32_t *p_data = (uint32_t *)0x10038004; void wdt_cpu_reset_test(LEDC_PORT ch) { /*这配置一个比较长的波形输出,然后复位,看是否有影响*/ ledc_para_s para = { .div = 240, // 240 对应时钟频率 100k .h2l_point = 1000, .l2h_point = 500, .phase1_blink_times = 50, .phase2_blink_times = 50, .thrs = 1000, // 结合上面分频是240,则输出的波形的频率为100hz .phase_num = PHASE_NUM_ONE, .phase1_mode = PHASE_MODE_INCREASE, .phase2_mode = PHASE_MODE_INCREASE, .phase1_scale = 15, .phase2_scale = 20, .cycle_times = 3, .loop_times = 7, .nop_num = 200, }; uint32_t cur_cpu = cpu_get_mhartid(); wdg_deinit(cur_cpu); wdg_init(cur_cpu); wdg_set_cmp(cur_cpu, 32768);//SET_WDG_INTC_CMP); wdg_set_timeout_cmp(cur_cpu, 255);//SET_WDG_TIMEOUT_CMP); wdg_set_cpurst_cmp(cur_cpu, 3);//SET_WDG_CPURST_CMP ); wdg_set_fullrst_cmp(cur_cpu, 250);//SET_WDG_FULLRST_CMP); if (0xabcdaabb == (*p_data)) { iot_printf("wdg cpu rst\r\n"); } else { iot_printf("pow on rst\r\n"); (*p_data) = 0xabcdaabb; stop_ledc(ch); config_ledc(ch, ¶); start_ledc(ch); } } void wdt_full_reset_test(LEDC_PORT ch) { /*这配置一个比较长的波形输出,然后复位,看是否有影响*/ ledc_para_s para = { .div = 240, // 240 对应时钟频率 100k .h2l_point = 1000, .l2h_point = 500, .phase1_blink_times = 50, .phase2_blink_times = 50, .thrs = 1000, // 结合上面分频是240,则输出的波形的频率为100hz .phase_num = PHASE_NUM_ONE, .phase1_mode = PHASE_MODE_INCREASE, .phase2_mode = PHASE_MODE_INCREASE, .phase1_scale = 15, .phase2_scale = 20, .cycle_times = 3, .loop_times = 7, .nop_num = 200, }; uint32_t cur_cpu = cpu_get_mhartid(); wdg_deinit(cur_cpu); wdg_init(cur_cpu); wdg_set_cmp(cur_cpu, 32768);//SET_WDG_INTC_CMP); wdg_set_timeout_cmp(cur_cpu, 255);//SET_WDG_TIMEOUT_CMP); wdg_set_cpurst_cmp(cur_cpu, 250);//SET_WDG_CPURST_CMP ); wdg_set_fullrst_cmp(cur_cpu, 3);//SET_WDG_FULLRST_CMP); if (0xabcdaabb == (*p_data)) { iot_printf("wdg full rst\r\n"); } else { iot_printf("pow on rst\r\n"); (*p_data) = 0xabcdaabb; stop_ledc(ch); config_ledc(ch, ¶); start_ledc(ch); } } void software_rst_test(LEDC_PORT ch) { /*这配置一个比较长的波形输出,然后复位,看是否有影响*/ ledc_para_s para = { .div = 240, // 240 对应时钟频率 100k .h2l_point = 1000, .l2h_point = 500, .phase1_blink_times = 50, .phase2_blink_times = 50, .thrs = 1000, // 结合上面分频是240,则输出的波形的频率为100hz .phase_num = PHASE_NUM_ONE, .phase1_mode = PHASE_MODE_INCREASE, .phase2_mode = PHASE_MODE_INCREASE, .phase1_scale = 15, .phase2_scale = 20, .cycle_times = 3, .loop_times = 7, .nop_num = 200, }; gp_timer_init(); gp_timer_set(0, 0xffffffff, 0); gp_timer_start(0); stop_ledc(ch); config_ledc(ch, ¶); start_ledc(ch); iot_delay_us(500000); apb_glb_chip_rst(); } #include "iot_led.h" void led_hal_test(void) { iot_led_init(); iot_led_blink(0, 15); iot_led_set_blink_interval(1000); iot_led_enable_blink(1); while(1) { } } void register_print_by_addr(uint32_t addr, int num) { volatile uint32_t *p_addr = (volatile uint32_t *)addr; iot_printf("base=%08x:", addr); for(int i = 0; i < num; i++) { iot_printf("%02x=%08x,", (uint32_t)p_addr & 0xff, *p_addr); p_addr ++; } iot_printf("\r\n"); } void delay_sometime(void) { uint32_t loop; loop = 0; while(loop++ < 1000000) __asm volatile ("nop\n"); }