- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
微控制器无需CPU即可生成同步正弦波与余弦波
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
ADC12CTL0 = REF2_5V + REFON; // Internal 2.5V ref
//Setup DMA triggers for both DMA channels
DMACTL0 = DMA0TSEL_5 + DMA1TSEL_5; // DAC12IFG trigger
// Setup DMA0
DMA0SA = (int) Sin_tab; // Source block address
DMA0DA = DAC12_0DAT_; // Destination single address
DMA0SZ = 0x20; // Block size
DMA0CTL = DMADT_4 + DMASRCINCR_3 + DMAEN; // Rpt single ch, inc src, word-word
//Setup DAC0 Load with Timer_A, group with DAC1
DAC12_0CTL = DAC12LSEL_2 + DAC12IR + DAC12AMP_2 + DAC12IFG + DAC12ENC + DAC12GRP;
//Setup DMA1
DMA1SA = (int) Sin_tab+8; // Source block address
DMA1DA = DAC12_1DAT_; // Destination single address
DMA1SZ = 0x20; // Block size
DMA1CTL = DMADT_4 + DMASRCINCR_3 + DMAEN; // Rpt single ch, inc src, word-word
//Setup DAC1 Load with Timer_A
DAC12_1CTL = DAC12LSEL_2 + DAC12IR + DAC12AMP_2 + DAC12IFG + DAC12ENC;
//Setup Timer_A
CCTL1 = OUTMOD_3; // CCR1 set/reset
CCR1 = 1; // CCR1 PWM Duty Cycle
CCR0 = 3; // Clock period of CCR0
TACTL = TASSEL_1 + MC_1; // ACLK, upmode
//Turn Off CPU forever
LPM3;
}
-------------------------------------------------------------------------

最后,每次 DMA 传输都会强行占用 2 个 CPU 时钟周期。虽然 CPU 并不用于传输操作,但时钟周期的占用会造成必要的 CPU 开销且大于零。不过,对于 1kHz 的正弦波来说,假设有 32 个数据点,第 31.25个数据点之外的 2 个周期仅需要 *%的开销,相比之下不使用 DMA 时开销达到近 50%。另外,产生 2 个波形只需要 4个周期或 7.8% 的开销,而在不使用 DMA 时几乎不可能产生 2 个 1kHz 正弦波。
来源:维库开发网
上一篇:IMS助运营商构建新的业务价值链
下一篇:多点协作传输中的联合传输方法


