This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DMA几个小问题



1.这两句不知为什么报出了警告,需要贴上具体代码才能解答吗?

2.__data16_write_addr((unsigned short) &DMA0DA,(unsigned long) &DMA_DST);

  DMA_DST是事先设置的unsigned int变量,对如下三种情况,对结果有什么样不同的影响?

  i)__data16_write_addr((unsigned short) &DMA0DA,(unsigned long) DMA_DST);

  ii)__data16_write_addr((unsigned short) &DMA0DA,(unsigned long) &DMA_DST);

  iii)__data16_write_addr((unsigned short) &DMA0DA,(unsigned long) 0x2400);

3.对于存到RAM里面的值,要进行数据处理是不是设置个数组变量或者直接用DMA_DST读取,然后进行处理?

4.对于DMA中断,以MSP430F55xx_dma_04为例,中断中的程序是不是也会消耗转换时间,也就是说DMA从ADC12MEM0搬到RAM所消耗的时间会根据中断函数里的内容变长?

Thanks

  • 1.这两句不知为什么报出了警告,需要贴上具体代码才能解答吗?

    你要贴上报警的信息,否者不清楚为什么报警。

    2.__data16_write_addr((unsigned short) &DMA0DA,(unsigned long) &DMA_DST);

      DMA_DST是事先设置的unsigned int变量,对如下三种情况,对结果有什么样不同的影响?

      i)__data16_write_addr((unsigned short) &DMA0DA,(unsigned long) DMA_DST);

      ii)__data16_write_addr((unsigned short) &DMA0DA,(unsigned long) &DMA_DST);

      iii)__data16_write_addr((unsigned short) &DMA0DA,(unsigned long) 0x2400);

    要理解这三句话的区别,需要你理解C语言的指针含义,__data16_write_addr()函数的最后一个参数是一个数据指针,如果你定义DMA_DST为一个数组,DMA_DST就是表示该数组的起始位置,就用第一句。如果你定义DMA_DST为一个变量,&DMA_DST就为该变量的地址, 直接用立即数,就是给出绝对地址。

    3.对于存到RAM里面的值,要进行数据处理是不是设置个数组变量或者直接用DMA_DST读取,然后进行处理?

    DMA_DST并不是MCU里面的寄存器,而是你定义的变量,请你看代码例程的时候仔细点。至于是要用数组还是用变量,是看你DMA传输的需要而定的。如果是单次传输用一个数据变量就可以了,如果是用块传输,最好定义一个数组。

    4.对于DMA中断,以MSP430F55xx_dma_04为例,中断中的程序是不是也会消耗转换时间,也就是说DMA从ADC12MEM0搬到RAM所消耗的时间会根据中断函数里的内容变长?

    DMA的传输时间不受中断函数的影响。

  • 1.这两句不知为什么报出了警告,需要贴上具体代码才能解答吗?

    你要贴上报警的信息,否者不清楚为什么报警。

    不好意思,错误是这样的:

    2.要理解这三句话的区别,需要你理解C语言的指针含义,__data16_write_addr()函数的最后一个参数是一个数据指针,如果你定义DMA_DST为一个数组,DMA_DST就是表示该数组的起始位置,就用第一句。如果你定义DMA_DST为一个变量,&DMA_DST就为该变量的地址, 直接用立即数,就是给出绝对地址。

    那本质是不是将DMA_DST的地址指向RAM中存放数据的地址?

    3.对于存到RAM里面的值,要进行数据处理是不是设置个数组变量或者直接用DMA_DST读取,然后进行处理?

    DMA_DST并不是MCU里面的寄存器,而是你定义的变量,请你看代码例程的时候仔细点。至于是要用数组还是用变量,是看你DMA传输的需要而定的。如果是单次传输用一个数据变量就可以了,如果是用块传输,最好定义一个数组。

    意思是不是就是:若我定义了一数组DMA_DST[10],将ADC12MEM0的值存放进RAM,在进行数据处理的时候可以直接对DMA_DST[]数组进行处理?