102 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* os shim includes */
 | 
						|
#include "os_types.h"
 | 
						|
#include "dbg_io.h"
 | 
						|
#include "iot_io.h"
 | 
						|
#include "gpio_mtx.h"
 | 
						|
#include "pwm.h"
 | 
						|
 | 
						|
 | 
						|
 | 
						|
uint8_t pwm_gpio_sel(uint8_t port, uint8_t pwma, uint8_t pwmb)
 | 
						|
{
 | 
						|
    gpio_mtx_enable();
 | 
						|
    volatile uint8_t pwma_func = 0;
 | 
						|
    volatile uint8_t pwmb_func = 0;
 | 
						|
    pwma_func = gpio_pin_func_get(pwma);
 | 
						|
    pwmb_func = gpio_pin_func_get(pwmb);
 | 
						|
    gpio_sig_info_t info = {0};
 | 
						|
    if (port == PWM_CHANNEL_0) {
 | 
						|
        info.sig_type = 4;
 | 
						|
        info.CFG[0].type = IO_TYPE_OUT;
 | 
						|
        info.CFG[0].func = pwma_func;
 | 
						|
        info.CFG[0].gpio = pwma;
 | 
						|
        info.CFG[0].inid = 0xff;
 | 
						|
        info.CFG[0].outid = 71;
 | 
						|
        info.CFG[1].type = IO_TYPE_OUT;
 | 
						|
        info.CFG[1].func = pwmb_func;
 | 
						|
        info.CFG[1].gpio = pwmb;
 | 
						|
        info.CFG[1].inid = 0xff;
 | 
						|
        info.CFG[1].outid = 72;
 | 
						|
    } else if (port == PWM_CHANNEL_1){
 | 
						|
        info.sig_type = 4;
 | 
						|
        info.CFG[0].type = IO_TYPE_OUT;
 | 
						|
        info.CFG[0].func = pwma_func;
 | 
						|
        info.CFG[0].gpio = pwma;
 | 
						|
        info.CFG[0].inid = 0xff;
 | 
						|
        info.CFG[0].outid = 73;
 | 
						|
        info.CFG[1].type = IO_TYPE_OUT;
 | 
						|
        info.CFG[1].func = pwmb_func;
 | 
						|
        info.CFG[1].gpio = pwmb;
 | 
						|
        info.CFG[1].inid = 0xff;
 | 
						|
        info.CFG[1].outid = 74;
 | 
						|
    }else if (port == PWM_CHANNEL_2){
 | 
						|
        info.sig_type = 4;
 | 
						|
        info.CFG[0].type = IO_TYPE_OUT;
 | 
						|
        info.CFG[0].func = pwma_func;
 | 
						|
        info.CFG[0].gpio = pwma;
 | 
						|
        info.CFG[0].inid = 0xff;
 | 
						|
        info.CFG[0].outid = 75;
 | 
						|
        info.CFG[1].type = IO_TYPE_OUT;
 | 
						|
        info.CFG[1].func = pwmb_func;
 | 
						|
        info.CFG[1].gpio = pwmb;
 | 
						|
        info.CFG[1].inid = 0xff;
 | 
						|
        info.CFG[1].outid = 76;
 | 
						|
    }
 | 
						|
 | 
						|
    gpio_module_pin_select(&info);
 | 
						|
    gpio_module_sig_select(&info, GPIO_MTX_MODE_MATRIX);
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void pwm_main(void)
 | 
						|
{
 | 
						|
    volatile uint32_t delay =0;
 | 
						|
    uint8_t duty = 0;
 | 
						|
 | 
						|
    dbg_uart_init();
 | 
						|
 | 
						|
    pwm_gpio_sel( 0, 37, 38);
 | 
						|
    pwm_init();
 | 
						|
    pwm_open(0, NULL);
 | 
						|
 | 
						|
    while(1)
 | 
						|
    {
 | 
						|
        for(duty = 0; duty <= 100; duty += 5)
 | 
						|
        {
 | 
						|
            pwm_set_duty(PWM_CHANNEL_0, duty * 100);
 | 
						|
            iot_printf("PWM Duty: %d%%\r\n",duty);
 | 
						|
            delay = 10000000;
 | 
						|
            while(delay--);
 | 
						|
        }
 | 
						|
 | 
						|
        for(duty = 100; duty > 0; duty -= 5)
 | 
						|
        {
 | 
						|
            pwm_set_duty(PWM_CHANNEL_1, duty * 100);
 | 
						|
            iot_printf("PWM Duty: %d%%\r\n",duty);
 | 
						|
            delay = 10000000;
 | 
						|
            while(delay--);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#ifdef __GNUC__
 | 
						|
 | 
						|
int main(void) {
 | 
						|
    pwm_main();
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
#endif // __GCC__
 | 
						|
 | 
						|
 |