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

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

此问题已被解答
All Replies
  • 秀才182分

    我用了两个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;

  • 举人707分

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

  • 秀才182分

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

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

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

  • 举人707分

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