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__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |