工具/软件:
我尝试使用 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 *)×tamp;
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);
谢谢!