工具与软件:
您好!
我正在尝试在我的电路板和项目上使用 ECAP (外设#1、而不是#0)。
与 SDK 示例工程不同、我不使用 ISR 函数。
我尝试进行了一些健全性测试、但与示例输出不同、结果有些奇怪。
我已将引脚 C17 (MCAN1_TX)配置 为模式2 - APWM_ECAP1。
我将使用信号发生器在50%和25%占空比下生成1kHz 方波脉冲(2个不同的测试用例)。
这是我的配置代码:
/*禁用 CAP1-CAP4寄存器加载*/
ECAP_captureLoadingDisable (gEcapBaseAddr);
/*配置 eCAP */
ECAP_counterControl (gEcapBaseAddr、ECAP_COUNTER_STOP);
/*启用捕获模式*/
ECAP_operatingModeSelect (gEcapBaseAddr、ECAP_CAPTURE_MODE);
/*单次触发模式、在事件4时停止捕捉*/
ECAP_oneShotModeConfig (gEcapBaseAddr、ECAP_CAPTURE_EVENT4_STOP);
// ecap_Continuous ModeConfig (gEcapBaseAddr);
/*将事件的极性设置为上升、下降、上升、下降沿*/
ECAP_captureEvtPolarityConfig (gEcapBaseAddr、
ecap_capture_event_rising、
ecap_capture_event_falling、
ecap_capture_event_rising、
ecap_capture_event_falling);
/*在时间差模式下设置捕获*/
ECAP_captureEvtCntRstConfig (gEcapBaseAddr、
ecap_capture_event_reset_counter_reset、
ecap_capture_event_reset_counter_reset、
ecap_capture_event_reset_counter_reset、
ecap_capture_event_reset_counter_reset);
ECAP_counterControl (gEcapBaseAddr、ECAP_COUNTER_FREE_RUNNING);
ECAP_syncInOutSelect (gEcapBaseAddr、ECAP_ENABLE_COUNTER、ECAP_SYNC_IN);
/*启用 eCAP 模块*/
ECAP_captureLoadingEnable (gEcapBaseAddr);
但是-使用时未获得正确的结果:
ECAP_oneShotReArm (gAcapBaseAddr);
#### 假设寄存器加载###时存在延迟
/*读取计数器值并打印最后一次迭代。 */
cap1Count = ECAP_timeStampRead (gEcapBaseAddr、ECAP_CAPTURE_EVENT_1);
cap2Count = ECAP_timeStampRead (gEcapBaseAddr、ECAP_CAPTURE_EVENT_2);
cap3Count = ECAP_timeStampRead (gEcapBaseAddr、ECAP_CAPTURE_EVENT_3);
cap4Count = ECAP_timeStampRead (gEcapBaseAddr、ECAP_CAPTURE_EVENT_4);
cap1Count 有时显示不合理的值、如200,000,000。
此外、我还希望在50% PWM 的情况下、上升沿/下降沿的值相等、但实际上并非如此、
在25%的情况下-没有与50% DC 情况非常相似的数据一致性。
另请注意、APWM_ECAP0的引脚 D18用于 Σ-Δ 时钟。
提前感谢