码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【ARM Coresight 系列文章 9.1 -- ITM 仪器化跟踪宏单元详细介绍】


    文章目录

      • 1.1 ITM 介绍
        • 1.1.1 ITM 功能介绍
        • 1.1.2 Cortex-M ITM 的地址范围
      • 1.2 ITM 使用
        • 1.2.1 ITM 寄存器介绍
        • 1.2.2 Cortex-M7 ITM 代码示例
        • 1.2.3 Cortex-M33 ITM 代码示例

    1.1 ITM 介绍

    在debug 调试阶段通常都是使用 printf(printk) 来进行进行 log 输出,然后定位问题。那么如果SoC 中没有集成uart 或者 集成uart 不能使用了,那么软件如何将 log 输出出来呢?这个时候就可以通过 ARM coresight 中带的 ITM (仪器化跟踪宏单元) 模块了,它可比UART专业多了——速度快而且能提供多条信道,因为它它是直接将数据写入到内部32-bit的寄存器中的。此外,uart 输出在总线上更耗时,因为它的时钟较低,uart 的输出也会对整个系统性能有影响,因为它毕竟也要通过系统总线。

    通过把数据写到 ITM 的寄存器中,调试器能够通过跟踪接口来收集这些数据,并且显示或者处理它。此法不但容易使用,而且比 JTAG 的输出速度更快。

    ITM 主要用于 Cortex-M 系列,如 Cortex-M3/M7/M33 等,当然 Cortex-A 系列中也有类似 ITM 组件的组件,它就是 STM,STM的功能比 ITM 更强大,详细内容见 STM 的系列文章:
    ARM Coresight 系列文章 10 - ARM Coresight STM 介绍及使用
    ARM Coresight 系列文章 10.1 - ARM Coresight STM 介绍及使用
    ARM Coresight 系列文章 10.2 - ARM Coresight STM Trace packets
    ARM Coresight 系列文章 10.3 - ARM Coresight STM 寄存器介绍 及STM DMA 传输介绍

    1.1.1 ITM 功能介绍

    ITM 有如下的功能:

    • 软件可以直接把控制台消息写到 ITM stimulus 端口,从而把它们输出成跟踪数据;
    • DWT 可以产生跟踪数据包,并通过 ITM 把它们输出;
    • ITM 可以产生时间戳数据包并插入到跟踪数据流中,用于帮助调试器求出各事件的发生时间。

    因为 ITM 要使用跟踪端口来输出数据,所以芯片上必须有 TPIU 单元,否则无法输出——在使用 ITM 前要确认此事。

    以 Cortex-M3为例, 处理器里面除了处理核心外,还有了其它组件,其中就包含ITM模块,如下图:
    在这里插入图片描述
    总线 对 ITM 的访问:
    还是以Cortex-M3为例,它私有外设总线有两条:AHB 私有外设总线和 APB 私有外设总线,其中 AHB 只用于 Coretex-M3 内部的 AHB 外设,如上图黑粗线连接所示,它们是: NVIC, FPB, DWT 和 ITM。

    软件可以控制该模块通过高级跟踪总线(ATB)把来自ITM 的跟踪数据输出到TPIU(类似 printf 风格的调试);还可以让 DWT 匹配命中事件通过 ITM 产生数据跟踪包,并把它输出到一个跟踪数据流中。

    1.1.2 Cortex-M ITM 的地址范围

    cortex-m 地址范围 用户级许可权限
    Cortex-M3 ITM E000_0000 – E000_0FFF 可以读。对于写操作,除了用户级下允许时的 stimulus 端口外,全部忽略
    Cortex-M7 ITM E000_0000 – E000_0FFF
    Cortex-M33 ITM E000_0000 – E000_0FFF

    1.2 ITM 使用

    使用 ITM 之前需要注意以下几点:

    • 必须把 DEMCR.TRCENA 位置位,跟踪系统使能位,在使用 DWT, ETM, ITM 和 TPIU 前,必须先设置此位否则 ITM 处于除能状态,无法使用。
    • 在 ITM 寄存器中还有一个锁。在编程 ITM 之前,必须写入一个访问钥匙值 0xC5AC_CE55(CoreSight 的 ACCESS)到这个解锁寄存器 ITM_LAR 中,M33 中已经去掉这个寄存器了。否则,所有对 ITM 寄存器的写操作都被忽略。
    • ITM 自己也是另一个控制寄存器(可能是说控制寄存器的名字也是“ITM”吧),用于控制对各功能的独立使能。控制寄存器中含了 ATID 位段,作为 ITM 在 ATB 中的 ID 值。这个 ID 必须是唯一的——每个跟踪源都必须有唯一的 ID 值,从而使调试主机能从接收到的跟踪数据包中分离出各跟踪源的数据。

    DEMCR 是NVIC 调试异常及监视器控制寄存器

    1.2.1 ITM 寄存器介绍

    以 Cortex-M33 ITM 为例:
    在这里插入图片描述在这里插入图片描述

    1.2.2 Cortex-M7 ITM 代码示例

    当时在对ITM测试的时候使用 ITM port0,所以下面测试代码也是使用 ITM 的port 口输出 log,代码如下,测试时直接调用函数 swo_test_itm 即可。

    #include 
    
    /* Memory mapping of Core Hardware */
    #define ITM_BASE            (0xE0000000UL)                            /*!< ITM Base Address */
    #define DWT_BASE            (0xE0001000UL)                            /*!< DWT Base Address */
    #define CoreDebug_BASE      (0xE000EDF0UL)                            /*!< Core Debug Base Address */
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    @Api注解
    【EasyUI】EasyUI 1.3.6 tree无法使用filter进行筛选,自行写了个简易筛选器,不支持超大数据
    二、Spark 调度系统
    Node.js 实战 第2章 Node 编程基础 2.11 何时使用串行流程控制
    你真的知道TCP协议中的序列号确认、上层协议及记录标识问题吗?
    【中国知名企业高管团队】系列22:滴滴
    Spring Security配置个过滤器也这么卷
    开创性的区块链操作系统项目——去中心化的战舰游戏
    【图卷积神经网络】1-入门篇:为什么使用图神经网络
    Flutter框架实现登录注册功能,不连接数据库
  • 原文地址:https://blog.csdn.net/sinat_32960911/article/details/133762226
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号