当前位置: 首页 > news >正文

CAN-超时计数器(Timeout Counter)

超时计数器

(Timeout Counter)

概述

本文基于Bosch的《M_CAN Controller Area Network User’s Manual》,超时计数器是 M_CAN(控制器区域网络)中一项关键的硬件监测机制,专门用于实时监测 Rx FIFO 0、Rx FIFO 1 和 Tx Event FIFO 这三类存储结构的数据流处理状态。其核心功能是在 FIFO 中的数据长时间未被主机读取(Rx FIFO)或事件未被响应(Tx Event FIFO)时,通过硬件级触发提醒,确保数据处理的实时性,同时减少软件轮询带来的系统开销。

在这里插入图片描述

作用

  • 超时计数器是 M_CAN 为这三个关键存储结构设计的 “超时监测工具”

    • Rx FIFO 0

    • Rx FIFO 1

    • Tx Event FIFO

  • 会在 FIFO 数据长时间未被主机处理时触发提醒

    • Rx FIFO 的数据未读取

    • Tx Event FIFO 的事件未响应

  • 核心目标

    • 通过硬件级监测,确保 FIFO 数据处理的实时性,减少软件轮询的开销

超时计数器的硬件特性与基础规则

硬件参数

  • 16-bit 宽度

    • 计数范围为 0x0000 ~ 0xFFFF(共 65536 个数值)

    • 可覆盖从 “微秒级” 到 “秒级” 的超时周期(取决于 CAN 位时间配置)

  • 递减计数器(down-counter)

    • 计数器从 “预设值” 开始逐次减 1,减到0x0000时触发超时
  • 共享预分频器(TSCC.TCP)

    • 与 “时间戳计数器” 共用预分频器。

      • 确保两者的 “时间单位一致”
    • 决定 “计数器每递减 1 所需的时间”

    • 计数周期 = (TSCC.TCP + 1) × CAN 位时间

      • 例如:CAN 位时间 = 2μs,TSCC.TCP=3 → 计数周期 = 4×2μs=8μs,即每 8μs 计数器减 1

配置与读取寄存器

  • 配置寄存器:

    • TOCC(Timeout Counter Configuration):

      • 负责设置超时计数器的:

      • 超时周期

      • 工作模式

      • 使能状态

  • 读取寄存器:

    • TOCV(Timeout Counter Value)

      • 通过TOCV.TOC[15:0]读取计数器当前的递减值

      • 例如:TOCV.TOC=0x0080,表示计数器还剩 128 个计数周期才超时

启动与停止条件

  • 启动条件:

    • 仅当CCCR.INIT = 0(M_CAN 初始化完成,进入正常工作模式)时,超时计数器才能启动
  • 停止条件:

    • 当CCCR.INIT = 1(M_CAN 进入初始化状态)时,计数器强制停止

      • 典型场景是 M_CAN 进入Bus_Off 状态(总线离线,因错误计数器超限)

      • 此时 CAN 通信中断,超时监测无意义

TOCC 寄存器的关键位

  • ETOC

    • TOCC.0

    • 超时计数器使能位

      • 0 = 禁用

      • 1 = 启用(必须置 1,计数器才会工作)

  • TOS[1:0]

    • TOCC.2:1

    • 操作模式选择

      • 00 = 连续模式

      • 01 = 由 Tx Event FIFO 控制

      • 10 = 由 Rx FIFO 0 控制

      • 11 = 由 Rx FIFO 1 控制

  • TOP[15:0]

    • TOCC.31:16

    • 超时周期(预设值)

      • 计数器启动时的初始值,决定 “从启动到超时的总时间”

      • (总时间 = TOP × 计数周期)

工作模式

  • 连续模式(Continuous Mode,TOS=00)

    • 启动时机

      • 当CCCR.INIT从 1(初始化)复位为 0(正常工作)
    • 手动预设逻辑

      • 向TOCV寄存器写入任意值时,计数器会立即被 “预设为 TOCC.TOP”,且继续递减

        • 非停止计数

        • 例如:计数器当前值 = 0x0050,TOCC.TOP=0x0100,写 TOCV 后,计数器变为 0x0100,下一个计数周期减为 0x00FF

    • 循环特性

      • 无间断监测

      • 超时(计数器到 0)后,计数器会立即重新加载 TOCC.TOP,继续下一轮递减

    • 应用场景

      • 适用于 “全局超时监测”

        • 例如系统需要定期检查 FIFO 状态,无论 FIFO 是否有数据,都持续监测超时

        • 如防止系统死机导致 FIFO 长期未处理

  • FIFO 控制模式(TOS=01/10/11)

    • 空 FIFO 状态

      • 仅待命

      • 当受控的 FIFO(如 Rx FIFO 0)为空时,计数器会被 “预设为 TOCC.TOP”,但不开始递减

    • 启动计数时机

      • 监测 “数据存入后到处理的时间”

      • 当第一个数据元素存入 FIFO 时,计数器才开始从 TOCC.TOP 递减

    • 写 TOCV 无效

      • 向 TOCV 写入值不会改变计数器状态

      • 避免软件误操作干扰 FIFO 专属监测

    • 重置逻辑

      • 若 FIFO 中的数据被主机处理(如 Rx FIFO 数据被读取、FIFO 清空)

      • 计数器会重新被预设为 TOCC.TOP,等待下一个 FIFO 元素存入

    • 应用场景

      • 适用于 “FIFO 数据专属监测”

        • 例如监测 Rx FIFO 0 中的数据是否在预设时间内被 CPU 读取

        • 若超过时间未读取,触发超时中断,提示 CPU 处理

超时触发与中断反馈

  • 超时触发动作

    • 无论哪种模式,当计数器递减到0x0000时,中断标志 IR.TOO(Timeout Occurred,位 18)会置 1

      • 若需触发硬件中断,需额外配置IE.TOOE(位 18)为 1

      • 并通过ILS.TOOL配置中断线(m_can_int0/m_can_int1)

  • 模式差异处理

    • 连续模式

      • 超时后立即重新加载 TOCC.TOP,继续下一轮计数
    • FIFO 控制模式

      • 超时后仅置位 IR.TOO,计数器状态随 FIFO 变化

        • 空 FIFO 时保持 TOCC.TOP,新元素存入时重新启动递减

注意事项

时钟来源导致的计数偏差

  • 超时计数器时钟来源:CAN Core 的采样点信号

  • CAN Core 机制:

    • 通过同步 / 重同步机制调整采样点位置

    • 如总线信号延迟时

  • 结果:

    • 计数器每次递减精确时间有微小偏差
  • 宏观情况:

    • 超时周期仍符合 TOCC.TOP 配置

CAN FD 位速率切换的影响

  • CAN FD 位速率切换(BRS=1)时仲裁段(低速)和数据段 (高速)CAN 位时间不同

    • 由 NBTP/DBTP 分别配置
  • 由于超时计数器的计数周期 = (TSCC.TCP + 1) × CAN 位时间

    • 因此计数器在仲裁段和数据段的递减间隔会不同
  • 示例:若 TSCC.TCP=3(计数周期系数为 4),仲裁段位时间 = 2μs(对应 500kbit/s)、数据段位时间 = 0.5μs(对应 2Mbit/s)

    • 则仲裁段计数周期 = 4×2μs=8μs,数据段计数周期 = 4×0.5μs=2μs
  • 注意:

    • 该差异是 CAN 位时间变化导致,计数器本身仍按 “计数周期递减” 的基础逻辑工作”

工作流程

以 Rx FIFO 0 控制模式为例:

配置阶段

  • 写TOCC

    • ETOC=1(使能)

    • TOS=10(Rx FIFO 0 控制)

    • TOP=0x0400(预设值 1024)

  • 写TSCC.TCP=3

    • 计数周期 = 4×CAN 位时间 = 4×2μs=8μs
  • 写IE.TOOE=1

    • 使能超时中断

待命阶段

  • Rx FIFO 0 为空,计数器被预设为0x0400,不递减

计数阶段

  • 第一个数据存入 Rx FIFO 0,计数器开始从0x0400递减(每 8μs 减 1)

超时触发

  • 若 1024×8μs=8.192ms 内数据未被读取,计数器减到0x0000,IR.TOO=1,触发中断

重置阶段

  • PU 读取 Rx FIFO 0 数据,FIFO 清空,计数器重新预设为0x0400,等待下一个数据存入

总结

硬件基础

  • 16 位递减计数器 + 共享预分频器(TSCC.TCP)→ 统一时间单位

配置核心

  • TOCC 寄存器(使能、模式、超时周期)+ TOCV 寄存器(读当前值)

工作模式

  • 连续模式(初始化后持续计数,超时循环)

  • FIFO 模式(数据存入才计数,空 FIFO 待命)

超时反馈

  • 计数器到 0 置位 IR.TOO,需配合 IE 寄存器使能中断

特殊场景

  • CAN FD 位速率切换会改变计数间隔,需注意超时周期偏差
http://www.dtcms.com/a/434892.html

相关文章:

  • 网站建设策划有哪些建设网站用英文怎么说
  • 报告派研读:2025年光学光电子深度报告
  • 技术演进中的开发沉思-121Linux命令篇:系统设置命令(下)
  • 深入理解 JavaScript 闭包与作用域
  • 【操作系统-Day 38】LRU的完美替身:深入解析时钟(Clock)页面置换算法
  • Linux 入门指南:从零掌握基础文件与目录操作命令
  • 高职院校高水平专业建设网站wordpress的windows
  • 网络原理-HTTPS
  • 马鞍山网站建设文如何查网站注册信息
  • 郑州机械网站建设memcached wordpress 慢 卡
  • Java数据结构:ArrayList与顺序表2
  • python系统设计2-选题
  • 做网站表示时间的控件用哪个wordpress 新窗口打开文章
  • Phase 与 Invisibility 的区别
  • MATLAB学习文档(二十三)
  • 基于php网站开发手机官网
  • 2018 年真题配套词汇单词笔记(考研真相)
  • Portainer实战:轻松搭建Docker可视化管理系统
  • PostgreSql FDW 与 DBLINK 区别
  • 若依ry替换mybatis为mybatis-plus
  • 深圳做微商网站企业网站托管收费标准
  • 怎样做影视网站不侵权站群系统哪个好用
  • 项目中HTTP协议处理部分
  • 二元锦标赛:进化算法中的选择机制及其应用
  • 2026新选题-基于Python的老年病医疗数据分析系统的设计与实现(数据采集+可视化分析)
  • Linux权限核心:chmod命令终极指南(文字与数字法详解)
  • 太原网站建设总部地址青岛seo推广专员
  • 藏语自然语言处理入门 - 4 找相似的句子
  • ubuntu 环境
  • php网站开发 多少钱服务器网站建设软件有哪些