301 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			301 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | 
 | ||
|  | #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 "apb.h"
 | ||
|  | #include "gpio_mtx.h"
 | ||
|  | #include "ledc_hw.h"
 | ||
|  | 
 | ||
|  | 
 | ||
|  | void register_print_by_addr(uint32_t addr, int num); | ||
|  | void delay_sometime(void); | ||
|  | 
 | ||
|  | void ledc_interrrupt_cb(uint8_t port) | ||
|  | { | ||
|  |     iot_printf("port%d done\r\n", port); | ||
|  | } | ||
|  | 
 | ||
|  | //25M
 | ||
|  | int main(void) | ||
|  | { | ||
|  |     uint8_t ch = 0; | ||
|  | 
 | ||
|  |     uint8_t div = 24; | ||
|  |     uint16_t h2l = 1000;  // h2l must large than l2h
 | ||
|  |     uint16_t l2h = 500; | ||
|  |     uint16_t phase1_blink_times = 10; | ||
|  |     uint16_t phase2_blink_times = 15; | ||
|  |     uint16_t thrs = 1000; | ||
|  | 
 | ||
|  |     uint8_t phase_num = PHASE_NUM_TWO; | ||
|  | 
 | ||
|  |     uint8_t phase1_mode = PHASE_MODE_FIXED_DUTY;//PHASE_MODE_DECREASE
 | ||
|  |     uint8_t phase2_mode = PHASE_MODE_DECREASE; | ||
|  | 
 | ||
|  |     uint8_t phase1_scale = 100; | ||
|  |     uint8_t phase2_scale = 100; | ||
|  | 
 | ||
|  |     uint8_t cycle_times = 1; | ||
|  |     uint8_t loop_times = 7; | ||
|  | 
 | ||
|  |     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, NULL); | ||
|  | 
 | ||
|  |     //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_ORIGINAL); | ||
|  |     ledc_idle_level_sel(ch, IDLE_LEVEL_LOW); | ||
|  | 
 | ||
|  |     //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, NULL); | ||
|  | 
 | ||
|  |     //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); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | 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"); | ||
|  | } | ||
|  | 
 | ||
|  | 
 |