2021-3-30 ADI 的DMA操作模式总结
问题:我阅读了ADSP-21489的数据表,并说明ADSP-21489具有八个SPORT,但它只能微调或接收16通道音频数据。据我了解,总共应该有32声道音频数据,因为每个SPORT都有两条数据线(A和b)。与ADSP-21371相同。
回答:
ADSP-21489处理器具有八个独立且同步的串行端口(SPORT)。根据串行端口体系结构,它在配置为输入的双向串行数据信号之一上接收串行数据,或在配置为输出的双向串行数据信号上发送串行数据。它可以同时在两个通道上进行单向接收或发送。特定SPORT上通道A和通道B的数据方向必须相同。请注意,每个SPORT上的SPORTx_DA和SPORTx_DB通道数据信号不能同时发送和接收数据以进行全双工操作。因此,当所有八个SPORT都启用时,串行端口最多只能支持16个DMA通道的音频数据发送或接收。
问题:如何在传输结束时判断中断状态位:
回答:
SPMCTLx寄存器具有SPORT的DMA状态位。您可以参考所参考的SPORT的SPMCTLx位。
请通过以下链接参考ADSP-214XX HRM:
http://www.analog.com/static/imported-files/processor_manuals/ADSP-214xx_hwr_r1-0.pdf
ILAT寄存器具有用于中断状态的状态位。如果启用中断,则无需轮询状态位。一旦传输完成,中断将自动发生。您需要添加一个中断服务例程来处理它们。
追问:因此我使用sport0和sport1接收四个通道的数据,对于每个SPORT通道,两组数据。
我想对sport0和sport1使用相同的中断函数,因此,在中断函数中,我必须查询中断的状态,以确认sp0和sp1都访问了该中断函数(当sp0或sp1接收数据完成时,中断将赋值),最近我发现SPERRCTLx寄存器的bit4和bit5报告通道a和通道b的中断状态,但是我很确定,请问:我说的对吗?或者给我一些有用的信息。
提高了数据传输的速度,如果我以此方式进行操作,应该如何查询SP0或SP1的中断状态。
回答:
IRPTL和LIRPTL寄存器具有中断的状态位。默认情况下,SPORT 1中断映射到P3I,而SPORT 0中断映射到P6I。您可以分别检查SPORT 1的IRPTL寄存器的位14和SPORT 0的LIRPTL寄存器的位0。
追问:
我尝试了您说的内容,但它不起作用。我想再说一遍,我想检查SP0和SP1的中断状态,我的一些代码如下:
LIRPTL = sysreg_read(sysreg_LIRPTL);
IRPTL = sysreg_read(sysreg_IRPTL);
while((LIRPTL&0x00000001 == 0x00000001)&&(IRPTL&0x00008000 == 0x00008000))
{
................
sysreg_bit_clr(sysreg_LIRPTL,P6I);
sysreg_bit_clr(sysreg_IRPTL,P3I);
}
我的代码正确吗?或还有其他问题?请帮助我!
回答:
您是否使用VDSP ++寄存器窗口检查了LIRPTL和IRPTL寄存器的值?您在那里看到正确的值了吗?我也建议您将条件更改为||。而不是&&并尝试。您不必清除LIRPTL和IRPTL寄存器。