TC33x/TC32x 芯片SENT 配置详解

在汽车电子领域,传感器与 ECU(电子控制单元)的可靠通信是系统稳定运行的核心。SENT(Single Edge Nibble Transmission)协议凭借其结构简单、抗干扰能力强的特点,成为传感器数据传输的主流选择之一。英飞凌 Aurix TC33x/TC32x 系列 MCU 内置 6 路 SENT 通道,通过灵活的寄存器配置可适配不同传感器需求。本文基于官方数据手册与实际代码实现,系统解析 SENT 模块的初始化配置逻辑,帮助开发者理解底层原理与实践要点。

一、SENT 模块概述

SENT 协议采用单边缘 nibble(4 位)传输机制,通过脉冲宽度编码数据,无需时钟线即可实现异步通信。Aurix TC33x/TC32x 的 SENT 模块支持多通道独立配置,可灵活适配不同传感器的通信参数(如波特率、数据长度、校验方式等),其核心优势在于:

  • 硬件级脉冲检测与解码,降低 CPU 负担;
  • 支持多种分频模式,适配宽范围通信频率;
  • 丰富的中断与错误检测机制,提升通信可靠性;
  • 可配置的 I/O 映射,兼容不同硬件布局

二、SENT 模块配置流程与关键寄存器

SENT 模块的初始化需遵循严格的顺序,确保寄存器配置的有效性。整体流程为:
模块使能→时钟配置→接收控制→I/O 映射→中断使能

1. 模块使能与时钟控制(CLC)

作用:激活 SENT 模块,解除复位状态。

  • 关键字段DISR(Disable Reset):置 0 解除 SENT 模块的复位状态(复位状态不工作)。

2. 时钟分频配置(SENT_FDR、CPDR、CFDR)

SENT 通信依赖精确的时钟信号,时钟配置分三级实现:全局分频→通道预分频→通道频率分频。

2.1 全局频率分频寄存器(SENT_FDR)

作用:为所有通道提供基础时钟(f_MSC),DM分频模式,STEP分频参数

关键字段:

字段位域核心行为
STEP9:0正常分频模式(DM=01₂:作为 RESULT 的重载初始值,决定整数分频的计数周期(如 STEP=N-1 实现 N 分频);
分数分频模式(DM=10₂:每个输入时钟周期,该值累加到 RESULT,通过溢出实现非整数分频的步长控制。
DM15:1400₂:分频器关闭,无 f_MSC 输出,RESULT 停止更新(复位默认状态);
01₂:使能 正常分频模式(整数分频,RESULT 作为重载计数器);
10₂:使能 分数分频模式(非整数分频,RESULT 累加 STEP);
11₂:分频器关闭,无 f_MSC 输出,RESULT 停止更新。
RESULT25:16只读字段,存储分频计算的中间结果
正常模式:记录计数器当前值(从 STEP 开始递增,溢出后重置为 STEP);
分数模式:记录 RESULT + STEP 后的累加值(含溢出余数,反映分频实时进度)。
2.2 通道整数分频寄存器(CPDR)

作用:对全局分频后的时钟进行整数分频 (每个通道独立配置预分频)

关键字段

字段位域类型核心行为
PDIV11:0rw分频因子:定义预分频比为 PDIV + 1(如 PDIV=3 → 4 分频);
时钟计算f_pdiv_x = f_fracdiv / (PDIV + 1),输出给 CFDRx;
修改约束:必须先清除 RCR.CEN(通道使能位),否则配置无效;
范围0~4095(对应分频比 1~4096)。
2.3 通道分数分频寄存器(CPDR)

作用:对全局分频后的时钟进行分数分频,最终生成通道通信时钟

关键字段

字段位域类型核心行为
DIV15:0rw初始分频值:设置分数分频的目标值(必须 >0,范围 2200~49100);
修改约束:必须先清除 RCR.CEN(通道使能位),否则配置无效;
作用:作为硬件调整 DIVM 的参考值,决定理论分频比。
DIVM31:16rh测量分频值:硬件实时测量的实际分频值(只读,软件写入会被忽略);
自校准逻辑:自动适配收发端频率偏差,保证 75% DIV < DIVM < 125% DIV(确保频率误差在可接受范围);
意义:补偿时钟漂移,提升 SENT 通信稳定性。

注意:控制通道整数/分数分频的CPDR命名一致。

3. 接收控制配置(SENT_RCR)

作用:定义 SENT 数据接收的格式(长度、校验等)。


关键字段

字段位域核心作用关键细节
CEN0(rw)控制通道 x 的接收功能:0= 禁用(默认),1= 使能。配置其他参数前需先置 0(禁用通道),避免运行中修改触发异常。
IEP1(rw)忽略结束脉冲:0= 正常检测(默认),1= 忽略(避免误判连续校准脉冲为暂停)。适用于 SPC 模式或校准脉冲连续出现的场景。
IDE18(rw)忽略漂移错误:0= 启用检测(默认,漂移超差触发帧丢弃 + 中断),1= 禁用。若 FDFL=1,必须置 1(配合 FDFL 的漂移检查逻辑)。
CFC7(rw)连续帧检查(比较同步 / 校准脉冲长度):0= 与前一帧比较,1= 与后一帧比较。若 FDFL=1,CFC 被忽略(优先 FDFL 的漂移检查)。
FDFL20(rw)基于帧长度的频率漂移检查(针对脉冲值固定的帧):0= 禁用(默认),1= 启用。启用时需配合 IEP=1 和 IDE=1,否则功能不生效。
ACE2(rw)替代 CRC 模式:0=J2716 标准 6 位 CRC(默认),1= 并行 CRC(如 TLE4998C 传感器)。若 ESF=1(增强帧),ACE 被忽略(强制标准 CRC)。
SNI3(rw)状态 nibble 是否参与 CRC:0= 不参与(默认),1= 参与(如霍尔传感器场景)。需与传感器的 CRC 配置一致,否则校验失败。
SCDIS5(rw)禁用串行数据的 CRC:0= 启用(默认),1= 禁用(CRC nibble 需软件校验)。独立控制串行数据路径的 CRC,与 CDIS(整体 CRC)功能区分。
CDIS6(rw)禁用整个帧的 CRC:0= 启用(默认),1= 禁用(CRC nibble 需软件校验)。控制信号数据 + 串行数据的整体 CRC,与 SCDIS 功能互补。
CRZ16(rw)CRC 是否添加零 nibble:0= 添加(默认,适配 legacy 模式),1= 不添加。增强帧(ESF=1)下,CRZ 被忽略(强制标准 6 位 CRC,无需零 nibble)。
FRL15:8(rw)设置帧的数据 nibble 数量(0~255,不含同步、状态、CRC nibble)。若 > 8 个 nibble,每 8 个 nibble 触发 RDI 中断,最终帧结束触发 RSI/RDI(依错误状态)。
ESF17(rw)帧结构切换:0= 短帧(16 帧,4 位 ID+8 位数据 + 4 位 CRC,默认),1= 增强帧(18 帧,更长 ID / 数据 + 6 位 CRC)。增强帧下,ACE、CRZ 等字段行为变化(如强制标准 CRC)。
SDP4(rw)串行数据处理模式:0= 软件手动处理(默认,从 RSRx 读 nibble),1= 硬件自动处理(从 SDSx 读解析后数据)。自动处理需配合串行数据中断(SDI) 触发。
SUSEN19(rw)挂起使能:0= 忽略 OCDS 触发(默认),1= 使能(触发后通道 idle,寄存器可读,丢弃部分接收帧)。仅用于调试场景,挂起后可安全读取寄存器状态。

4. I/O 引脚配置(SENT_IOCR、SENT_INP)

SENT 模块需通过 I/O 引脚与外部传感器连接,配置包括引脚功能复用、输入特性与中断映射。

4.1. I/O 控制寄存器(SENT_IOCR)

作用:将物理引脚复用为 SENT 功能,并配置输入特性

关键字段

字段位域核心行为应用逻辑
REG12上升沿毛刺标志:1 = 检测到上升沿毛刺,0 = 无(只读,由 CREG 清除)监控输入信号质量,毛刺过多需检查硬件或增大 DEPTH
FEG13下降沿毛刺标志:1 = 检测到下降沿毛刺,0 = 无(只读,由 CFEG 清除)互补监控上升 / 下降沿毛刺,定位噪声来源
TRM29触发监控标志:1 = 检测到触发,0 = 无(只读,由 CTR 清除)配合 ETS 的触发源,判断触发事件是否发生
RXM30接收电平监控:显示滤波后 + IIE 反相的输入电平,0 = 低,1 = 高(复位值由芯片定义)调试接收信号状态,快速判断输入是否有效
TXM31发送电平监控:显示 OIE 反相后的输出电平,0 = 低,1 = 高(复位值由芯片定义)调试发送信号状态,快速判断输出是否正确
CREG14清除上升沿毛刺标志:1 = 清除 REG(写 1 有效,只读 0)清除 REG 后,可重新监控上升沿毛刺
CFEG15清除下降沿毛刺标志:1 = 清除 FEG(写 1 有效,只读 0)清除 FEG 后,可重新监控下降沿毛刺
CTR28清除触发监控标志:1 = 清除 TRM(写 1 有效,只读 0)清除 TRM 后,可重新监控触发事件
CEC10清除边沿计数器(EC):1 = 清除 EC(写 1 有效,只读 0)调试时重置 EC 的下降沿计数,需配合 EC 的统计功能使用
ETS19:16选择外部触发源:0ₕ=TRIG0,…,Fₕ=TRIG15(与 SCRx.TRIG=11₂配合)配置触发输入(如定时器、GPIO),实现事件驱动的 SENT 通信
EC27:20统计输入引脚的下降沿数量,饱和到 0xFF(所有状态下保持值,调试用)检测输入信号活性(如总线脉冲数),注意饱和特性(≥255 后不再增加)
4.2 输入配置寄存器(SENT_INP)

作用:将 SENT 中断源(如接收成功、错误)映射到中断节点(TRIG00~TRIG15),实现中断路由控制。“中断源→硬件路由→服务响应” 

关键字段

  • 字段位域作用
    RSI3:0映射 “接收成功中断”:当 INTSTATx.RSI=1 且 INTENx.RSI=1 时,指定触发的 TRIG(00~15)。
    RDI7:4映射 “接收数据中断”:当 INTSTATx.RDI=1 且 INTENx.RDI=1 时,指定触发的 TRIG(00~15)。
    RBI11:8映射 “接收错误中断”:当 INTSTATx.RBI=1 且 INTENx.RBI=1 时,指定触发的 TRIG(00~15)。
    TDI15:12映射 “发送数据中断”:当 INTSTATx.TDI=1 且 INTENx.TDI=1 时,指定触发的 TRIG(00~15)。
    TBI19:16映射 “发送错误中断”:当 INTSTATx.TBI=1 且 INTENx.TBI=1 时,指定触发的 TRIG(00~15)。
    ERRI23:20映射 “错误聚合中断”:当 INTSTATx 中 FRI/FDI/NNI 等 7 类错误标志置位且对应 INTENx 使能时,指定触发的 TRIG(00~15)。
    SDI27:24映射 “串行数据中断”:当 INTSTATx.SDI=1 且 INTENx.SDI=1 时,指定触发的 TRIG(00~15)。
    WDI31:28映射 “看门狗 / 监控中断”:当 INTSTATx.WDI=1 且 INTENx.WDI=1 时,指定触发的 TRIG(00~15)。
    0x40400003;

5. 中断配置(Interrupt Router)

SENT 模块,中断与 CPU 交互,配置中断优先级、中断源,中断服务程序(ISR)。

5.1 中断控制寄存器(ICR

作用:系统中断控制器(SRC)负责配置中断优先级、清除挂起标志并使能中断

关键字段

SRPN7:0rw定义服务请求的优先级(同服务提供者内,值越大优先级越高)。
CLRR25w清除服务请求标志(SRR)的写使能位(写1有效,读恒为0)。
SRE10rw控制服务请求的使能状态0= 禁用,1= 使能)。

三、配置要点与注意事项

  1. 寄存器配置顺序:修改分频(CPDR、CFDR)或接收控制(RCR)前,需先禁用通道(RCR.CEN=0),否则配置无效。

  2. 时钟校准:CFDR.DIVM 为硬件自校准结果,若偏差超出 75%~125% 范围,需检查时钟源或传感器频率。

  3. 中断优先级:错误中断优先级应高于数据接收中断(如代码中 ERR 优先级 245 > 接收优先级 248~250),确保错误及时处理。

  4. 数据校验:ISR 中需添加数据范围校验(如代码中Sent_DataBuffer[3] < 8),避免传感器异常数据导致系统故障。

四、总结

Aurix TC33x/TC32x 的 SENT 模块通过分层寄存器配置实现了灵活的传感器通信适配,核心在于理解 “时钟分频→数据格式→I/O 映射→中断响应” 的全流程逻辑。实际开发中,需结合传感器数据手册调整分频参数与帧结构,并通过错误中断与数据校验机制提升系统可靠性。本文结合代码实例解析了关键寄存器的配置原理,为开发者提供从理论到实践的完整参考。

附参照代码:

void Sent_Init(void)
{

    SENT_CLC.B.DISR = 0;    // Enable SENT module (DISR=0 means not disabled)

    SENT_FDR.B.DM = 1;      // Set frequency division mode
    SENT_FDR.B.STEP = 1023; // Set frequency step parameter
    SENT_CPDR0.B.PDIV = 0;  // T1 channel: prescaler setting
    SENT_CPDR5.B.PDIV = 0;  // T2 channel: prescaler setting
    SENT_CPDR4.B.PDIV = 1;  // AS channel: prescaler setting

    SENT_CFDR0.B.DIV = 0x2418;  // T1 channel: frequency divider setting
    SENT_CFDR5.B.DIV = 0x2418;  // T2 channel: frequency divider setting
    SENT_CFDR4.B.DIV = 0x20D0;  // AS channel: frequency divider setting

    SENT_RCR0.U = 0x00603;  // T1 channel: reception control parameters 
    SENT_RCR5.U = 0x00603;  // T2 channel: reception control parameters
    SENT_RCR4.U = 0x00603;  // AS channel: reception control parameters

    SENT_VIEW0.U = 0x76543012;  // T1 channel: view register value
    SENT_VIEW5.U = 0x76543012;  // T2 channel: view register value
    SENT_VIEW4.U = 0x76543012;  // AS channel: view register value

    SENT_IOCR0.U = 0x00000022;  // T1 channel: IO control parameters 
    SENT_IOCR5.U = 0x00000022;  // T2 channel: IO control parameters
    SENT_IOCR4.U = 0x00000222;  // AS channel: IO control parameters

    SENT_INTEN0.U = 0x000033E1;  // T1 channel: interrupt enable configuration
    SENT_INTEN5.U = 0x000033E1;  // T2 channel: interrupt enable configuration
    SENT_INTEN4.U = 0x000033E1;  // AS channel: interrupt enable configuration

    SENT_INP0.U = 0x40400001;  // T1 channel: input control parameters
    SENT_INP5.U = 0x40400002;  // T2 channel: input control parameters
    SENT_INP4.U = 0x40400003;  // AS channel: input control parameters

    SRC_SENT1.B.SRPN = INTERRUPT_SENT0_PRIORITY;  // Interrupt priority
    SRC_SENT1.B.CLRR = 1;  // Clear interrupt flag
    SRC_SENT1.B.SRE = 1;   // Enable interrupt

}

****最后重点***如果您觉得有用***帮忙点赞加收藏哟***谢谢****

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值