XMC外设学习之USIC

Tip:使能USIC模块时,必须同时采用下列语句同时向寄存器位MODEN和BPMODEN写1完成:

        USIC0_CH1->KSCFG |= (1 << USIC_CH_KSCFG_MODEN_Pos) | (1 << USIC_CH_KSCFG_BPMODEN_Pos);

USIC外设时钟源和Baud Rate生成:

波特率产生

波特率生成器事件和中断:

该中断是基于波特率捕获定时器到达最大值时产生。置位PSR.BRGIF状态标志,产生协议中断。

相关状态标志寄存器和中断选择寄存器

                                                        波特率事件和中断

分数分频器:

1)正常分频模式:(FDR.DM = 01B)

2)小数分频模式(FDR.DM = 10B):

小数分频模式频率最大有一个fPFRIPH周期的频率跳变。

外部频率输入:

        可以通过DX1输入级选择外部频率作为移位寄存器的移位频率输入(DX1CTR.INSW = 0).

                                                                        外部频率选择

                                                        外部频率作为移位波特率时钟

分频模式计数器:

                                                                        分频模式计数器

捕获模式计时器:

        捕获模式计时器可以用于从模式的波特率的测量:例如测量数据的两个边沿(DX0T)或者移位时钟信号(DX1T)

                                                        协议相关计数器

时间量子计数器:

时间量子计数器

 数据传输事件和中断

数据传输事件是建立在数据发送和接收的基础上产生的。相关的标志寄存器在PSR中体现。所有事件可以独立产生相关中断。

1、RBUF0 或者 RBUF1中有新的数据,产生接收事件或者备用接收事件。由PSR.RIF
指示。

2、接收开始事件指示一个数据的接收开始。当在接收时钟边沿检测到新字节的第一位时放生。由PSR.RSIF指示。

3、备用接收事件指示一个特殊的数据字被接收,由RBUFSR.PERR = 1或者PSR.AIF=1
指示。在ASC中指示奇偶检验错误。

4、发送移位事件指示数据已经被发送。发送移位寄存器最后一个位被移除,由PSR.TSIF指示。

5、发送寄存器事件指示数据字发送开始:当TBUF中的一个数据字被装载到移位寄存器,并且新的数据字可以写入TBUF中时放生寄存器事件,由PSR.TBIF指示。在ASC模式下,单次发送模式下TCSR.TDV同时被清楚。

6、数据丢失事件指示早前接收的数据字丢失。如果RBUF中的数据字没有被读出,新接收的数据将覆盖老的数据。由PSR.DLIF指示。

 

数据传输事件和中断处理

 

 发送事件和中断

 

接收事件和中断 

操作数据发送通路:

数据发送由16位的移位寄存器(TSR 和TSR[3:0])和移位缓冲器TBUF组成。发送寄存器控制寄存器SCTR和状态寄存器TCSR。在DOUTx上保持发送数据字最后一位的电平状态,直到下一个数据发送。

发送缓冲器:

发送缓冲器TBUF可以通过写入TBUFx或者FIFO缓冲器载入数据。

发送数据路径

 发送数据移位模式:

        支持同时移动1位、2位、4位,对应的数据字和数据帧的长度就应该是移位数的整数倍。

发送移位寄存器组成

 发送控制信息:

发送控制信息TCI是一个5位数据,由发送缓冲寄存器TBUFx和INx的地址x产生。TCSR中的对应控制决定由TCI控制的信息:字长控制、帧长控制、选择输出控制(SSC)、数据字地址控制(IIS协议)、硬件端口控制(SSC协议)

发送数据有效:

TBUF中是否存在有效的可以发送数据由TCSR.TDV寄存器位标记。根据数据流和事件的组合控制数据是否有效可发送。根据数据有效检测逻辑,发送移位寄存器装载不同的结果。数据有效性验证规则为:

1)如果USIC是主机,只有TBUF中有数据时,数据发送才可以开始

2)如果USIC是从设备时,只要主设备请求发送,从设备就必须发送移位寄存器中的数据。如果移位寄存器中存在有效数据,则发送有效数据。如果移位寄存器中没有有效数据,则发送定义的无效电平(SCTR.PDL定义)。

3)发送门控逻辑控制TBUF中的数据发送。门控信号可以是DX2的硬件输入信号,也可以是软件标志控制。由寄存器位域TCSR.TDEN的设置决定。

4)发送触发逻辑控制数据字的发送,触发信号可以是时钟信号或者引脚输入信号。输入级DX2的输入信号DX2T可以被用于触发信号,触发逻辑由TCSR.TDVTR控制,触发事件由TCSR.TE指示。在RS-232协议中,在DX2上的CTS(clear to send)信号可以用于数据发送的触发。

5)门控逻辑,触发逻辑和DSU的信号组合决定发送数据是否有效。在TBUF中的一个待发送数据字,仅当门控使能、触发信号有效时(TCSR.TDV = 1, TCSR.TE = 1),数据发送。TBUF的内容在发送数据有效或者待发送时,禁止写入新的数据。如果TBUF中的存在有效数据是,如果想重新写入新的数据到TBUF时,需要通过设置FMR.MTDV = 10B来清除TCSR.TDV。TBI和RSI中断只是数据发送已经开始,此时TBUF中可以载入新的数据。

6)TCSR.TDSSM = 0时,设置发送缓冲器TBUF中的数据一直有效。可以一直发送有效数据,避免发送无效电平

7)TCSR.TDSSM = 1,单次模式。每发送一个数据,必须将新的数据写入TBUFx或FIFO寄存器中。

8)当新的数据字被装载到TBUF中,TCSR.TDV自动被置1。可以向TBUFx中写入至少一个地位字节来请求数据发送。

9)位域FMR.MTDV允许软件修改TCSR.TDV。结合门控控制位TCSR.TDEN,用户可以设置发送数据字,而不需要开始数据发送。一个可能编程顺序是:清除TCSR.TDEN = 00B, 写入数据到 TBUFx, 通过位域 FMR.MTDV = 10B,清除标志TCSR.TDV。重新使能 TCSR.TDEN = 01B ,然后通过设置FMR.MTDV = 01B,置位 TCSR.TDV 。

操作FIFO数据寄存器

XMC1300的2个通道共享64个缓冲区项。

FIFO缓冲区获得和选择:

*使能发送缓冲区:CCFG.TB = 1指示

*使能接收缓冲区:CCFG.RB = 1.指示

当TBCTR.SIZE = 0和RBCTR.SIZE = 0时可以禁止缓冲区项。

缓冲区换分:

FIFO缓冲项包含数据部分和控制信息部分(TCI)。

FIFO数据缓冲区的大小必须是2的整数次幂,例如2、4、8.......。FIFO缓冲项的开始位置必须和数据缓冲区大小对齐,比如:数据缓冲区大小为n项,则数据缓冲区开始项目必须是0,n,2*n,3*n。一个数据缓冲区内不允许有没有使用的FIFO项目。

        存储在FIFO中的数据通过指针进行操作,当FIFO中的数据内容发生改变时,指针便被更新。只有在FIFO初始化阶段,将FIFO缓冲项第一个缓冲项的数字标号写入对应的TBCTR和RBCTR的DPTR指针区域(写入DPTR时,RBCTR.SIZE=0或者TBCTR.SIZE=0,禁止FIFO缓冲区)。

发送缓冲器事件和中断

发送FIFO缓冲机制检测到下面的事件,并且产生相应的中断:

#标准发送缓冲区事件

#发送缓冲区错误事件

标准缓冲区事件

        发送缓冲区填充数据水平(TRBSR.TBFLVL)超过(TBCTR.LOF = 1)或者低于(TBCTR.LOF = 0)编程限制值(TBCTR.LIMIT)时,触发标准发送缓冲区事件。

        如果通过TRBSR.STBT标志的事件触发功能被禁止(TBCTR.STBTEN = 0),标准发送缓冲器事件的触发是基于缓冲器填充水平高于或者低于限制值这个变化过程,而不是高于或者低于这个事实。

        如果TBCTR.STBTEN = 1,缓冲器填充水平低于或者高于限制值,将置位TRBSR.STBT标志。当数据传送到TBUF或者INx事件发生时,触发缓冲器标准发送事件。

        TRBSR.STBT标志位的清除是基于触发模式的选择(TBCTR.STBTM):

TBCTR.STBTM=0,当缓冲器填充水平等于限制值时(TRBSR.TBFLVL = TBCTR.LIMIT),通过硬件清除TRBSR.STBT

TBCTR.STBTM=1,当缓冲器填充水平等于缓冲器大小时(TRBSR.TBFLVL = TBCTR.SIZE),由硬件清除TRBSR.STBT

Note,只要发送缓冲器填充水平超过或者低于限制值时,TRBSR.STBI就置位。TRBSR.STBT
触发标准缓冲器事件不置位TRBSR.STBI标志。

发送缓冲器事件

发送缓冲器错误事件

当软件写入满的缓冲器时,发生发送缓冲器错误事件。写入的值被忽略。

发送缓冲器事件和中断处理 

FIFO的TCI发送控制信息的处理

发送控制信息数据TCI可以从FIFO或旁路结构中发送给USIC通道:基于TCI信息,一些USIC的通道设置可以被修改。

TCSR.SELMD = 1
TCSR.WLEMD = 1
TCSR.FLEMD = 1
TCSR.HPCMD = 1
TCSR.WAMD = 1:

接收缓冲器事件和中断

*标准接收缓冲器事件:

        和接收缓冲区的接收水平有关

*备用接收缓冲器事件

        和OUTR数据字中的控制信息RCI有关

*接收缓冲器错误事件

在填充水平模式下的标准接收缓冲事件

        设置填充水平模式:RBCTR.RNM = 0,标准接收缓冲器模式触发:填充水平超(RBCTR.LOF = 1)或低于(RBCTR.LOF = 0)设定值。

当RBCTR.SRBTEN = 0:标准缓冲器事件触发通过填充水平高于或低于设定限制,而非实际等用户限制。

当RBCTR.SRBTEN = 1:填充水平高于或低于设定限值还会置位TRBSR.SRBT,每次新数据从缓冲器中读出事件或者新接收数据填充到缓冲器事件都会触发标准缓冲器事件。SRBT标志位的清除根据RBCTR.SRBTM的设定。或者缓冲器填充水平大于设置限值清除,或者缓冲器填充水平等于设置的缓冲器大小清除。

在RCI模式下的标准和备用接收缓冲器事件

在RCI模式下(RBCTR.RNM = 1):RNM :Receiver Notification Mode。OUTR级中被一个RCI[4]=0的新数据更新时,发生标准接收缓冲器事件。

OUTR机种被一个RCI[4]=1的新数据更新时,发生备用接收缓冲器事件。

接收缓冲器错误事件:

软件读取一个空的缓冲器触发缓冲器错误事件,该事件的产生不管RBCTR.RNM的设置为何。

在填充水平模式下接收缓冲器事件 

在RCI模式下的接收缓冲器事件

接收缓冲器事件和中断处理 

旁路FIFO缓冲器

16位旁路寄存器BYP,旁路控制寄存器BYPCR。旁路数据发送的触发和门控与TBUF中的数据门控与触发相同。

将旁路数据装载到TBUF中的条件:

1)当TCSR.TDV = 0,,TBUF中为空

2)BYPCR.BDENs使能或者满足设定的门控条件

3)旁路数据已经被使能和旁路数据的优先级高于FIFO中的数据,或者FIFO中为空。

4)如果旁路数据有限,但是优先级低于FIFO中的数据,这时,只有当FIFO中的数据发送完毕,才发送旁路数据。

5)如果旁路数据无效和FIFO中存在有效数据,老的FIFO中的数据装载到TBUF中发送。

6)如果既没有旁路数据,FIFO中也没有数据,这TBUF中数据保持不变。

旁路数据有效

BYPCR.BDSSM = 1:单次触发,数据装载到TBUF中后,旁路数据即变为无效

BYPCR.BDSSM = 0,旁路数据一直有效,可以多次触发。
 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值