工具与软件:
尊敬的团队:
我将使用 LGPTimer 驱动程序输出3通道 PWM。
如何控制单个 PWM 通道? 具体来说、在配置 LGPTimer 参数并调用LGPTimerLPF3_open
以初始化驱动程序后、所有三个 PWM 通道都处于活动状态。 但是、在某些时候、我需要禁用其中一个通道(例如、禁用通道2)。
我需要直接控制寄存器、请查看下面的代码。 是否推荐使用此方法实现此功能?
LGPTimerLPF3_Handle lgptHandle; LGPTimerLPF3_Params params; uint32_t cntTargetVal = 48000 / 2; // 1kHz PWM count in crystal of 48 MHz uint32_t chCompVal0 = cntTargetVal/2; // duty of 50% uint32_t chCompVal1 = cntTargetVal - cntTargetVal/10; // duty of 10% uint32_t chCompVal2 = cntTargetVal - cntTargetVal/20; // duty of 5% // Configure channels action LGPTimerLPF3_Params_init(¶ms); params.channelProperty[0].action = LGPTimerLPF3_CH_TOGGLE_ON_COMPARE_PERIODIC; params.channelProperty[1].action = LGPTimerLPF3_CH_TOGGLE_ON_COMPARE_PERIODIC; params.channelProperty[2].action = LGPTimerLPF3_CH_TOGGLE_ON_COMPARE_PERIODIC; // Open driver lgptHandle = LGPTimerLPF3_open(0, ¶ms); // Set channel output signal period LGPTimerLPF3_setInitialCounterTarget(lgptHandle, cntTargetVal, false); // Set channel output signal duty cycle LGPTimerLPF3_setInitialChannelCompVal(lgptHandle, LGPTimerLPF3_CH_NO_0, chCompVal0, false); LGPTimerLPF3_setInitialChannelCompVal(lgptHandle, LGPTimerLPF3_CH_NO_1, chCompVal1, false); LGPTimerLPF3_setInitialChannelCompVal(lgptHandle, LGPTimerLPF3_CH_NO_2, chCompVal2, false); // Start the LGPTimer in up-down-periodic mode LGPTimerLPF3_start(lgptHandle, LGPTimerLPF3_CTL_MODE_UPDWN_PER); while(1) { usleep(100000); // Disable HWREG(LGPT3_BASE | 0x000000C8) &= 0xFFFFFFF0; usleep(100000); // Enable HWREG(LGPT3_BASE | 0x000000C8) |= 0x0000000E; }
谢谢。
BR、
Connor。