36.1 Feature List
介绍ASCLIN模块的特性。
General Features
16 字节发送先入先出队列(TxFIFO)。
16 字节接收先入先出队列(RxFIFO)。
发送和接收先入先出队列的打包 / 解包功能。
中断生成:
基于可配置的发送先入先出队列级别。
基于可配置的接收先入先出队列级别。
在错误条件下(帧错误、奇偶校验错误、溢出错误)。
在各种模块内部事件下(异步串行通信 / 串行外设接口(ASC/SPI)帧结束、LIN 事件)。
中断信号能够触发中央处理器(CPU)或直接内存访问(DMA)。
每比特可编程的 4 到 16 次过采样。
可编程的采样点位置。
对输入比特流可编程的数字毛刺滤波器和中值滤波器。
在异步串行通信和 LIN 模式下,最低有效位优先的移位方向;在 SPI 模式下,可编程为最低有效位或最高有效位优先。
内部回环模式。
Standard ASC Features
全双工异步操作模式:
7 位、8 位或 9 位(或最多 16 位)数据帧,最低有效位优先。
奇偶校验位生成 / 检查。
一个或两个停止位。
最大波特率为 fA/16(在 100MHz 的 fA 模块时钟下为 6.25MBaud)。
最小波特率为 fA/268435456(在 100MHz 的 fA 模块时钟下为 0.37Baud)。
可选的请求发送 / 清除发送(RTS/CTS)握手信号。
Extended ASC Features
每比特可编程的 4 到 16 次过采样:
模块能够实现高达标准异步串行通信(ASC)4 倍的波特率(fA/4)。
系统考虑因素如焊盘类型、输入信号质量和累积的锁相环(PLL)抖动可能会导致在可用过采样比率方面受到限制(例如 fA/8 = 200MHz/8 = 25MBaud)。
可编程的采样点位置。
LIN Features
支持以下版本:
LIN(Local Interconnect Network,本地互联网络)1.3 版本。
LIN 2.0 版本。
LIN 2.1 版本。
LIN 2.2 版本以及
J2602。
具有以下特性:
断点检测。
断点注入。
同步字段生成。
基于同步字段测量的自动波特率检测。
可选的冲突检测(LIN 2.1 版本需要)。
LIN 看门狗:
报头超时。
帧或响应超时。
零 / 一卡住监测。
总线空闲时间监测。
唤醒功能。
主模式下最小的 CPU 负载:单个中断指示帧结束。
从模式下最小的 CPU 负载:
在报头接收结束时产生单个中断。
在响应结束或帧结束时产生单个中断。
支持标准操作,即每发送或接收一个字节产生一个中断
SPI Features
SPI 主模式(从模式不被支持)
四线或三线模式(带有 / 不带有从设备选择输出信号)。
数据宽度可达 16 位。
全双工和半双工模式。
最小波特率为 fA/268435456 MBaud(在 100MHz 的 fA 模块时钟下为 0.37Baud)。
最大波特率为 fA/4 MBaud(在 100MHz 的 fA 模块时钟下为 25MBaud)。
可编程的前沿和后沿延迟。
36.2 Overview
本节显示了当用作标准ASC、LIN或SPI主控时,模块的基本子块。
注释:
冲突检测仅在 LIN 规范 V2.1 中是强制要求的。
在 LIN 模式下,为了使 ASCLIN 模块正常工作,ARX 和 ATX 信号都必须连接到 LIN 总线。
36.3 Functional Description
36.3.1 External Signals
ASCLIN 模块提供以下外部信号:
串行时钟输出 ASCLK。
接收数据输入 ARX(在 SPI 模式下为主接收 MR 输入)。
发送数据输出 ATX(在 SPI 模式下为主发送 MT 输出)。
从设备选择信号输出 ASLSO。
请求发送握手输出 ARTS。
清除发送握手输入 ACTS。
36.3.2 User Interface
用户界面包含一个发送先入先出队列(Tx FIFO)和一个接收先入先出队列(Rx FIFO)。
它们提供以下服务:接收与灵活外设接口(FPI)总线宽度最优化的数据分组,并将其打包成串行帧;缓冲 FPI 总线数据;管理握手信号。这些功能旨在优化该模块在本地互联网络(LIN)、高速异步串行通信(ASC)和串行外设接口(SPI)模式下的使用。它们也优化了该模块在标准异步串行通信模式下的使用。
36.3.2.1 TxFIFO Overview
Tx FIFO能够将来自FPI总线的16位写入打包为两个8位帧或一个16位帧。它还具有将来自FPI总线的32位写入打包到四个8位或两个16位帧的能力。
写入发送先入先出(TxFIFO)的字节数总是由 TXFIFOCON.INW(发送 FIFO 配置寄存器)定义,与串行外设总线(SPB)写入宽度无关,并且二者应相等。
如果 SPB 写入宽度比 INW 短,则缺失部分用零填充。
如果 SPB 写入宽度比 INW 长,则超出部分将丢失。
在移位寄存器端,总是根据数据宽度字段 DATCON.DATLEN(数据配置寄存器)所需的字节数清空 TxFIFO。
“入口宽度与 SPB 写入宽度” 表描述了所有可能的写入(填充)组合。将被填充到 TXFIFO 中的字节标记为 A、B、C、D 和 0。
36.3.2.2 Using the TxFIFO
Tx FIFO能够将来自FPI总线的16位写入打包为两个8位帧或一个16位帧。
注意:一些(但不是全部)用例将在下面的章节中描述。软件可以根据需要随时访问8位、16位或32位宽的TXFIFO。
ASC模块的一种不太常见的操作模式是传输9位值,包含9位数据或8位数据。FPI总线访问应该是16位宽,并且有BS0和BS1 (Byte Select 0和1)信号活动。
移位寄存器在读指针和读指针+ 1的位置被两个8位值填充。
传输数据被写入地址TXDATA(传输数据寄存器)。Tx_Inlet_Width为16位,Tx_Outlet_Width为16位。
36.3.2.2.2 High Speed ASC Mode
为了通过不对7位或8位值使用32位移动来减少FPI总线负载,一种选择是用包含4个8位宽值的32位宽访问填充FIFO。所有字节选择信号BS[3:0]都是活动的,并且所有四个字节都在一个周期内写入TX FIFO。同时,TXFIFO的写指针跳4。
传输数据被写入地址TXDATA(传输数据寄存器)。Tx_Inlet_Width是32位,Tx_Outlet_Width是8位。
36.3.2.2.3 LIN Mode
在LIN模式下,几个8位帧之前有一个低断脉冲。
中断脉冲的产生是可编程的,以位为单位的6位定时器,其中可以产生宽范围的中断脉冲,例如在13到26位之间的范围内(最多64位,但这些长度会违反最大LIN报头长度)。中断脉冲的检测是可编程的,以位为单位的8位定时器。其中,可以设置10和11位时间的标准阈值。
脉冲由模块内部定时器产生。传输序列包括用适当的字节填充已停止的TXFIFO(传输数据寄存器),然后启动中断脉冲,激活TXFIFO。
传输数据被写入地址TXDATA(传输数据寄存器)。Tx_Inlet_Width可以是8位(或16位,或32位),Tx_Outlet_Width是8位。
36.3.2.2.4 SPI Mode
SPI模式最常用于发送或接收8位或16位长度的数据,或介于两者之间的某些长度。因此,读出的Tx FIFO必须是8或16位宽,写可以是16位宽,甚至32位宽,如果两个帧被包装在一个FPI总线访问。
传输数据被写入地址TXDATA(传输数据寄存器)。Tx_Inlet_Width最大32位,Tx_Outlet_Width最大16位。
36.3.2.3 TXFIFO Interrupt Generation
TXFIFO(发送先进先出队列)提供三种中断生成模式,由位字段 TXFIFOCON.FM(TX FIFO 配置寄存器)进行选择。
“单次移动模式”
“批量移动模式”
“组合模式”
RXFIFO和TXFIFO可以独立地使用中断产生模式。
Single Move Mode
单次移动模式的目的是尽可能保持 TXFIFO(发送先进先出队列)处于满的状态,一旦有空闲元素就通过向其写入数据来重新填充 TXFIFO。
单次移动模式主要支持使用每次 TXFIFO 中断进行单次移动的 DMA(直接内存访问)操作。在这种模式下,DMA 使 TXFIFO 保持满的状态。每次对 TXFIFO 执行写入操作且至少有一个空元素可用时,就会触发一次 DMA 请求。
如果写入操作:
“使 TXFIFO 变满(没有更多的空元素),或者”
“考虑到 TXFIFOCON.INW(TX FIFO 配置寄存器),下一次写入会使 TXFIFO 溢出”,
为防止溢出,此时不会产生中断。中断会在稍后移位寄存器从 TXFIFO 读取一个元素,使得 TXFIFO 不再完全满,足以接受一个 INW 宽度的元素时产生。
图 423 展示了 TXFIFO 的填充水平,以及与每个填充水平相关的事件,这些事件触发 TXFIFO 重新填充中断。
为了在电源开启复位后启动重新填充中断链中的第一个中断,软件必须执行一次对 TXFIFO 的写入操作,或者通过在 TXFIFO 中断节点中设置中断标志。之后,(直接内存访问)中断链将自我维持,直到整个事务结束。
注意:在单次移动模式下,多次软件写入或块 DMA 移动将导致多个中断和(错误的)事务丢失事件。因此应避免这样做 —— 只应使用单次移动。在单次移动模式下,当 TXFIFO 几乎满了(下一次写入操作会使 TXFIFO 变满)或者当 TXFIFO 已满时,对 TXFIFO 的刷新操作将触发一个中断(FLAGS.TFL)。
批量移动模式
批处理移动模式支持以下用例:
“CPU为TXFIFO服务。
批处理移动模式的目的是通过在多个TXFIFO元素为空时触发中断来减少中断的数量。例如,CPU可以不频繁地中断,并且每次中断可以执行多个移动。
在批量移动模式下,只有在 TXFIFO 的填充水平下降到或低于编程阈值(如 TXFIFOCON.INTLEVEL 中所描述)时,才会在 TXFIFO 的一个特定点生成中断,这意味着至少有预定义数量的空 TXFIFO 元素可用。
注意:TXFIFO必须重新填充,直到填充级别上升到中断阈值以上(通过轮询填充级别来确保),以保证下一次中断将发生。
在高波特率和短帧的情况下,有可能在 TXFIFO 被重新填充之前已经传输了几个帧。例如,如果阈值设置为三个满元素,那么当填充水平下降到低于三个时,中断将被设置,从而使两个元素变为空闲状态。如果 TXFIFO 的重新填充时刻被延迟得足够长,以至于已经传输了两个帧,那么 TXFIFO 将变为空,并且两个元素的重新填充序列将无法达到三个元素的水平。因此,除非对填充水平进行轮询并且 CPU 在循环中不断进行重新填充,直到超过阈值(理想情况下,每次批量移动都会使 TXFIFO 完全被填充),否则下一个中断将***不会到来。
组合(兼容)模式
当填充水平下降到 INTLEVEL 或更低时,每次从 FIFO(先进先出队列)中取出一个数据字节时,就会产生一个中断,如 TXFIFOCON.INTLEVEL(TX FIFO 配置寄存器)中所定义。这是与 ASCLIN 模块的先前版本兼容的模式,并在 TXFIFOCON.INTLEVEL 位字段中进行了描述。
36.3.2.4 RxFIFO Overview
Rx FIFO有能力将两个8位以内的帧或一个16位以内的帧打包成一个16位写入到FPI总线。它还具有将4个8位或2个16位帧打包成一个32位写入FPI总线的能力。
从 RxFIFO(接收先进先出队列)中取出的字节数始终是 RXFIFOCON.OUTW(RX FIFO 配置寄存器)所定义的数量,它不依赖于 SPB 总线读取宽度,而通常情况下 SPB 总线读取宽度应等于 OUTW。
如果 SPB 读取宽度比 OUTW 短,那么多余的部分将丢失。
如果 SPB 读取宽度比 OUTW 长,那么缺少的部分将用零填充。
在移位寄存器一侧,RxFIFO 总是根据数据宽度字段 DATCON.DATLEN(数据配置寄存器)的需要填充相应数量的字节。
“输出宽度与 SPB 读取宽度对照表” 描述了所有可能的组合。RxFIFO 中的字节被命名为 A、B、C 和 D,A 是第一个被取出的字节。填充字节为 0。
注意:在出现下溢的情况下,即当对 RXDATA(接收数据寄存器)进行读取访问,并且由 RXFIFOCON.OUTW(RX FIFO 配置寄存器)的设置所确定的要从 FIFO 中取出的字节数超过了实际存储在 FIFO 中的字节数(如 RXFIFOCON.FILL 所指示),那么 RXFIFO 将提供可用的数据,并在达到读取访问宽度时用零填充。然而,数据仍保留在 FIFO 中,并且 RXFIFOCON.FILL 的填充水平不会改变。为了移除数据,用户软件必须刷新 RXFIFO。此时,FLAGS.RFU(标志寄存器)位被设置。
36.3.2.5 Using the RxFIFO
36.3.2.5.1 Standard ASC Mode
接收的数据从地址 RXDATA(接收数据寄存器)读取。
如果数据宽度为 7 或 8 位,且 Rx_Outlet_Width(接收输出宽度)为 8 位时,对该地址进行一次读取将提供一个字节的数据,并使 FIFO(先进先出队列)减少一个元素。此时 Rx_Inlet_Width(接收输入宽度)为 8 位。
如果数据宽度为 9 位,且 Rx_Outlet_Width 为 16 位时,对该地址进行一次读取将提供两个字节的数据,并使 FIFO 减少两个元素。此时 Rx_Inlet_Width 为 16 位。
36.3.2.5.2 High Speed ASC Mode
接收的数据从地址 RXDATA(接收数据寄存器)读取。
如果数据宽度为 7 或 8 位,且 Rx_Outlet_Width(接收输出宽度)为 32 位时,对该地址进行一次读取可以提供(一个、两个或)四个字节的数据,并使 FIFO(先进先出队列)减少四个元素。此时 Rx_Inlet_Width(接收输入宽度)为 8 位。
36.3.2.5.3 LIN Mode
接收的数据从地址 RXDATA(接收数据寄存器)读取。如果读取数据宽度为 8 位(或 16 位或 32 位),且 Rx_Outlet_Width(接收输出宽度)为 8 位时,对该地址进行一次读取将提供一个字节的数据,并使 FIFO(先进先出队列)减少一个元素。此时 Rx_Inlet_Width(接收输入宽度)为 8 位。
36.3.2.5.4 SPI Mode
接收的数据从地址 RXDATA(接收数据寄存器)读取。如果数据宽度为 16 位,且 Rx_Outlet_Width(接收输出宽度)为 16 位时,对该地址进行一次读取将提供两个字节的数据,并使 FIFO(先进先出队列)减少两个元素。此时 Rx_Inlet_Width(接收输入宽度)为 16 位。
36.3.2.6 RTS / CTS握手
当 RXFIFO(接收先进先出队列)几乎满时,接收器会停用 RTS(请求发送)输出信号,以避免其过载。当 RXFIFO 开始清空时,例如通过 DMA(直接内存访问),并且填充水平下降到阈值水平以下时,RTS 输出会再次被激活。阈值水平固定为 RXFIFO 大小减去四,以便支持字节、两个字节和四个字节的 DMA 传输。
发送器在其 CTS(清除发送)输入上接收接收器的 RTS 输出,并相应地暂停和恢复传输。
36.3.2.7 RXFIFO Interrupt Generation
RXFIFO(接收先进先出队列)提供三种中断生成模式,由位字段 RXFIFOCON.FM(RX FIFO 配置寄存器)进行选择:
“单次移动模式”;
“批量移动模式”;
“组合(兼容)模式”。
Single Move Mode
单次移动模式的目的是尽可能保持 RXFIFO(接收先进先出队列)为空,通过尽快逐个获取接收到的元素。
单次移动模式主要支持使用每次 RXFIFO 中断进行单次移动的 DMA(直接内存访问)操作。在这种模式下,DMA 使 RXFIFO 尽可能保持为空。每次从 RXFIFO 进行读取操作且 RXFIFO 之后仍然不为空时,就会触发一次 DMA 请求。
如果读取操作:
“使 RXFIFO 变空,或者”
“考虑到 RXFIFOCON.OUTW(RX FIFO 配置寄存器),下一次读取会使 RXFIFO 下溢”,
为防止下溢,此时不会产生中断。中断会在稍后移位寄存器向 RXFIFO 写入一个元素,使得 RXFIFO 有足够的元素来提供一个 OUTW 宽度的元素时产生。
图 432 展示了 RXFIFO 的填充水平,以及与每个填充水平相关的事件,这些事件触发 RXFIFO 重新填充中断。
初始的 RXFIFO 中断是由移位寄存器在交付第一个接收到的元素后触发的。之后,重新获取中断的 DMA 触发链将自我维持,直到整个事务结束。在 DMA 事务结束时,由于对 RXFIFO 中的最后一个元素的读取不会触发中断,所以服务请求节点中不会有剩余的活动服务请求。
注意:在单次移动模式下,多次软件读取或块 DMA 移动会导致多个中断和(错误的)事务丢失事件。因此应避免这样做 —— 只应使用单次移动。
批量移动模式
批量移动模式的目的是通过在有多个 RXFIFO 元素已满时触发中断来减少中断的数量。例如,CPU(中央处理器)可以更少地被中断,并且可以在每次中断时执行多次移动。
批量移动模式支持以下用例:
“CPU 处理 RXFIFO”。
在批量移动模式下,只有在 RXFIFO 的填充水平上升到或高于编程阈值时,才会在 RXFIFO 的一个特定点生成中断,这意味着至少有预定义数量的满的 RXFIFO 元素可用。该描述涉及 RXFIFOCON.INTLEVEL(RX FIFO 配置寄存器)的解释值(寄存器值 +1)。
注意:必须确保 CPU 持续清空 RXFIFO 并轮询 RXFIFO 的填充水平,直到填充水平下降到中断阈值以下(或 RXFIFO 为空),以确保下一个中断会发生。
在高波特率和短帧的情况下,有可能在 RXFIFO 被重新清空之前已经接收了多个帧。例如,如果阈值设置为两个满元素,那么当填充水平上升到高于两个时,中断将被设置。如果 RXFIFO 的清空时刻被延迟得足够长,以至于又接收了两个帧,那么 RXFIFO 将变为满,并且两个元素的重新清空序列将无法达到两个元素的水平。所以,下一个中断将***不会到来。这种情况在阈值水平为 3 和 4 时不会发生。阈值水平为 1 是可能的,但没有太大意义(此时应使用单次移动模式)。
组合(兼容)模式
当填充水平上升到 INTLEVEL 或更高时,每次有一个数据字节被传送到 FIFO(先进先出队列)时,就会产生一个中断,如 RXFIFOCON.INTLEVEL(RX FIFO 配置寄存器)中所定义。该描述涉及 RXFIFOCON.INTLEVEL 的解释值(寄存器值 +1)。这是与 ASCLIN 模块的先前版本兼容的模式,并在 RXFIFOCON.INTLEVEL 位字段中进行了描述。
36.3.3 Clock System
时钟系统生成 ASCLIN 模块正常运行所需的所有时钟:数字滤波器时钟、过采样时钟、位时间和串行 SPI 时钟。
用于时钟系统的时钟 fA 独立于 SPB 总线时钟,并且如果 SPB 总线时钟发生变化(例如在节能场景中),它保持恒定。位字段 CSR.CLKSEL(时钟选择寄存器)选择 fA 频率的时钟源,该时钟源可以是同步或异步的,高于或低于 SPB 总线频率。
36.3.3.1 Baud Rate Generation
分数分频器、n 分频器以及具有可配置采样点的过采样分频器。
以下位字段可用于配置 28 位波特率分频器链:
“BITCON.PRESCALER(位配置寄存器)—— 预分频器的分频比”;
“BRG.NUMERATOR(波特率生成寄存器)—— 分数分频器的分子”;
“BRG.DENOMINATOR(波特率生成寄存器)—— 分数分频器的分母”;
“BITCON.OVERSAMPLING(位配置寄存器)—— 波特率后分频器的分频比”。
从 fA 到 fSHIFT(波特率)的生成频率链的计算如下:
fPD = fA / (BITCON.PRESCALER + 1);
fOVS = fPD * BRG.NUMERATOR/ BRG.DENOMINATOR;
fSHIFT = fOVS / (BITCON.OVERSAMPLING + 1)。
注意:分数分频要求 BRG.NUMERATOR(波特率生成寄存器中的分子)小于或等于 BRG.DENOMINATOR(波特率生成寄存器中的分母)。
总体公式如下:
36.3.3.2 位定时特性
ASCLIN 模块提供了对位过采样、采样点和输入信号滤波特性的灵活编程。
对于输入位流的过采样因子可配置为每个位 4 到 16 个时钟滴答(或时间量子)。同时,使用过采样频率,可以启用数字中值滤波器来过滤输入位流。滤波使用标准的三取二多数表决程序。如果滤波器被禁用,那么每个位仅被采样一次。
采样点也是可配置的,并且应与过采样因子结合使用。一种标准设置是 16 倍过采样,并使用样本 7、8 和 9 作为数据。另一种可能的设置可以是 8 倍过采样,并使用样本 3、4 和 5 作为数据。
以下位字段可用于配置位特性:
“BITCON.PRESCALER(位配置寄存器)—— 十二位整数分频器,定义分数分频器用于生成波特率的微时钟滴答,以及用于 RX 输入信号去抖动的数字滤波器的微时钟滴答。”
“BITCON.SAMPLEPOINT(位配置寄存器)—— 定义采样点位置的位字段,以及 SPI 模式下的占空比。”
“BITCON.SM(位配置寄存器)—— 该位启用数字中值滤波器(三取二多数表决):每个位 1 或 3 个样本。”
“IOCR.DEPTH(输入和输出控制寄存器)—— 定义浮动平均滤波器深度的位字段:关闭或 1 到 63 个微时钟滴答。”
“BITCON.OVERSAMPLING(位配置寄存器)—— 定义每个位的时钟滴答数的位字段,范围为 4 到 16。这是位于分数分频器之后的后分频器。”
一般情况下,采样点应置于位的中间位置。如果波特率(振荡器频率)不是非常精确和稳定,这个位置是最优的。
如果振荡器精度非常高,通常在由石英振荡器驱动的两个微控制器进行通信时会出现这种情况。但是如果使用开漏半双工连接,信号边缘会非常不对称。在这种情况下,将采样点移动到位的后半部分的某个位置可能是有利的。开漏连接通常会导致 “0” 位比 “1” 位更长。在这种情况下,优化采样点意味着将其放置在较短的 “1” 位的中间。
最后,振荡器精度、边缘不对称性以及用于冲突检测的环路延迟的不同组合会导致采样点的不同最佳位置。
36.3.4配置数据帧
作为发送器和接收器均可适用,奇偶校验方案在 FRAMECON.ODD(帧控制寄存器)位字段中进行配置,数据长度在 DATCON.DATLEN(数据配置寄存器)位字段中进行配置,停止位在 FRAMECON.STOP(帧控制寄存器)位字段中进行配置。
36.3.5 其他配置
Loop - back
36.3.6 Synchronous Mode
在同步模式下,该模块支持先设置移位边沿,再设置锁存边沿的 SPI 设置,参见图 438。通过使用位字段 FRAMECON.MODE(帧控制寄存器)将模块设置为同步模式。
36.3.6.1 Baud Rate and Clock Generation
在同步模式下,波特率和时钟生成通常使用与异步模式相同的计数器和原理。它使用相同的预分频器、分数分频器以及具有可配置采样点的过采样分频器。唯一的区别是移位时钟作为输出信号在引脚 SCLKO 上驱动。如果需要对称的移位时钟,过采样比率应为偶数,并且采样点应设置为过采样比率的一半(参见位配置寄存器)。时钟极性在位 IOCR.CPOL(输入和输出控制寄存器)中进行配置。
36.3.6.2配置数据帧
前导延迟和尾随延迟在位字段 FRAMECON.LEAD(帧控制寄存器)和 FRAMECON.STOP 中进行配置。空闲阶段持续时间在位字段 FRAMECON.IDLE 中进行配置。2 到 16 位的数据长度在位字段 DATCON.DATLEN(数据配置寄存器)中进行定义。
36.3.6.3从端选择配置
SPI 主设备会为每个数据字自动激活从设备选择输出信号。从设备选择的极性可以通过使用 IOCR.SPOL(输入和输出控制寄存器)进行配置。
36.3.6.4其他配置
Loop - back
36.3.7 LIN支持
ASCLIN 模块为 LIN 协议提供硬件支持。
它支持所有四种基本的 LIN 事务:
“TxH - 发送帧头”;
“TxR - 发送响应”;
“RxH - 接收帧头”;
“RxR - 接收响应”。
通过额外支持这些基本事务的组合,该模块实际上支持所有的 LIN 用例:作为 “LIN 主设备” 或 “LIN 从设备” 发送和接收帧头及响应。
LIN 主设备参与三种基本事务:TxH、TxR、RxR。它从不参与 RxH,因为主设备从不接收帧头,它只发送帧头。
LIN 从设备也参与三种基本事务:RxH、TxR、RxR。它从不参与 TxH,因为从设备从不发送帧头,它只接收帧头。
每个基本事务都需要一些硬件资源才能在最小的 CPU 干预下完成。以下是每个事务的任务列表,由硬件支持,以及所需的硬件资源:
“TxH - 发送帧头 - 仅主模式”:
中断生成:6 位位字段,以位为单位定义中断长度;
同步字段生成:硬编码的 55H 字节;
带有中断生成的标识符传输。
“TxR - 发送响应 - 主模式和从模式”:
字节数参数:长度为 4 的位字段;
校验和生成:硬件引擎,支持经典和增强校验和,可以启用或禁用。
“RxH - 接收帧头 - 仅从模式”:
可选的自动波特率检测:具有可编程分子和分母的分数分频器;
字节数参数:长度为 4 的位字段;
在帧头结束时产生中断(用于为 RxR 阶段设置字节数);
溢出时的超时:8 位定时器。
中断检测:具有以位为单位的可编程阈值的 8 位定时器。
“RxR - 接收响应 - 主模式和从模式”:
字节数参数:长度为 4 的位字段;
校验和检测:支持经典和增强校验和的硬件,可以启用或禁用;如果启用,校验和错误将被标记,并且可以触发错误中断;
校验和:接收到的校验和可选择地在接收先进先出队列(RXFIFO)中提供;
溢出时的超时:8 位定时器。
36.3.7.1 LIN Watchdog
LIN 看门狗监视帧头、帧或响应的持续时间以及中断脉冲的出现。它对照预定义的时间限制进行检查。如果违反了这些限制,就会产生超时中断。
LIN 看门狗在从模式下是必要的。
唤醒脉冲的生成是使用移位寄存器和一个适当的数据字节(包含几个连续的零位)来执行的。唤醒脉冲的检测是通过下降沿检测来完成的。
为了监视总线的长时间空闲或零状态,有上升沿和下降沿标志可用。这些标志可以用一些适当的时间栅格(在微秒或毫秒范围内)进行轮询。
帧头超时值在模块初始化时是已知的,并且对于所有帧保持不变。帧或响应超时值取决于响应的长度(1 到 8 个字节),并且必须在接收到帧头后由软件根据接收到的标识符进行设置。这个超时的初始值应该由软件设置为定时器允许的最大值,即 256。
该模块提供并行运行的定时器块,根据LIN协议的特定时序要求执行看门狗功能。
36.3.7.1.1 LIN 中断、唤醒、卡住处理
本小节描述:
“LIN 总线的监测”;
“中断脉冲的检测和生成” 以及
“唤醒脉冲的检测和生成”。
通过提供位字段 FLAGS.RED(标志寄存器)和 FLAGS.FED 来支持对总线长时间空闲期(或卡住期)的监测。例如,在由操作系统或定时器定义的某个时间栅格内(例如每 1 毫秒或每 10 毫秒)定期轮询这些字段,可以用于检测例如在 150 毫秒到 10 秒范围内的非常长的非活动期。此外,通过使用 FLAGSENABLE(标志使能寄存器)中的相应使能位可以启用边沿中断。可以通过使用 FLAGSSET(标志设置寄存器)和 FLAGSCLEAR(标志清除寄存器)寄存器由软件来设置和清除标志。
注意:低电平中断或唤醒脉冲不会导致一个虚拟字节被传输到接收先进先出队列(FIFO)中,也不会引起帧违规错误中断。在脉冲之后,移位寄存器进入初始状态并等待下一帧起始位的下降沿。
中断和唤醒脉冲检测
中断脉冲的检测是将其定义为具有至少 13 个位时间的低电平脉冲,使用 10 或 11 个位时间的阈值进行检测。中断检测阈值通过位字段 LINBTIMER.BREAK(LIN 中断定时器寄存器)进行设置。
在帧中的任何位置检测到中断脉冲都会将 LIN 状态机重置为 “中断定界符检测到” 状态 BDD,并且整个序列(包括看门狗超时计数)从头开始。
注意:在帧中的任何位置检测到中断脉冲可能会导致设置帧错误标志(FE)。
低电平唤醒脉冲的检测是在睡眠模式下通过监测总线的下降沿来完成。如果要抑制早期唤醒,可以使用参数 IOCR.DEPTH(毛刺滤波器)(输入和输出控制寄存器)。
中断和尾流脉冲产生
生成的中断低电平脉冲持续时间由位字段 LINBTIMER.BREAK(LIN 中断定时器寄存器)定义,范围为 1 到 64 位。
唤醒低电平脉冲的标称长度为 5 个位时间,但可以通过在发送先进先出队列(TXFIFO)中写入适当的字符,并通过设置标志寄存器中的 FLAGS.TWRQ 将其作为唤醒脉冲请求发送,从而设置为 1 到 9 之间的任何值。
注意:注入低电平脉冲会禁用移位寄存器的接收,因此这个低电平脉冲不会被检测到或被视为正常的 ASCLIN 帧。
36.3.7.1.2 LIN报头和响应定时器
LIN 帧头和响应时间可以分别进行监测。
“帧头持续时间测量”:
在主模式下,时间测量的起始点是中断脉冲的下降沿。
在从模式下,时间测量的起始点是检测到正在进行中断脉冲的时刻,即检测到一个长度大于等于在 LIN 中断定时器寄存器(LINBTIMER)中配置的 10 或 11 个位时间的低电平脉冲的时刻。
“响应持续时间测量”:
在主模式和从模式下,响应持续时间测量从帧头结束时开始,到响应结束时结束。
注意:发送的主节点可以选择监测自己的帧头或响应超时,以便检测一些错误情况,例如发送先进先出队列(TXFIFO)不包含要发送的标识符或数据。然而,这些错误情况也可以通过其他方式检测到。
根据数据配置寄存器(Data Configuration Register)中位 DATCON.RM 的设置,DATCON.RESPONSE 位字段定义响应或帧持续时间阈值。
36.3.7.2 LIN Master Sequences
下面描述的序列是如何执行基本LIN事务的示例。还有其他方法可以做到这一点,例如通过使用其他事件来控制协议流:fifo级事件而不是报头/响应结束事件。下面的列表用括号表示了一些备选方案。
在LIN主模式下初始化模块
具体参考数据手册1634页。
仅发送帧头(主设备任务)。
具体参考数据手册1634页。
对最新的帧头发送响应(从设备任务):
具体参考数据手册1635页。
接收对最新帧头的响应(从设备任务):
具体参考数据手册1635页。
忽略最新帧头(从设备任务):
具体参考数据手册1635页。
要启动一个由发送帧头以及发送或接收响应组成的事务,从而构成一个完整的 LIN 帧(主节点):
具体参考数据手册1636页。
36.3.7.3 LIN Slave Sequences
下面描述的序列是基本 LIN 事务如何执行的示例。还有其他方法可以执行这些事务,例如使用其他事件来控制协议流程:使用先进先出队列(FIFO)级别事件而不是帧头 / 响应结束事件。在下面的列表中,一些替代方法用括号表示。
以从模式初始化模块:
具体参考数据手册1637页。
配置以接收帧头(从设备任务):
具体参考数据手册1637页。
36.3.7.4 使用 ENI 和 HO 位
ENI(Enable Input,输入使能)位和 HO(Header Only,仅帧头)位都会影响 LIN 帧中各种字节类型的接收。
HO 位通常在应忽略帧的响应部分的情况下使用;模块等待下一个中断信号。ENI 位可以由用户软件设置,但在从模式下接收同步字节后也会由硬件设置,以便在接收先进先出队列(RXFIFO)中启用帧头的标识符字节的传输。
36.3.7.5 LIN 错误恢复
本节描述了在接收和发送 LIN 帧期间检测到错误时模块的行为。
接收相关错误
接收错误时,接收状态机进入“等待中断”状态,并触发相应的中断。
标识符奇偶校验错误;
校验和错误;
超时错误;
帧格式错误;
波特率错误。
传输相关错误
冲突错误(LIN2.1 强制要求)。如果启用了冲突检测机制(设置帧控制寄存器 FRAMECON.CEN),则该帧将被中止,并且发送器状态机进入空闲状态。
36.3.7.6 LIN Sleep and LIN Wake-Up
模块可以生成持续时间为 250 微秒到 5 毫秒的唤醒低脉冲。
持续时间超过 150 微秒的唤醒低脉冲可以唤醒处于睡眠状态的模块。
已接收到唤醒脉冲的主节点可以开始轮询从设备,它可以开始发送中断脉冲和帧头,并发送或接收相应的响应。
被唤醒的从设备应能够在最多 100 毫秒的唤醒时间后接收 LIN 帧头。发出唤醒脉冲的从设备期望在唤醒脉冲结束后的 150 毫秒到 250 毫秒内接收到帧头。如果没有收到帧头,从设备将再次发出唤醒脉冲。
36.3.8 自动波特率检测
在接收LIN报头中的同步字段期间,自动波特率检测在从属模式下是活跃的。它测量了55H同步场中两个降边之间的最长时间间隔。测量值被加载到小数分频器的分母中,如果启用了自动波特率使用(LINCON),则随后用于生成该帧提醒的波特率。ABD = 1) (LIN控制寄存器)。
以下位域可用于监测自动波特率检测:
“BRD.MEASURED(测量值)—— 同步字节的第一个下降沿和第五个下降沿之间的测量时间间隔。
“BRD.UPPERLIMIT(上限值)—— 如果 LIN 自动波特率检测测量出的波特率比标称值低 14%,即测量出的时间间隔长于上限值,则会触发波特率错误事件,如果启用,将产生中断。
“BRD.LOWERLIMIT(下限值)—— 如果 LIN 自动波特率检测测量出的波特率比标称值高 14%,即测量出的时间间隔短于下限值,则会触发波特率错误事件,如果启用,将产生中断。
自动波特率操作
BRD.UPPERLIMIT 定义了 8 位在微节拍中的最大允许持续时间,从而确定了最小允许波特率。为了定义比标称波特率低 14% 的情况,必须在 UPPERLIMIT 位域中输入比标称值长 16% 的 8 位持续时间。这是因为波特率等于 1 / 位时间,而 UPPERLIMIT 定义了时间。
BRD.LOWERLIMIT 定义了 8 位在微节拍中的最小允许持续时间,进而确定了最大允许波特率。为了定义比标称波特率高 14% 的情况,必须在 LOWERLIMIT 位域中输入比标称值短 12% 的 8 位持续时间。这同样是因为波特率等于 1 / 位时间,而 LOWERLIMIT 定义了时间。
如果自动波特率检测被激活,分数分频器会使用分子值为 8×(BITCON.OVERSAMPLING + 1)(位配置寄存器),并且忽略 BRG.NUMERATOR(波特率生成寄存器)位域。对于标准 LIN 协议的 16 倍过采样(BITCON.OVERSAMPLING = 15),内部使用的分子值为 128,同时也忽略 BRG.NUMERATOR 位域。不过,在 BRG.NUMERATOR 中编程为 128 或 8×(过采样 + 1) 可能会提高软件的清晰度。
关于分数分频器的分母,它在 BRG.DENOMINATOR(波特率生成寄存器)中定义。其初始值为标称值,由应用软件设置。在模块运行期间,只要 BRD.MEASURED 值在限制范围内,它就会自动加载到分数分频器的分母中。
注意:为了确保分数分频器的正确行为,必须确保分子值(即 8×(过采样 + 1))小于或等于由自动波特率检测机制计算得出的分母值(BRD.MEASURED)。硬件未实现任何检查。
自动波特率检测以 TSYS 为单位测量同步字段的第一个下降沿和第五个下降沿之间的时间,并将这个数字加载到分母中。LIN 协议使用的波特率范围在 2400 波特到 19200 波特之间。在 19.2KBaud 的波特率下,预期时间为 8×52.1 微秒 = 416.8 微秒,在 TA = 10 纳秒时,预期的分母值在 417 微秒 / 10 纳秒 = 41700 的范围内。
分子在内部以 8 位的时间量子运行,对于 LIN 协议进行 16 倍过采样:8×16 = 128。波特率生成寄存器(BRG.NUMERATOR)位域被忽略。
36.3.9 碰撞检测
碰撞检测在 LIN 模式和半双工 SPI 模式下监测传输字节与回传接收字节的一致性。
36.3.10 LIN协议控制
存在一个中央的 LIN 协议状态机。它与接收器和发送器移位寄存器、发送和接收先入先出队列(FIFO)、校验和逻辑以及看门狗定时器相连。
该状态机负责生成 55H 的同步字节,并自动处理校验和。它既支持经典的 LIN V1.3 校验和,也支持增强型的 LIN V2.0 / V2.1 校验和。硬件校验和功能可开可关,并且在帧的基础上,通过数据配置寄存器(DATCON.CSM)中的位,由软件来选择使用经典校验和还是增强型校验和。
从图 448 可以看出,对于 LIN 版本 2.0 和 2.1,在标识符 0 到 59 上计算增强型校验和,在标识符 60 到 63 上使用经典校验和。
另外,在主模式下会生成 ID 字段的奇偶校验,在从模式下进行校验。在从模式下,如果接收到的奇偶校验与计算出的奇偶校验不匹配,就会触发一个错误中断。
在接收情况下,如果 LINCON.CSI = 1(LIN 控制寄存器),在最后一个数据字节之后,接收到的校验和字节会被写入接收 FIFO。
36.3.11 Interrupts
ASCLIN 模块生成三个中断:
TX(发送中断):
发送 FIFO 级别事件(FLAGS.TFL)(标志寄存器)的信号。
RX(接收中断):
接收 FIFO 级别事件(FLAGS.RFL)(标志寄存器)的信号。
EX(扩展错误中断):
每个错误(FLAGS.PE、FE、CE、RFO、RFU、TFO)(标志寄存器)的信号。
一些额外的事件(FLAGS.FED、RED)。
与报头和响应的发送和接收相关的 LIN 事件被映射到相应的发送、接收和扩展错误中断:
TX:
主模式下报头的发送完成(FLAGS.TH)(标志寄存器)。
响应的发送完成(FLAGS.TR)。
RX:
从模式下报头的接收完成(FLAGS.RH)(标志寄存器)。
响应的接收完成(FLAGS.RR)。
EX:
LIN 协议(FLAGS.BD、TC)(标志寄存器)。
LIN 错误事件(FLAGS.HT、RT、LP、LA、LC)。
为了确定哪个事件是 LIN 中断的源,必须查询 FLAGS(标志寄存器)。
触发 DMA:
这些中断信号也被用作 DMA 触发信号。中断信号连接到中断路由模块,该模块将中断路由到 CPU 或 DMA。不存在单独的 DMA 触发信号。
服务请求节点(Service Request Nodes)和事件节点(Event Nodes)之间的关系如下:
每个服务请求节点都对应着若干个事件。
每个服务请求(中断)节点包含一个 SRC(服务请求控制)寄存器,其中有一个 “粘性” 标志位以及相关的置位、清零和使能位。SRC 寄存器位于 IR(中断路由器)模块中。SRC 寄存器中的服务请求标志由硬件设置,如果使能位被设置,当中断服务开始时,将由硬件清零。
一个中断节点可能由多个事件触发。每个引起中断的事件也有一个 “粘性” 标志位以及相关的置位、清零和使能位。这些位分布在四个寄存器中:FLAGS(标志寄存器)、FLAGSSET(标志置位寄存器)、FLAGSCLEAR(标志清零寄存器)和 FLAGSENABLE(标志使能寄存器),它们位于 ASCLIN 模块中。与一个事件相关的每四个位组成一个虚拟的 “事件节点”,如图 449 所示。
事件标志由硬件设置,如果被使能,将触发中断。它们不会被硬件清零。它们只能在相应的中断服务例程中由软件清零,中断服务例程通常会查询这些标志以确定中断的原因。事件标志也可以由软件设置,用于测试目的。
一些标志不会生成中断,也没有使能位。它们要么用于发出请求(随后由硬件进行确认),要么仅用于软件轮询,见图 450。
软件对请求 / 确认标志的清零操作会被忽略(例如 FLAGS.TRRQ、THRQ、TWRQ(标志寄存器))。
ASCLIN 模块中没有仅用于轮询的标志,不过通过使使能位无效,所有中断事件标志都可以仅用于轮询(例如通过使用 FLAGS.FED、RED(标志寄存器)进行空闲和卡住监测)。在这种情况下,仅通过软件设置这些位是没有意义的,除非是用于测试目的。
36.3.12 数字毛刺滤波器
数字毛刺滤波器通过使用带有可编程阈值的递增 / 递减计数器来去除输入数据信号中的短暂毛刺。另一方面,该滤波器会根据数字滤波器采样频率 fPD 以及输入和输出控制寄存器(IOCR)的位域 DEPTH 中编程的阈值在信号路径中引入延迟。因此,在 SPI 模式下不应启用毛刺滤波器。
36.3.13 挂起、睡眠和关机行为
一般来说,ASCLIN 模块传输短数据帧,长度不超过 16 位,大多数为 8 位长,有时波特率非常低,低至几千波特。在 LIN 模式下,数据帧构成 LIN 帧。
简单地在异步 ASC 帧的中间冻结模块通常会在接收端导致错误的数据,具体取决于数据内容。
在 LIN 帧传输过程中冻结模块,但在单个字节的传输之间冻结模块会在接收端导致超时错误。
如果 ASCLIN 模块收到关闭时钟的请求,它会立即禁用所有通向 DMA 的请求线,以停止进一步的 DMA 传输。
为了以明确的方式关闭模块电源,用户软件必须确保在没有正在进行的单帧或 LIN 帧传输且两个 FIFO 都为空时发出关闭电源请求。
36.3.13.1 OCDS挂起
OCDS(On-Chip Debug System,片上调试系统)软暂停请求会在当前事务结束时暂停模块活动。在 ASC 和 SPI 情况下,这是当前帧的结束。在 LIN 情况下,这是当前 LIN 帧的结束(正常响应结束、报头超时或响应超时)。
OCDS 硬暂停请求用于调试目的,会立即将 ASCLIN 模块冻结在当前寄存器状态。为内核时钟 fCLC 提供时钟的 SPB 时钟会立即关闭,而异步时钟 fA 保持开启状态。
注意:可以对寄存器进行读写操作,但这会使内核时钟 fCLC 开启几个周期。
注意:在硬暂停模式下进行带有时钟的寄存器访问可能会产生意想不到的副作用,例如信号变为激活状态并保持激活。这也可能会影响其他模块,因此 ASCLIN 内核复位可能不足以使系统进入确定状态。
36.3.13.2 Sleep Mode
进入睡眠模式意味着 ASCLIN 模块已完成所有活动且发送(TX)和接收(RX)先入先出队列(FIFO)为空。用户软件有责任在安全的时间间隔内发出睡眠请求,在此时间间隔内不会发生 ASCLIN 模块与直接内存访问(DMA)之间的竞争条件或流水线效应。
ASCLIN 模块的行为与收到禁用请求时的情况相同。
36.3.13.3 Disable Request (Power-Off)
进入断电模式意味着 ASCLIN 模块已完成所有活动且发送(TX)和接收(RX)先入先出队列(FIFO)为空。用户软件有责任在安全的时间间隔内发出断电请求,在此时间间隔内不会发生 ASCLIN 模块与直接内存访问(DMA)之间的竞争条件或流水线效应。如果断电过程是单向的,即不期望在不重新初始化模块的情况下继续操作,那么这就不是问题。
ASCLIN 模块会立即将所有输出设置为非活动状态,停止对输入作出反应,内部状态机进入初始状态,寄存器保持不变,然后模块确认该请求。所有通向模块的时钟都将被关闭。
36.3.14 复位行为
有两种复位源:
BPI(总线外设接口);
内核寄存器 KRSTx0.RST 和 KRSTx1.RST 中的复位位。
KRSTx.RST 位仅复位内核(不复位 BPI 寄存器)。
BPI 复位执行应用复位,它会复位除 OCS(片上调试系统控制和状态)寄存器之外的所有寄存器。所有输出信号获得复位值。
OCS 寄存器(片上调试系统控制和状态)由调试复位进行复位。
36.3.15 Implementation
本节描述了 ASCLIN 模块的产品特定配置及其与系统其余部分的互连。ASCLIN 模块的确切数量在附录中有记录。
36.3.15.1 BPI_FPI Module Registers
36.3.15.1.1 System Registers
图452显示了与BPI_FPI模块相关联的所有寄存器,该模块为一个内核配置。
BPI_FPI寄存器概述:
时钟控制寄存器(Clock Control Register)
时钟控制寄存器CLC允许程序员根据应用程序的要求调整模块的功能和功耗。下面的描述显示了时钟控制寄存器功能,该功能在模块的BPI_FPI中实现。当模块内核连接到CLC时钟控制接口时,CLC控制fA模块的时钟信号、模块的休眠模式和禁用模式。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_50882387/article/details/142750694
|