工具与软件:
尊敬的团队:
我将使用 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。

