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.

msp430f5438a遇到TimeA-CCR0捕获无法每次都触发DMA0传输的问题

DMA0的配置

  dmaAddr = (unsigned int) &CCR0Time[ChN];
  DMA0SZ = CCRX_NUM;
  __data16_write_addr((unsigned short) &DMA0SA,TA0CCR0_);                                    
  __data16_write_addr((unsigned short) &DMA0DA,dmaAddr); 
  DMACTL0 = DMA0TSEL_1;                      //(Ta0CCR0.IFG)
  DMACTL4 = DMARMWDIS ; 

  DMA0CTL = DMAEN + DMADT_0 + DMADSTINCR_3;

定时器配置

  TA0CCTL0 = CM_3 + CCIS_0 + SCS + CAP;    //TA0.0捕获
  TA0CCTL0 &=~(COV + CCIFG);
  P1SEL |= BIT1;

MCLK = 20M,SMCLK = 20M,捕获间断的信号,信号周期1us

现象:有时可以实现捕获,有时无法实现,没有任何捕获值。没有捕获值的情况往往伴随着cov的置位,请大家帮忙分析一下,谢谢!

  •  你的DMA配置好像有些问题。能否提供完整代码?

    或者你参考一下官网的例程

    www.ti.com/.../slac375

  • 代码如下,参考你发的例程,做了修改

     CCRX_NUM = 50;

    unsigned int CCR0Time[CCRX_NUM];

     unsigned long dmaAddr;

    ChN = 0;

      memset(&CCR0Time,0,CCRX_NUM*2); 
      dmaAddr = (unsigned long) &CCR0Time[ChN];
      DMA0SZ = CCRX_NUM;
      __data16_write_addr((unsigned short) &DMA0SA,(unsigned long)(&TA0CCR0));                                    
      __data16_write_addr((unsigned short) &DMA0DA,dmaAddr); 
      DMACTL0 = DMA0TSEL_1;                      //(Ta0CCR0.IFG)
      DMACTL4 = DMARMWDIS ; 

      TA0CCTL0 = CM_3 + CCIS_0 + SCS + CAP;    //TA0.0捕获
      TA0CCTL0 &=~(COV + CCIFG);
      P1SEL |= BIT1;

     DMA0CTL = DMAEN + DMADT_0 + DMADSTINCR_3;   

    等待1M信号过后,一般有50个左右个波形,查询寄存器CCR0Time,有时候有捕获数据,有时无捕获数据

    DMA0CTL &= ~(DMAEN + DMAIFG);

  • 增加现象:如果捕获改为上升沿触发,不是上升和下降都触发就没有问题,难道是个bug吗?