Hello!
In my design I use timer and uDMA to continuousely generate sine waveform with SPI-based DAC. My sine frequency is 10kHz, and I use 32 samples per period to generate it, so sample period for DAC writes is 375 clock cycles.
The setup code is:
uDMAChannelAttributeDisable(18, UDMA_ATTR_ALTSELECT | UDMA_ATTR_HIGH_PRIORITY | UDMA_ATTR_REQMASK); uDMAChannelScatterGatherSet(18, 2, SSIDACTasks, true); memcpy(DMASave + 8, pui8ControlTable + (18 * 16), 16); uDMAChannelAttributeEnable(18, UDMA_ATTR_USEBURST | UDMA_ATTR_HIGH_PRIORITY); uDMAChannelEnable(18); ... SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1); TimerConfigure(TIMER1_BASE, TIMER_CFG_SPLIT_PAIR / TIMER_CFG_A_PERIODIC); TimerLoadSet(TIMER1_BASE, TIMER_A, g_ui32SysClock / 320000); TimerDMAEventSet(TIMER1_BASE, TIMER_DMA_TIMEOUT_A); TimerEnable(TIMER1_BASE, TIMER_A);
The scatter-gather table:
tDMAControlTable SSIDACTasks[] = { uDMATaskStructEntry(32, UDMA_SIZE_16, UDMA_SRC_INC_16, SinT, UDMA_DST_INC_NONE, SSI3_BASE + SSI_O_DR, UDMA_ARB_1, UDMA_MODE_PER_SCATTER_GATHER), uDMATaskStructEntry(4, UDMA_SIZE_32, UDMA_SRC_INC_32, DMASave + 8, UDMA_DST_INC_32, pui8ControlTable + (18 * 16), UDMA_ARB_1, UDMA_MODE_MEM_SCATTER_GATHER) };
Then, I see in my scope clear ang good sine waveform. But I need to set up some tasks to occur at next sine period end. When I did it I noticed my tasks (including data aquisition) is not synchronous to sine period.
Then I set up another timer to toggle different pin with exact period of 375*32 clock cycles, which should be exactly synchronous to sine wave period:
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER3); TimerConfigure(TIMER3_BASE, TIMER_CFG_PERIODIC | TIMER_CFG_A_ACT_TOGGLE); TimerLoadSet(TIMER3_BASE, TIMER_A, g_ui32SysClock / (320000 / 32)); TimerSynchronize(TIMER3_BASE, TIMER_1A_SYNC); TimerEnable(TIMER3_BASE, TIMER_A); GPIOPinTypeTimer(GPIO_PORTA_BASE, GPIO_PIN_6); GPIOPinConfigure(GPIO_PA6_T3CCP0);
And I see on my scope that sine wave is not synchronous to timer output and the frequency generated by timer does not match doubled frequency of sine wave.
What is wrong?