Other Parts Discussed in Thread: SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号: TMS320F28379D
主题: SysConfig 中讨论的其他器件
使用 SysConfig、Driverlib、DMA CH1 和 SDFM2 Filter1
当我通过 VALUE = HWREG (0x00005E96);或 VALUE=HWREG (mySDFM2_BASE + SDFM_O_SDDATA1) 读取寄存器时;我得到正确的数据。 然而、当我尝试通过 DMA 读取完全相同的寄存器时、DMA 只生成零。 当我读取另一个也位于 ramgs0 中的变量时、缓冲区将填充 SDFM 数据加速器中的每个触发器。
DMA 的配置:
void myDMA0_init(){
DMA_setEmulationMode(DMA_EMULATION_FREE_RUN);
DMA_configAddresses(myDMA0_BASE, dma_dfsm_dest_1, test_add);
DMA_configBurst(myDMA0_BASE, 1U, 0, 0);
DMA_configTransfer(myDMA0_BASE, 200U, 0, 1);
DMA_configWrap(myDMA0_BASE, 1U, 0, 200U, -200);
DMA_configMode(myDMA0_BASE, DMA_TRIGGER_SDFM2FLT1, DMA_CFG_ONESHOT_DISABLE | DMA_CFG_CONTINUOUS_ENABLE | DMA_CFG_SIZE_32BIT);
DMA_enableTrigger(myDMA0_BASE);
DMA_startChannel(myDMA0_BASE);
}
SDFM2 的配置:
//****************************************
// mySDFM2 initialization
//****************************************
void mySDFM2_init(void)
{
//
// Set modulator clock mode
//
SDFM_setupModulatorClock(mySDFM2_BASE, SDFM_FILTER_1, SDFM_MODULATOR_CLK_EQUAL_DATA_RATE);
SDFM_setupModulatorClock(mySDFM2_BASE, SDFM_FILTER_2, SDFM_MODULATOR_CLK_EQUAL_DATA_RATE);
SDFM_setupModulatorClock(mySDFM2_BASE, SDFM_FILTER_3, SDFM_MODULATOR_CLK_EQUAL_DATA_RATE);
//
// Configure comparator filter settings
//
SDFM_configComparator(mySDFM2_BASE, (SDFM_FILTER_1 | SDFM_FILTER_SINC_3 | SDFM_SET_OSR(1)), SDFM_THRESHOLD(30000,0));
SDFM_configComparator(mySDFM2_BASE, (SDFM_FILTER_2 | SDFM_FILTER_SINC_3 | SDFM_SET_OSR(1)), SDFM_THRESHOLD(30000,0));
SDFM_configComparator(mySDFM2_BASE, (SDFM_FILTER_3 | SDFM_FILTER_SINC_3 | SDFM_SET_OSR(1)), SDFM_THRESHOLD(30000,0));
//
// Configure data filter settings
//
SDFM_configDataFilter(mySDFM2_BASE, (SDFM_FILTER_1 | SDFM_FILTER_SINC_3 | SDFM_SET_OSR(256)), (SDFM_FILTER_ENABLE | SDFM_DATA_FORMAT_32_BIT | SDFM_SHIFT_VALUE(10)));
SDFM_configDataFilter(mySDFM2_BASE, (SDFM_FILTER_2 | SDFM_FILTER_SINC_3 | SDFM_SET_OSR(256)), (SDFM_FILTER_ENABLE | SDFM_DATA_FORMAT_16_BIT | SDFM_SHIFT_VALUE(10)));
SDFM_configDataFilter(mySDFM2_BASE, (SDFM_FILTER_3 | SDFM_FILTER_SINC_3 | SDFM_SET_OSR(256)), (SDFM_FILTER_ENABLE | SDFM_DATA_FORMAT_16_BIT | SDFM_SHIFT_VALUE(10)));
//
// Main Filter Enable
//
SDFM_enableMainFilter(mySDFM2_BASE);
//
// Configure SDFM interrupt source
//
//
// FILTER1 interrupt settings
//
SDFM_enableInterrupt(mySDFM2_BASE, SDFM_FILTER_1, SDFM_DATA_FILTER_ACKNOWLEDGE_INTERRUPT);
//
// FILTER2 interrupt settings
//
SDFM_enableInterrupt(mySDFM2_BASE, SDFM_FILTER_2, SDFM_DATA_FILTER_ACKNOWLEDGE_INTERRUPT);
//
// FILTER3 interrupt settings
//
SDFM_enableInterrupt(mySDFM2_BASE, SDFM_FILTER_3, SDFM_DATA_FILTER_ACKNOWLEDGE_INTERRUPT);
DEVICE_DELAY_US(78U);
//
// Main Interrupt Enable
//
SDFM_enableMainInterrupt(mySDFM2_BASE);
}
main 文件的唯一重要部分:
#pragma DATA_SECTION(dsfm1_C1, "ramgs0");
#pragma DATA_SECTION(test, "ramgs0");
uint16_t test=4;
const void*test_add=(void*)(mySDFM2_BASE+SDFM_O_SDDATA1);
int32_t dsfm1_C1[200];
提前非常感谢。