第二十一章:IIS总线接口
简介:
现在,在市场上有很多不同形式的数字音频系统,例如磁带,数字音频带,数字声音处理器以及数字TV声音,而这些数字音频系统也得到了消费者的喜爱。而S3C2440A集成电路内部的声音总线接口可以用来做一个外部8/16位立体声编码解码器集成电路微型磁带或者便携式设备的编码解码器接口。同时IIS总线接口支持IIS总线数据模式和最高有效位对齐数据模式。而为先入先出(FIFO)通道提供DMA传输模式接口而不是中断接口。在DMA传输模式时,总线可以同时传输和接收也可以实现在一次传输中传递和接收分离
IIS框图:
功能描述:
总线接口,寄存器存储以及状态机(BRFC):状态机控制总线接口逻辑和先入先出通道。
双5位预分频器(IPSR):一个预分频器用作IIS总线接口的主机时钟产生器,而另一个用作外部编码解码器时钟产生器。
64字节先入先出存储(TXFIFO和RXFIFO):在发送时,数据写入TXFIFO。而在接收时,数据从RXFIFO中读取。
主机IIS时钟产生器(SCLKG):在主机模式时,串行数据时钟由主机产生。
声道产生器和状态机(CHNC):IISCLK和IISLRCK是由声道状态机产生控制的。
16位位移寄存器(SFTR):在发送模式,并行数据转移到串行数据输出。在接收模式,串行数据转移到并行数据。
发送或接收模式
正常发送:
IIS控制寄存器为发送和接收FIFO设置了先入先出就绪标志位。当FIFO准备来发送数据时,如果FIFO为非空,那么FIFO就绪标志将会被设为1,而如果发送FIFO为空,FIFO就绪标志将被设为0。当接收FIFO为未满时,FIFO就绪标志位设为1,它表明FIFO准备来接收数据了。如果接收FIFO满了时,FIFO就绪标志位设为0 。这些标志位可以决定CPU何时读写FIFO。而当CPU用这种方式获得发送接收FIFO时,串行数据就可以发送或接收了。
DMA发送:
在这种模式时,使用DMA控制器发送或者接收FIFO。而在发送或者接收模式时,DMA服务请求有FIFO的就绪标志决定。
发送和接收模式:
在这种模式时,IIS总线接口可以同时发送和接收数据。
音频串行接口格式
IIS总线格式:
IIS总线有四条线,包括串行数据输入(IISDI),串行数据输出(IISDO),左/右声道选择(IISLRCK)以及串行位时钟(IISCLK)。主机产生IISLRCK和IISCLK。
串行数据以最高有效位在前的方式发送二的补码。而最高有效位先传输是因为发送方和接收方可能有不同的字符长度。发送方不必知道接收方可以处理多少位的数据,同样接收方也不需要知道有多少位要接收。
当系统的字符长度要比接收方的字符长度长时,发送的字符将被缩短(最低有效数据位将设为0)。如果接收方获得了多于他字符长度的位数时,这些多接收的位数在最低有效位后将被忽略。相反的,如果接收方获得少于他字符长度的数据时,那些空余的位将在内部设为0 。因此最高有效位有一个固定的位置,而最低有效位的位置将取决于字符长度。当IISLRCK信号改变时,发送方在一个时钟周期里发送下一字符的最高有效位。
发送方发送的串行数据即可以与时钟信号的下降沿同步,也可以与时钟信号的上升沿同步。然而串行数据必须发送到接收方在时钟信号的的上升沿,因此在上升沿发送数据有一些要求。
左/右声道选择线表明被传输的声道。IISLRCK即可以在时钟的下降沿又可以在时钟的上升沿改变。而他不需要对称,在从机中,这个信号在时钟信号的上升沿发出。IISLRCK线在最高有效字节位传输完的一个时钟周期后改变。这就允许从机发送方去发送串行数据在同步时间。此外,他使能接收方来存储以前的字符,同时为下一个字符清除输入。
最高有效位对齐(左对齐):
在总体框架上,最高有效位/左对齐有格式与IIS总线格式十分相似。而唯一与IIS总线格式不同的是最高有效位对齐格式总是在IISLRCK一改变后就发送下一字符的最高有效位。
IIS总线格式和最高有效位格式对比:
采样频率与主机时钟:
主机时钟频率(PCLK或者MPLLin)可以被采样频率选择,如下表。
由于主机时钟由IIS预分频决定。所以预分频值和主机时钟类型(256 或者384fs)应该合适的决定。而串行位时钟频率类型(16/32/48fs)可以由每个声道的串行位和主机时钟决定。如下表:
IIS总线接口专属寄存器
IIS控制寄存器(IISCON)
寄存器 | 地址 | R/W | 描述 | 重启值 |
IISCON | 0x55000000 (Li/HW, Li/W, Bi/W) 0x55000002 (Bi/HW) | R/W | IIS控制寄存器 | 0x10 |
IISCON | Bit | 描述 | 初始值 |
左/右声道索引(只读) | [8] | 0 = 左 1 = 右 | 1 |
发送FIFO就绪标志(只读) | [7] | 0 = 空 1 = 非空 | 0 |
接收FIFO就绪标志(只读) | [6] | 0 = 满 1 = 未满 | 0 |
发送DMA服务请求 | [5] | 0 = 不使能 1 = 使能 | 0 |
接收DMA服务请求 | [4] | 0 = 不使能 1 = 使能 | 0 |
发送声道空闲命令 | [3] | IISLRCK空闲状态失能(暂停发送) 0 = 不暂停 1 = 暂停 | 0 |
接收声道空闲命令 | [2] | IISLRCK空闲状态失能(暂停接收) 0 = 不暂停 1 = 暂停 | 0 |
IIS预分频 | [1] | 0 = 不使能 1 = 使能 | 0 |
IIS接口 | [0] | 0 = 不使能 (停止) 1 = 使能 (开始) | 0 |
注:
1. IISCON寄存器的每一位都可以被访问,半字和字单元可以用STRB/STRH/STR和LDRB/LDRH/LDR指令,或者char/short int/int类型指针在小/大端模式。
2. (Li/HW/W) : 小/半字/字
(Bi/HW/W) : 大/半字/字
IIS模式寄存器(IISMOD)
寄存器 | 地址 | R/W | 描述 | 重启值 |
IISMOD | 0x55000004 (Li/W, Li/HW, Bi/W) 0x55000006 (Bi/HW) | R/W | IIS模式寄存器 | 0x0 |
IISMOD | Bit | 描述 | 初始值 |
主机时钟选择 | [9] | 主机时钟选择 0 = PCLK 1 = MPLLin | 0 |
主从模式选择 | [8] | 0 = 主机模式(LLSLRCK和LLSCLK为输出模式) 1 = 从机模式(LLSLRCK和LLSCLK为输入模式) | 0 |
发送接收模式选择 | [7:6] | 00 = 不传输 01 = 接收模式 10 = 发送模式 11 = 收发模式 | 00 |
左右声道电位选择 | [5] | 0 = 低电平为左声道(高电平为右声道) 1 = 高电平为左声道(低电平为右声道) | 0 |
串行接口格式 | [4] | 0 = IIS兼容格式 1 = 最高有效位对齐模式 | 0 |
声道串行数据位数 | [3] | 0 = 8位 1 = 16位 | 0 |
主机时钟频率选择 | [2] | 0 = 256fs 1 = 384fs (fs:采样频率) | 0 |
串行位时钟频率选择 | [1:0] | 00 = 16fs 01 = 32fs 10 = 48fs 11 = 未定义 | 0 |
注:
1. IISMOD寄存器的每一位都可以被访问,半字和字单元可以用STRB/STRH/STR和LDRB/LDRH/LDR指令,或者char/short int/int类型指针在小/大端模式。
2. (Li/HW/W) : 小/半字/字
(Bi/HW/W) : 大/半字/字
IIS预分频寄存器(IISPSR)
寄存器 | 地址 | R/W | 描述 | 重启值 |
IISPSR | 0x55000008 (Li/HW, Li/W, Bi/W) 0x5500000A (Bi/HW) | R/W | IIS预分频寄存器 | 0x0 |
IISPSR | Bit | 描述 | 初始值 |
预分频控制A | [9:5] | 数值范围:0~31 注:预分频A决定主机时钟,在这里用到的内部模块和分频因子为N+1 | 00000 |
预分频控制B | [4:0] | 数值范围:0~31 注:预分频B决定主机时钟,在这里用到的外部模块和分频因子为N+1 | 00000 |
注:
1. IISPSR寄存器的每一位都可以被访问,半字和字单元可以用STRB/STRH/STR和LDRB/LDRH/LDR指令,或者char/short int/int类型指针在小/大端模式。
2. (Li/HW/W) : 小/半字/字
(Bi/HW/W) : 大/半字/字
IIS FIFO控制寄存器(IISFCON)
寄存器 | 地址 | R/W | 描述 | 重启值 |
IISFCON | 0x5500000C (Li/HW, Li/W,Bi/W) 0x5500000E (Bi/HW) | R/W | IIS FIFO控制寄存器 | 0x0 |
IISFCON | Bit | 描述 | 初始值 |
发送FIFO通道选择 | [15] | 0 = 正常 1 = DMA | 0 |
接收FIFO通道选择 | [14] | 0 = 正常 1 = DMA | 0 |
发送FIFO | [13] | 0 = 不使能 1 = 使能 | 0 |
接收FIFO | [12] | 0 = 不使能 1 = 使能 | 0 |
串行接口格式 | [11:6] | 数据计数值 = 0~32 | 000000 |
声道串行数据位数 | [5:0] | 数据计数值 = 0~32 | 000000 |
注:
1. IISFCON寄存器的每一位都可以被访问,半字和字单元可以用STRB/STRH/STR和LDRB/LDRH/LDR指令,或者char/short int/int类型指针在小/大端模式。
2. (Li/HW/W) : 小/半字/字
(Bi/HW/W) : 大/半字/字
IIS FIFO寄存器(IISFIFO)
IIS总线接口包含两个64字节FIFO用在收发模式。每一个FIFO有16位宽和32位宽格式,这就允许FIFO处理半字单元数据而不用管有效值的大小。发送和接收FIFO通道通过FIFO入口编程。而这个入口是0x55000010。
寄存器 | 地址 | R/W | 描述 | 重启值 |
IISFIFO | 0x55000010(Li/HW) 0x55000012(Bi/HW) | R/W | IIS FIFO寄存器 | 0x0 |
IISFIFO | Bit | 描述 | 初始值 |
FENTRY | [15:0] | IIS发送/接收数据 | 0x0 |
注:
1. IISFIFO寄存器的每一位都可以被访问,半字和字单元可以用STRB/STRH/STR和LDRB/LDRH/LDR指令,或者char/short int/int类型指针在小/大端模式。
2. (Li/HW/W) : 小/半字/字
(Bi/HW/W) : 大/半字/字