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