This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28379D:有助于从 EPWM6 TBCTR 设置 DMA 传输

Guru**** 2461010 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1503485/tms320f28379d-help-setting-up-dma-transfer-from-epwm6-tbctr

部件号:TMS320F28379D

工具/软件:

我尝试使用 DMA 将 EPWM6 TBCTR 捕获为时间戳。

DMA 触发为 ADCA INT1

我最初看到一个捕获、但它会进一步停止捕获。

如果我不使用 EPWM6 TBCTR 作为源、而是在 RAM 中使用另一个变量、则可以看到值**按预期更新。

主要参数如下所示。  您是否发现问题或对问题可能存在的问题有建议?

在链接器中、 timestamp_data  :> RAMGS5 以定位可通过 DMA 访问的 RAM 中的变量

#pragma DATA_SECTION (timestamp、"timestamp_data");
uint16_t 时间戳;

const void * timestamp_ptr =(void *)&timestamp;
const void * epwm6_TBCTR =(void *)(EPWM6_BASE + EPWM_O_TBCTR);

SysCtl_selectSecMaster (SysCtl_SEC_CONTROLLER_DMA、SysCtl_SEC_CONTROLLER_CLA);

dma_initController();
DMA_setEmulationMode (dma_emulation_free_run);

DMA_configAddresses (DMA_CH2_BASE、TIMEOUT_PTR、epwm6_TBCTR);
DMA_configBurst (DMA_CH2_BASE、1U、0、0);
DMA_configTransfer (DMA_CH2_BASE、1U、0、0);
DMA_configWrap (DMA_CH2_BASE、65535U、065535U、0);
DMA_configMode (DMA_CH2_BASE、DMA_TRIGGER_ADCA1、DMA_CFG_OneShot_DISABLE | DMA_CFG_CONTINUAL_ENABLE | DMA_CFG_SIZE_16BIT);
DMA_enableTrigger (DMA_CH2_BASE);

DMA_startChannel (DMA_CH2_BASE);

如前所述、如果我使用一个变量而不是 TBCTR、它会按预期工作、触发 ADCA1:

#pragma DATA_SECTION (TEST_TIMEOUT_src、"TIMEOUT_DATA");
uint16_t test_timestamp_src;
const void * test_timestamp_ptr =(void *)&test_timestamp_src;

DMA_configresses (DMA_CH2_BASE、TIMEOUT_ptr、TEST_TIMEOUT_ptr);

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    已解决...我认为 ePWM 正在以相对于触发器的固定间隔复位、因此似乎没有更新