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.

多通道mcasp,edma3配置传输问题

我用了两个ad,两路da。

在配置两路ad时,一个slot配置为32位,一帧为2个slot,故为64位。两路ad接了相同的时钟和片选信号,我希望的是这两路ad可以在同一帧中得到数据(分别对应slot0,slot1)。

但是发现数据只能传输32位的,我现在只能得到XXXX0000,00000000这样的数据。

这个配合传输是否考虑到了帧的位数大于32位的情况,我应该怎么修改才得到想要的结果啊,还是说仍有一些问题我没注意到。

相应mcasp中配置如下(仅发送部分)

// RX
mcasp->regs->RMASK = 0xffffffff; // No padding used
mcasp->regs->RFMT = 0
                                   | (0x2<<16) //2延时
                                   | (1 <<15) //先接收MSB
                                   | (0x0<<13) //pad extra bits with 0
                                   | (0x0<<8) //pad with bite 0 value
                                   | (0xf<<4) //接收slot的长度为32位
                                   | (0 <<3) //读取的XRBUF源于DMA,忽略外围引脚接口
                                   | (0 <<0); //不进行向右旋转;
                                  // MSB 16bit, 2-delay, pad 0, DMA

mcasp->regs->AFSRCTL = 0
                                  | (0x2<<7) //2个时隙TDM模式,
                                  | (1<<4) //接收帧长一个字,
                                  | (1<<1) //内部产生发送帧同步信号,
                                  | (0<<0); //AFSX的上升沿代表一个帧的开始

 mcasp->regs->ACLKRCTL = 0x000000A4; // Rising INTERNAL CLK,(from tx side), 5分频,1010 0100
mcasp->regs->AHCLKRCTL = 0x00008000; // INT CLK (from tx side) 1000 0000 0000 0000
mcasp->regs->RTDM = 0x00000002; // Slots 0
mcasp->regs->RINTCTL = 0x00000000; // Not used
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
mcasp->regs->REVTCTL = 0;

  • 没太明白你的意思,MCASP接口本身就是32位的,它每次传输的数据是32位的,你设置两个slot,MCASP接口会分别在这两个时隙采集32位数据,EDMA会将这两组数据搬移到你指定的位置,你需要的效果不是这样吗?

  • 谢谢,才发现有人回答了。这就是我要的效果。当时的情况是只有一个slot有数据,另一个没有,原因是硬件上出了问题,一路AD没有转换。现在我遇到了一个其他的问题,不知你能否帮助我。

    mcasp和edma3配合传输能否完成AD是四线spi的情况(片选端,数据输入,数据输出,时钟)?什么时候把数据输入写到AD里去?

    如果不行的话,dsp上的spi接口能否配合edma3进行上述传输?

  • 你用的是哪款处理器,你的意思是AD采样芯片是通过SPI接口和处理器进行通信的吗,那只要你的处理器的EDMA支持SPI事件就可以了