AD2428W手册解读之概述 下
4.3、I2S/TDM接口
I2S/TDM串口工作在全双工模式下,发送端和接收端使用相同的关键定时位时钟(BCLK)和帧同步(SYNC)信号同时工作。A2B从端收发器根据I2S全局配置寄存器(A2B_I2SGCFG)、I2S速率寄存器(A2B_I2SRATE)和I2S降速寄存器(A2B_I2SRRATE)的设置在BCLK和SYNC输出管脚上产生频率定时信号。A2B主收发器使用相同的BCLK和SYNC引脚作为输入,由主机驱动,从而提供了完整的A2B总线拓扑的时基。
4.3.1、时分多路复用协议
TDM模式将I2S接口扩展到不止一个立体声2通道(TDM2)信号。当在A2B_I2SCFG寄存器中对收发器编程以支持一定数量的TDM通道时,该数量的TDM通道在每个启用的I2S/TDM数据引脚(DTX0和DTX1或DRX0和DRX1)上是可用的。支持TDM2、TDM4、TDM8、TDM12、TDM16、TDM20、TDM24、TDM32模式。
例如,选择TDM4,使能一个传输pin (DTX0),则有4个传输数据通道。如果选择TDM4,同时使能DTX1和DTX0,则共有8个传输数据通道,如图“TDM4设置数据通道结构”所示
TDM4设置的数据通道结构(TDMMODE == 001)
I2S/TDM串口支持16位或32位数据通道宽度,可承载变字长信号。数据字总是以MSB第一格式表示。不同时分复用模式的BCLK信号频率在I2S/时分复用时钟频率设置48khz超帧率表中显示。
I2S/TDM时钟频率设置为48khz超级帧率
DRX0和DRX1输入引脚可以单独配置为PDM输入。当在一个或两个DRX引脚的A2B从节点上启用PDM时,PDM设备需要运行64 × fSYNCM(在48 kHz fSYNCM下3.072 MHz)的PDM时钟。PDMCLK/IO7引脚或BCLK引脚都可以生产所需的PDM时钟。收发器可以在接收PDM流的同时,通过DTX0或DTX1引脚传输TDM数据。而使用BCLK作为PDM时钟时,仅支持I2S/TDM2和32位通道宽度或16位通道宽度的TDM4。使用PDMCLK/IO7而不是BCLK时钟PDM设备I2S/TDM接口允许BCLK用于各种TDM模式。如果同时使用DRX0和DRX1接收PDM数据,则可以改变DTX1的功能,使其充当备用DRX1。这使得最多可以同时使用4个PDM麦克风和全双工I2S通信。
如果PDM只使用一个引脚(DRX0或DRX1),另一个引脚可同时用于I2S/TDM传输。
4.4、Mailboxes
有两个虚拟邮箱MBOX0和MBOX1,它们允许主机和从节点控制处理器之间的处理器间通信。
注意:在本节中,对MBOX0的所有特定引用也应用于MBOX1实例。从节点中的处理器可以通过I2C向A2B从收发器中的寄存器发送消息。在主节点中,主收发器的IRQ/IO0引脚上的中断通知主机处理器新消息,并可以使用BUS_ADDR从I2C上的A2B从收发器寄存器读出消息。如果邮箱消息交换是从A2B主节点到A2B从节点,主机使用BUS_ADDR在I2C上的A2B从收发器寄存器中放置消息。在从属节点中,处理器通过从属收发器的IRQ/IO0引脚的中断得到这条新消息,并可以在检查A2B_LINTTYPE寄存器后,直接通过I2C从A2B从属收发器寄存器读出这条消息。
4.4.1、邮箱编程与操作
A2B_MBOX0CTL寄存器提供位字段来启用邮箱和控制方向、消息长度和中断功能。
默认情况下,邮箱0被配置为接收邮箱(由主机写入,从节点处理器读取),邮箱1被配置为传输邮箱(由从节点处理器写入,主机读取)。操纵A2B_MBOX0CTL。MB0DIR位控制邮箱的方向。
每个邮箱可以容纳8、16、24或32位消息,如在A2B_MBOX0CTL中配置的那样。MB0LEN字段。该字段中的值决定使用四个字节范围的A2B_MBOX0B0到A2B_MBOX0B3寄存器中的哪个寄存器来存储数据,其中第一个字节总是在A2B_MBOX0B0寄存器中,最后一个字节位于容纳编程数据长度所需的最高数据寄存器中,如下表所示。
对于已启用的接收邮箱(A2B_MBOX0CTL。MB0EN = 1和A2B_MBOX0CTL.MB0DIR = 0),如果设置了A2B_MBOX0CTL.MB0FIEN位,则在主机写入邮箱的最后一个字节并被A2B从收发器接收后,从节点发生中断。如果设置了A2B_MBOX0CTL.MB0EIEN位,中断会在主机读取邮箱的最后一个字节后,通过A2B总线向上游传播回主机从节点中的本地处理器。
对于已启用的传输邮箱(A2B_MBOX0CTL.MB0EN = 1和A2B_MBOX0CTL.MB0DIR = 1),如果设置了A2B_MBOX0CTL.MB0FIEN位,那么在从节点中的本地处理器写入邮箱的最后一个字节之后,就会发生对主机的中断。如果设置了A2B_MBOX0CTL.MB0EIEN位,则在主机读取邮箱的最后一个字节后,中断通过A2B总线向下传播到从属节点。
注意:动态重新配置已启用的邮箱(A2B_MBOX0CTL.MB0EN = 1)被禁止。主机必须首先禁用邮箱(A2B_MBOX0CTL.MB0EN = 0),如果需要重新配置,则在两个单独的访问中重新启用它。
当邮箱被填满时,A2B_MBOX0STAT寄存器提供邮箱的状态信息:
1、设置了MB0FULL位和清除A2B_MBOX0STAT.MB0EMPTY位。
2、当一个邮箱被清空,A2B_MBOX0STAT。设置了MB0EMPTY位和清除
A2B_MBOX0STAT.MB0FULL位。
3、当邮箱向主机或本地处理器发出中断信号时设置A2B_MBOX0STAT.MB0EIRQ和
A2B_MBOX0STAT.MB0FIRQ位。当主机或本地处理器处理中断时清除这些位。
多个从节点可以通过它们的TX邮箱与主节点通信。在主节点中,A2B_INTTYPE寄存器包含任何从节点产生的暂挂中断的信息,从节点在A2B_INTSRC寄存器中表示。
当两个从属服务器同时向它们的邮箱写邮件时,主服务器从离它更近的从属服务器那里得到中断指示。在检测到中断后,主机通过读取A2B主收发器的中断类型(A2B_INTTYPE)和中断源寄存器(A2B_INTSRC)来提取中断信息,分别确定哪个中断发生了,哪个从节点产生了中断。在读取A2B_INTTYPE寄存器时,从节点上的A2B_INTSRC寄存器中的中断请求被清除。IRQ/IO0引脚切换到去断言状态,然后由于来自另一个从节点的仍然活跃的中断而立即回到断言状态,并且主机可以再次读取主收发器的A2B_INTTYPE和A2B_INTSRC寄存器来确认另一个从节点的邮箱中断。
4.4.2、邮箱延迟
邮箱事务由I2C总线上的寄存器读写组成。从服务器到主服务器的中断请求是SRF包的一部分,因此从服务器到主邮箱的延迟可能包括一个额外的超帧在等待这个时间。
下图显示了邮箱事务在两个方向上的系统计时。浅灰色槽位表示SCF场,深灰色槽位表示SRF场。
如邮箱延迟(从主机到从属)图所示,当邮箱消息从主机发送到从属处理器时,主机处理器使用对主收发器BUS_ADDR设备地址的2字节突发写访问,通过SCF字段将邮箱数据写入A2B从属节点。当写入完成时,从收发器立即向其本地节点处理器生成中断。因此,在IRQ/IO0上断言的slave中断请求(slave IRQ)与SCF字段对齐。一旦这个中断被断言,本地连接的处理器可以使用从收发器BASE_ADDR设备地址来询问A2B_LINTTYPE寄存器,以确定它是邮箱完全中断,然后它可以使用一个2字节的突发读取从邮箱数据寄存器提取数据。一旦这些事务完成,在主节点(master IRQ)上生成邮箱空中断,并与SRF字段对齐,然后主机继续读取主收发器的A2B_INTSRC和A2B_INTTYPE寄存器(使用主收发器BASE_ADDR设备地址),以确定它是由指定的从机发起的邮箱空中断
邮箱延迟(从主机到Slave)
类似地,如邮箱延迟(从Slave到Host)图所示,当邮箱消息从从处理器发送到主机时,从节点处理器随时通过使用从收发器BASE_ADDR设备地址向寄存器发出写操作来填充邮箱数据寄存器,向主A2B节点发出的中断指示通过SRF字段。因此,在IRQ/IO0上断言的主邮箱完全中断请求(master IRQ)与SRF字段对齐。一旦这个中断被断言,主机(使用主收发器BASE_ADDR设备地址)询问A2B_INTSRC和A2B_INTTYPE寄存器,以确定它是由指定的从机发起的邮箱全中断。
邮箱延迟(从Slave到Host)
随后要从从属收发器的邮箱中提取数据,主机必须首先将A2B_NODEADR寄存器设置为产生中断的从属节点(使用主收发器BASE_ADDR写访问),然后发出BUS_ADDR访问来读取从属收发器的邮箱数据字节寄存器(注意发生这些读操作所需的超帧间距)。一旦主机读取了最后一个字节,从属节点(slave IRQ)的邮箱空中断请求将在下一个SCF中断言。然后,从节点处理器可以使用从收发器BASE_ADDR访问来读取A2B_LINTTYPE寄存器,并在确定发生的是邮箱空中断之后采取行动(例如,再次加载邮箱数据寄存器以重新启动进程)。