TC33x/TC32x 【SENT 配置】

TC33x/TC32x 【SENT 配置】 在汽车电子领域传感器与 ECU电子控制单元的可靠通信是系统稳定运行的核心。SENTSingle Edge Nibble Transmission协议凭借其结构简单、抗干扰能力强的特点成为传感器数据传输的主流选择之一。英飞凌 Aurix TC33x/TC32x 系列 MCU 内置 6 路 SENT 通道通过灵活的寄存器配置可适配不同传感器需求。本文基于官方数据手册与实际代码实现系统解析 SENT 模块的初始化配置逻辑帮助开发者理解底层原理与实践要点。一、SENT 模块概述SENT 协议采用单边缘 nibble4 位传输机制通过脉冲宽度编码数据无需时钟线即可实现异步通信。Aurix TC33x/TC32x 的 SENT 模块支持多通道独立配置可灵活适配不同传感器的通信参数如波特率、数据长度、校验方式等其核心优势在于硬件级脉冲检测与解码降低 CPU 负担支持多种分频模式适配宽范围通信频率丰富的中断与错误检测机制提升通信可靠性可配置的 I/O 映射兼容不同硬件布局二、SENT 模块配置流程与关键寄存器SENT 模块的初始化需遵循严格的顺序确保寄存器配置的有效性。整体流程为模块使能→时钟配置→接收控制→I/O 映射→中断使能1. 模块使能与时钟控制CLC作用激活 SENT 模块解除复位状态。关键字段DISRDisable Reset置 0 解除 SENT 模块的复位状态复位状态不工作。2. 时钟分频配置SENT_FDR、CPDRSENT 通信依赖精确的时钟信号时钟配置分三级实现全局分频→通道预分频→通道频率分频。2.1 全局频率分频寄存器SENT_FDR作用为所有通道提供基础时钟f_MSCDM分频模式STEP分频参数关键字段字段位域核心行为STEP9:0-正常分频模式DM01₂作为RESULT的重载初始值决定整数分频的计数周期如STEPN-1实现N分频-分数分频模式DM10₂每个输入时钟周期该值累加到RESULT通过溢出实现非整数分频的步长控制。DM15:14-00₂分频器关闭无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如PDIV3→ 4 分频-时钟计算f_pdiv_x f_fracdiv / (PDIV 1)输出给 CFDRx-修改约束必须先清除RCR.CEN通道使能位否则配置无效-范围0~4095对应分频比1~4096。leg: CPDR0\CPDR5\CPDR4.B.PDIV 12.3 通道分数分频寄存器CPDR作用对全局分频后的时钟进行分数分频最终生成通道通信时钟关键字段字段位域类型核心行为DIV15:0rw-初始分频值设置分数分频的目标值必须0范围2200~49100-修改约束必须先清除RCR.CEN通道使能位否则配置无效-作用作为硬件调整DIVM的参考值决定理论分频比。leg:SENT_CFDR0/SENT_CFDR5/SENT_CFDR4.B.DIV 0x2418;DIVM31:16rh-测量分频值硬件实时测量的实际分频值只读软件写入会被忽略-自校准逻辑自动适配收发端频率偏差保证75% DIV DIVM 125% DIV确保频率误差在可接受范围-意义补偿时钟漂移提升 SENT 通信稳定性。注意控制通道整数/分数分频的CPDR命名一致。3. 接收控制配置SENT_RCR作用定义 SENT 数据接收的格式长度、校验等。关键字段字段位域核心作用关键细节CEN0rw控制通道 x 的接收功能0 禁用默认1 使能。配置其他参数前需先置 0禁用通道避免运行中修改触发异常。IEP1rw忽略结束脉冲0 正常检测默认1 忽略避免误判连续校准脉冲为暂停。适用于 SPC 模式或校准脉冲连续出现的场景。IDE18rw忽略漂移错误0 启用检测默认漂移超差触发帧丢弃 中断1 禁用。若 FDFL1必须置 1配合 FDFL 的漂移检查逻辑。CFC7rw连续帧检查比较同步 / 校准脉冲长度0 与前一帧比较1 与后一帧比较。若 FDFL1CFC 被忽略优先 FDFL 的漂移检查。FDFL20rw基于帧长度的频率漂移检查针对脉冲值固定的帧0 禁用默认1 启用。启用时需配合 IEP1 和 IDE1否则功能不生效。ACE2rw替代 CRC 模式0J2716 标准 6 位 CRC默认1 并行 CRC如 TLE4998C 传感器。若 ESF1增强帧ACE 被忽略强制标准 CRC。SNI3rw状态 nibble 是否参与 CRC0 不参与默认1 参与如霍尔传感器场景。需与传感器的 CRC 配置一致否则校验失败。SCDIS5rw禁用串行数据的 CRC0 启用默认1 禁用CRC nibble 需软件校验。独立控制串行数据路径的 CRC与 CDIS整体 CRC功能区分。CDIS6rw禁用整个帧的 CRC0 启用默认1 禁用CRC nibble 需软件校验。控制信号数据 串行数据的整体 CRC与 SCDIS 功能互补。CRZ16rwCRC 是否添加零 nibble0 添加默认适配 legacy 模式1 不添加。增强帧ESF1下CRZ 被忽略强制标准 6 位 CRC无需零 nibble。FRL15:8rw设置帧的数据 nibble 数量0~255不含同步、状态、CRC nibble。若 8 个 nibble每 8 个 nibble 触发 RDI 中断最终帧结束触发 RSI/RDI依错误状态。ESF17rw帧结构切换0 短帧16 帧4 位 ID8 位数据 4 位 CRC默认1 增强帧18 帧更长 ID / 数据 6 位 CRC。增强帧下ACE、CRZ 等字段行为变化如强制标准 CRC。SDP4rw串行数据处理模式0 软件手动处理默认从 RSRx 读 nibble1 硬件自动处理从 SDSx 读解析后数据。自动处理需配合串行数据中断SDI 触发。SUSEN19rw挂起使能0 忽略 OCDS 触发默认1 使能触发后通道 idle寄存器可读丢弃部分接收帧。仅用于调试场景挂起后可安全读取寄存器状态。4. I/O 引脚配置SENT_IOCR、SENT_INPSENT 模块需通过 I/O 引脚与外部传感器连接配置包括引脚功能复用、输入特性与中断映射。4.1. I/O 控制寄存器SENT_IOCR作用将物理引脚复用为 SENT 功能并配置输入特性关键字段字段位域核心行为应用逻辑REG12上升沿毛刺标志1 检测到上升沿毛刺0 无只读由 CREG 清除监控输入信号质量毛刺过多需检查硬件或增大 DEPTHFEG13下降沿毛刺标志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清除边沿计数器EC1 清除 EC写 1 有效只读 0调试时重置 EC 的下降沿计数需配合 EC 的统计功能使用ETS19:16选择外部触发源0ₕTRIG0…FₕTRIG15与 SCRx.TRIG11₂配合配置触发输入如定时器、GPIO实现事件驱动的 SENT 通信EC27:20统计输入引脚的下降沿数量饱和到 0xFF所有状态下保持值调试用检测输入信号活性如总线脉冲数注意饱和特性≥255 后不再增加4.2 输入配置寄存器SENT_INP作用将 SENT 中断源如接收成功、错误映射到中断节点TRIG00~TRIG15实现中断路由控制。“中断源→硬件路由→服务响应”关键字段字段位域作用RSI3:0映射 “接收成功中断”当INTSTATx.RSI1且INTENx.RSI1时指定触发的 TRIG00~15。RDI7:4映射 “接收数据中断”当INTSTATx.RDI1且INTENx.RDI1时指定触发的 TRIG00~15。RBI11:8映射 “接收错误中断”当INTSTATx.RBI1且INTENx.RBI1时指定触发的 TRIG00~15。TDI15:12映射 “发送数据中断”当INTSTATx.TDI1且INTENx.TDI1时指定触发的 TRIG00~15。TBI19:16映射 “发送错误中断”当INTSTATx.TBI1且INTENx.TBI1时指定触发的 TRIG00~15。ERRI23:20映射 “错误聚合中断”当INTSTATx中 FRI/FDI/NNI 等 7 类错误标志置位且对应INTENx使能时指定触发的 TRIG00~15。SDI27:24映射 “串行数据中断”当INTSTATx.SDI1且INTENx.SDI1时指定触发的 TRIG00~15。WDI31:28映射 “看门狗 / 监控中断”当INTSTATx.WDI1且INTENx.WDI1时指定触发的 TRIG00~15。0x40400003;5. 中断配置Interrupt RouterSENT 模块中断与 CPU 交互配置中断优先级、中断源中断服务程序ISR。5.1 中断控制寄存器ICR作用系统中断控制器SRC负责配置中断优先级、清除挂起标志并使能中断关键字段SRPN7:0rw定义服务请求的优先级同服务提供者内值越大优先级越高。CLRR25w清除服务请求标志SRR的写使能位写1有效读恒为0。SRE10rw控制服务请求的使能状态0 禁用1 使能。三、配置要点与注意事项寄存器配置顺序修改分频CPDR、CFDR或接收控制RCR前需先禁用通道RCR.CEN0否则配置无效。时钟校准CFDR.DIVM 为硬件自校准结果若偏差超出 75%~125% 范围需检查时钟源或传感器频率。中断优先级错误中断优先级应高于数据接收中断如代码中 ERR 优先级 245 接收优先级 248~250确保错误及时处理。数据校验ISR 中需添加数据范围校验如代码中Sent_DataBuffer[3] 8避免传感器异常数据导致系统故障。四、总结Aurix TC33x/TC32x 的 SENT 模块通过分层寄存器配置实现了灵活的传感器通信适配核心在于理解 “时钟分频→数据格式→I/O 映射→中断响应” 的全流程逻辑。实际开发中需结合传感器数据手册调整分频参数与帧结构并通过错误中断与数据校验机制提升系统可靠性。本文结合代码实例解析了关键寄存器的配置原理为开发者提供从理论到实践的完整参考。附参照代码void Sent_Init(void) { SENT_CLC.B.DISR 0; // Enable SENT module (DISR0 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 }****最后重点***如果您觉得有用***帮忙点赞加收藏哟***谢谢****