OMAP-L138 DSP+ARM Processor EDMA 软件触发问题

OMAP-L138 DSP+ARM Processor EDMA 软件触发问题

此问题尚无答案
All Replies
  • 秀才171分

    在本来的EDMA搬运McASP接收,发送数据的程序基础上,进行修改,再增加一个通道,然后在EMA0中断中软件强制触发增加的通道ESRn=1,但是没有进行数据搬运,请问软件强制触发时,应该注意那些问题。

    Uint16 linkAddr;
    Uint16 linking=60+dmaCh*2+1;
    Uint8 bAB = c>1;
    memset((void*)srcAddr,6,a*b*c);
    memset((void*)dstAddr,5,a*b*c);


    //DMA Region Access Enable 使能通道
    EDMA3ccRegs->DRA[1].DRAE |= 1<<dmaCh;

    //DMA Channel Queue Number 通道映射到 TC 1
    EDMA3ccRegs->DMAQNUM[dmaCh/8] |= 1<<(dmaCh*4);


    EDMA3ccRegs->PARAMSET[dmaCh].OPT = 0x00100000 | (dmaCh<<12) | (bAB?1<<2:0) | (bAB?2<<8:0);
    EDMA3ccRegs->PARAMSET[linking].OPT = 0x00100000 | (dmaCh<<12) | (bAB?1<<2:0) | (bAB?2<<8:0);

    EDMA3ccRegs->PARAMSET[dmaCh].SRC_DST_BIDX = _pack2(a,a);
    EDMA3ccRegs->PARAMSET[dmaCh].SRC_DST_CIDX = _pack2(a*b,a*b);
    EDMA3ccRegs->PARAMSET[linking].SRC_DST_BIDX = _pack2(a,a);
    EDMA3ccRegs->PARAMSET[linking].SRC_DST_CIDX = _pack2(a*b,a*b);

    EDMA_Buf[5] = ( int *)dstAddr;

    linkAddr = (Uint16)&(EDMA3ccRegs->PARAMSET[linking]);

    EDMA3ccRegs->PARAMSET[dmaCh].SRC = srcAddr;//aore
    EDMA3ccRegs->PARAMSET[dmaCh].A_B_CNT = _pack2(b, a);
    EDMA3ccRegs->PARAMSET[dmaCh].DST = dstAddr;//aiwr
    EDMA3ccRegs->PARAMSET[dmaCh].CCNT = c;
    EDMA3ccRegs->PARAMSET[dmaCh].LINK_BCNTRLD = _pack2(b, linkAddr);

    EDMA3ccRegs->PARAMSET[linking].SRC = srcAddr;//aore
    EDMA3ccRegs->PARAMSET[linking].A_B_CNT = _pack2(b, a);
    EDMA3ccRegs->PARAMSET[linking].DST = dstAddr;//aiwr
    EDMA3ccRegs->PARAMSET[linking].CCNT = c;
    EDMA3ccRegs->PARAMSET[linking].LINK_BCNTRLD = _pack2(b, linkAddr);

    //清除事件
    EDMA3ccRegs->EECR |= 1<<dmaCh;
    EDMA3ccRegs->ECR |= 1<<dmaCh;
    EDMA3ccRegs->EESR |= 1<<dmaCh;

    //使能中断
    EDMA3ccRegs->IESR |= 1<<dmaCh;

  • 探花15075分

    可以先屏蔽掉一些代码调试一下

    有可能配置出错,或者复用冲突

  • 秀才171分

    可以了,设置不没错,我把7通道改为6通道就可以了,好尴尬,还有现在的程序搬运的数据比较少时,可以搬运成功,搬运数据较大时,我试到最多250个int可以成功,260个int就不可以了,但是可以进入中断,可以说说可能有哪里出了问题么?谢谢了

  • 秀才171分

    可以了,设置不没错,我把7通道改为6通道就可以了,好尴尬,还有现在的程序搬运的数据比较少时,可以搬运成功,搬运数据较大时,我试到最多250个int可以成功,260个int就不可以了,但是可以进入中断,进入中断的次数跟触发的次数是一样。可以说说可能有哪里出了问题么?谢谢了