打印
[Kinetis]

【读书笔记15 与外设通讯之I2S】

[复制链接]
2750|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
springvirus|  楼主 | 2013-11-14 10:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 springvirus 于 2013-11-14 14:54 编辑

I2S是一个全双工串行口,与诸如标准编解码器,DSP,微处理器,外围接口,音频编解码器的设备通讯。 有独立的发送器和接收器。
模块工作模式:
1. 正常模式
2. 网络模式
3. 门控时钟模式
4. I2S模式
5. AC97模式

1. 正常模式

1.1 正常模式的发送
首先是I2S使能(CR[I2SEN] = 1),使能发送FIFO(可选),写数据到TX,发送器使能(CR[TE] = 1),在连续时钟情况下,要使能帧同步, 在门控时钟情况下,要使能位时钟起始。
当以上条件都齐备时,要发送的数据从TX0装载进TXSR,或者当FIFO使能时,从FIFO 0装载进TXSR。
当FIFO 0被禁止,且发送数据寄存器空使能(IER[TDE0EN])和发送中断使能(IER[TIE])时,在当要发送的数据从 TX0到TXSR时,产生发送中断0。
当FIFO 0使能,且发送FIFO 0满使能(IER[TFF0EN])和发送中断使能(IER[TIE])时,当发送FIFO 0的空隙数量 等于或超过所设定的阀值时(就是发送FIFO 0的水印位FCSR[TFWM0]),产生发送中断0。

1.2 正常模式的接收
首先要I2S使能(CR[I2SEN] = 1),使能接收FIFO(可选),接收器使能(CR[RE] = 1),在连续时钟情况下, 要使能帧同步,在门控时钟情况下,要使能位时钟起始。
当FIFO 0被禁止,且接收中断使能(IER[RIE])和接收数据0准备使能(IER[RDR0EN])时,在当接收到的数据从 移位寄存器(RXSR)到接收数据寄存器0(RX0)时,产生接收中断0,且对接收数据准备0标志位(RDR0)置位。
当FIFO 0使能,且接收中断使能(IER[RIE])和接收数据0准备使能(IER[RDR0EN])时,在当接收到的数据进入 到FIFO 0且FIFO 0到达设定阀值时,产生接收中断0,且对接收FIFO满0标志位(RFF0)置位。

正常模式下的连续时钟传输(见Figure53-46) 发送数据寄存器被装载,时钟到来时,再装载进发送移位寄存器,在帧同步信号到来时,输出到STXD上,同时, SRXD上的数据进入接收移位寄存器,在2个帧同步信号的时隙中装载进接收数据寄存器。
正常模式下的内外部门控时钟传输(见Figure53-47和Figure53-48) 区别是,在传输数据字的最后一位后,前者的TX数据线和时钟处于高阻态,后者的TX数据线则是三态。

【小结:由图看,门控时钟,担任了同步功能的角色,不过图有些简略,没有表达出TX处于何种状态相应的内容。】

2.网络模式
帧同步表示一次新的数据帧的开始,此模式下,一个数据帧被分为多个时隙,一个数据字的发送和接收可以发生 在每个时隙(不像正常模式的只能在帧同步的时隙中发送和接收一个数据字)。

2.1  网络模式的发送
首先是使能网络模式,再次使能I2S,写数据到TX寄存器(同时清ISR[TDE]),对CR[TE]置位,使得在检测到新的 帧同步信号时使能发送器,使能发送中断。
通过配置TMSK[STMSK]可控制是否在时隙中发送,当数据从TX到TXSR时,ISR[TDE]会被清零,STXD在时隙期间 保持禁止,当下一个帧同步到来时,TXSR被移出,当TX空时,ISR[TDE]被置位,若TIE置位,会产生发送中断, 软件可以通过拉高ISR[TDE]或使用中断在下一个时隙时,用新数据来重载TX。当TXSR完成移位,即为空时,若 重载TX失败,会发生发送器下溢,TUE错误位置位,若FIFO使能,ISR[TFE]会置位,产生发送中断。
在发送完当前的数据帧时,可通过清零TE来禁止发送器,使能TE来使能下一数据帧的发送,这期间STXD是 被禁止的。当确认数据发送完后ISR[TDE]会置位,此时应清零TE位。

2.2 网络模式的接收
当CR[I2SEN和RE]被置位时,使能接收,I2S模块会自动找到下一帧的开始,当字接收完全时,数据被送往 RX,同时置位ISR[RDR],当中断使能时,会产生接收中断。
第2个数据字在第1个数据字传输到RX后就开始移位发送了,所以处理器在第2个数据字传输完全之前要读取 RX,否则会发生接收溢出错误。

【小结: TDE(Transmit Data Register Empty),发送数据寄存器空标志位,当数据从TX到TXSR后,此位置位,表示TX空了 TUE(Transmitter Underrun Error),发送器下溢错误标志位,当TXSR空时,此位置位,表示数据已经移位发送出去了。 RDR(Receive Data Ready),接收数据就绪标志位,当RX或FIFO被装入新值时,此位置位。 ROE(Receiver Overrun Error),接收器溢出错误标志位,当RXSR被填充,准备传输到RX或FIFO时, 但此时RX或FIFO已经满时,此位置位。搞清楚这4个标志位后,再看Figure53-49,就有的放矢了。 】

3. 门控时钟模式 此模式下,时钟可以表明在STXD和SRXD上的有效数据,因此不再需要帧同步信号,数据传输结束后, 时钟被拉到无效态。由STCK的上升沿作为发送数据的触发和下降沿作为锁存数据的触发,或反之,结束后, 时钟被拉到相应无效态。见Figure53-50和Figure53-51。可允许内部或外部时钟作为STCK。

4. I2S模式 通过I2S[I2SMODE]可以设置成正常模式,主模式和从模式。 在正常模式,寄存器都不被强制设置成特定值,用户可对I2S编程以使其工作在任何条件下。
【问题1: 对于正常模式,具体怎样的,对I2S的哪些寄存器编程,都能工作哪些条件下呢?】
主模式时,有些推荐值写入相关寄存器,字长固定为32位,RCCR[WL]设置包含有效数据的位数。 从模式时,同样有推荐值写入相关寄存器,字长是可变的,同样RCCR[WL]设置包含有效数据的位数, 实际字长由外部编解码器控制,外部I2S主机由I2S协议发送一个帧同步,I2S把发送帧同步信号作为 一帧新数据的发送,一次数据字发送完成后,I2S会等待下一个帧同步以发送新的数据字。

5. AC97模式

5.1 AC97固定模式
一次有效的发送帧格式为: Slot0: 标签 Slot1: 若是RD/WR,则是指令地址 Slot2: 若是WR,则是指令数据 Slot3~Slot12: 发送FIFO中的数据,数量由Slot0中的标签值决定。 当接收时,标签的第15位表示编解码器是否准备好,当置位时,接收这一帧数据,接收的标签中有 包含有效数据的Slot数量的信息,当标签中相关位有效时,Slot1和Slot2的值会被存储进相关寄存器 Slot3~Slot12的值被存储进接收FIFO中。

5.2 AC97可变模式
当前帧中包含数据的发送Slot数由前一帧中的SLOTREQ位控制,接收后,SLOTREQ会被存储。
【问题2: SLOTREQ被存储在哪里,若是寄存器中,是哪个寄存器呢?】

【有空时,再了解下AC97的相关内容~~~~】

相关帖子

沙发
FSL_TICS_Jeremy| | 2013-11-14 10:27 | 只看该作者
读书笔记已过半,楼主加油哦!!

使用特权

评论回复
板凳
springvirus|  楼主 | 2013-11-14 10:30 | 只看该作者
FSL_TICS_Jeremy 发表于 2013-11-14 10:27
读书笔记已过半,楼主加油哦!!

加油!!

使用特权

评论回复
地板
FSL_TICS_Jeremy| | 2013-11-14 10:53 | 只看该作者
论坛的中文例程和视频文档昨天更新啊,楼主可以去围观一下哦!!

使用特权

评论回复
5
springvirus|  楼主 | 2013-11-14 10:56 | 只看该作者
稍后就去围观~~

使用特权

评论回复
6
黄小俊| | 2013-11-14 13:10 | 只看该作者
不错,,加油。。。

使用特权

评论回复
7
FSL_TICS_ZJJ| | 2013-11-14 14:16 | 只看该作者
楼主很认真,问题加红啊,便于发现!

使用特权

评论回复
8
springvirus|  楼主 | 2013-11-14 15:03 | 只看该作者
FSL_TICS_ZJJ 发表于 2013-11-14 14:16
楼主很认真,问题加红啊,便于发现!

已加红~

使用特权

评论回复
9
攻城狮| | 2013-11-14 17:46 | 只看该作者
支持一下!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

4558

帖子

14

粉丝