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