原创 [博客大赛]MSP430F2616开发笔记(三)DMA的Block Transfers模式

2014-3-22 14:22 1241 17 17 分类: MCU/ 嵌入式 文集: MSP430

Block Transfers模式即:设置好源地址与目标地址,以及需要传输的byte/word数,全部传输完成之后DMAEN自动清零,而传输这么多数据只需要触发一次。

因为DMA不需要设置时钟,所以它的代码其实非常简单。

/*******************************************/

uint16_t dma_temp_A[64];
uint16_t dma_temp_B[64];


int main (void)
{
    uint16_t i = 0;

    WDTCTL = WDTPW + WDTHOLD;

    // 传输64个字节
    // 源地址是dma_temp_A
    // 目标地址是dma_temp_B
    DMA0SZ = 64;
    DMA0SA = dma_temp_A;
    DMA0DA = dma_temp_B;

    // 使用Block transfer模式,源地址和目标地址都递增
    DMA0CTL = DMADT_1 | DMADSTINCR_3 | DMASRCINCR_3;
    
    while (1) {
        for (i = 0; i < 8; i++) {
            dma_temp_A = 0xA0 + i;
            dma_temp_B = 0xB0 + i;
        }
        DMA0CTL |= DMAEN;
        DMA0CTL |= DMAREQ;
        while (1);
    }
    return 0;
}
/*******************************************/
结论一,置位DMAEN和DMAREQ就能启动一次DMA传输,而且会将指定的字节自动传输完;
结论二,只要传输完成,中断标志位DMAIFG就会被挂起,但是它的状态不影响DMA的寄存器操作;
结论三,成功的传输需要,DMAEN置位的情况下产生DMAREQ的上升沿(这个可以通过DMALEVEL来设置,默认为上升沿触发,HIGH LEVEL触发的话,DMAREQ在DMAEN为零时被置位也是有效的)。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
17
关闭 站长推荐上一条 /3 下一条