文章目录

  • 1.1 ARM DWT 介绍
    • 1.1.1 跟踪接口:
    • 1.1.2 调试模式
    • 1.1.3 数据观察点和跟踪(Data Watchpoint and Trace)
    • 1.1.4 Cortex-M7 DWT 寄存器
    • 1.1.5 DWT Debug 接口

1.1 ARM DWT 介绍

Cortex-M7 CoreSight 系统框图
下图参考 Cortex-M3:

1.1.1 跟踪接口:

CoreSight 架构的另一个作用是Trace 数据(跟踪数据),在Cortex-M7 中有 3 种跟踪源:

  • 指令跟踪:由 ETM (嵌入式跟踪宏单元)产生‘’
  • 数据跟踪:由 DWT 产生;
  • 调试消息:由 ITM 产生,提供形如printf的消息输入,送到调试器的 GUI中,在跟踪踪过程中,由跟踪源产生的数据被裹成数据包,然后被送到 “高级跟踪总线 (ATB)”上进行传送给下一级sink。

1.1.2 调试模式

在 Cortex-M7 中的调试操作模式分为两种:

  • 第一种称为 halt (停机模式),在进入此模式时,处理器完全停止程序的执行;
  • 第二种则称为 “debug monitor exception” (调试监视器模式),此时处理器执行相应的调试监视器异常服务例程,由它来执行调试任务,此时依然允许更高优先级的异常抢占它。调试监视器的异常号为12,优先级可编程。除了调试事件可以触发异常外,手工设置其悬起位也可以触发本异常。
    • 停机模式

      • 指令执行被停止;
      • SysTick定时器停止;
      • 支持单步操作;
      • 中断可以在这期间悬起,并且可以在单步执行时响应。也可以掩蔽它们,使得单步时不受干扰。
    • 调试监视器模式
      • 处理器执行调试监视器异常的服务例程(异常号:12);
      • SysTick定时器继续运行;
      • 新来的中断按普通执行时的原则来抢占;
      • 执行单步操作;
      • 存储器的内容(如堆栈内存)会在调试监视器的响应前后更新,因为有自动入栈和出栈的动作。

1.1.3 数据观察点和跟踪(Data Watchpoint and Trace)

DWT单元集成了以下调试功能:

  • DWT包含4个比较器,其中的任一个都可配置为硬件观察点、ETM触发、PC采样事件触发、或数据地址采样事件触发。
    第一个比较器DWT_COMP0还可与时钟周期计数器(CYCCNT)进行比较。
  • DWT包含几个用于性能分析(performance profiling)的计数器。
    • 时钟周期(CYCCNT)
    • 折迭(folded)指令
    • LSU操作(Load Store Unit)
    • 睡眠周期
    • CPI(除第1个周期之外的所有指令周期)
    • 中断开销(interrupt overhead)
  • DWT能够配置为以定义的间隔发送PC采样,以及发送中断事件信息。

1.1.4 Cortex-M7 DWT 寄存器

DWT 控制寄存器
DWT 控制寄存器用来使能DWT模块

DWT 当前 PC采样周期计数寄存器
该寄存器用来对内核周期进行计数,计数值用来测量消耗时间

  • 如果PCSAMPLENA置位,当所选的节拍位改变(0到1或1到0)并且后标量值计作0时,对PC进行采样并发出采样事件;
  • 如果CYCEVTENA置位(并且PCSAMPLENA清零),当所选的节拍位改变(0到1或1到0)并且后标量值计作0时,发出一个事件;
  • 应用程序和调试器能用它来测量消耗的执行时间。通过减去起始和结束时间,应用程序能够测量两个内核时钟(内核停止处于调试状态时除外)之间的时间。这对于2^32内核时钟周期是有效的(例如,在50MHz时大约为82s)。

DWT CPI(Clocks Per Instruction) 计数寄存器
DWT CPI 计数寄存器用来计算除第一个周期之外的指令周期的总数目,只有低8bit范围。

DWT 异常开销计数寄存器
DWT 异常开销计数寄存器用来计算中断处理过程中消耗的总周期数,只有低8bit 范围

DWT 睡眠计数寄存器
DWT睡眠计数寄存器用来计算处理器处于睡眠的总周期数,只有低8bit范围

DWT LSU 计数寄存器
该寄存器用来计算当处理器处理LSU操作时的总周期数,第一个周期除外,只有低8bit范围有效

DWT 折迭计数寄存器
该寄存器用来计算折迭指令的总数目。当指令不需要任何周期是该计数器计作1

DWT 比较器寄存器
DWT 比较器寄存器0-3用来存放触发观察点事件写入的值,

如果DWT_FUNCTION0中的域CMATCH置位,DWT_COMP0可以与PC采样器计数器的值(DWT_CYCCNT)进行比较。

如果DWT_FUNCTION0的FUNCTION 域(BIT[3:0])为0x4, 则PC指令的地址与DWT_COMP0中的值进行比较。

配置DWT_FUNCTION0/1/2/3的FUNCTION 域(BIT[3:0])为其他值,则DWT_COMP0/1/2/3可以与数据地址进行比较,具体配置的值需要参考DWT功能寄存器的设置。

地址比较器特点
地址比较器一共都是偶数个。比如2个,4个或者6个。其原因在于这些 comparator 可以两两组成一个地址范围,比如:[address0, address1]

这就是所谓的 address range comparator。 其表征的地址范围为(address >= range start address) AND (address < range end address)

数据比较器特点
用于表示在发生数据操作(load,store 等等)时的操作数。数据比较器没有range的概念。但是每一个value 比较器都有一个跟它对应的mask的寄存器。所以它可以用来表示一些匹配值。

DWT 屏蔽寄存器 0-3
当COMP匹配时,DWT屏蔽寄存器0-3用来对数据地址进行屏蔽,

0 - Byte;
1 - Halfword(2bytes);
2 - Word;
3 - 8Bytes;
4 - 16 Bytes,

note: 当前在rt-thread.elf中可以看到,指令地址为2字节对齐方式,所以在测试指令地址匹配时,需要将MASKn 配置为0(1Byte)

DWT 功能寄存器 0-3
DWT功能寄存器0-3用来控制比较器的操作。每个比较器能够:
与PC或数据地址相比较,由CYCMATCH控制的,该功能只适用比较器0(DWT_COMP0)


1.1.5 DWT Debug 接口

当前在 DWT Driver 中提供了 两个 debug 接口函数:

int debug_watch_on(void *addr, dwt_func_t callback)
void debug_watch_off(void)

参数:
addr: 需要监控的全局变量地址
callback:当监控的变量被修改时,执行的注册函数

用户完成监控后需要调用 debug_watch_off 函数来关闭监控功能

ARM DWT 使用参考代码
TODO

参考阅读:
https://developer.aliyun.com/article/719879
https://blog.csdn.net/u012793457/article/details/118577450
http://www.360doc.com/content/18/0125/15/496343_725004399.shtml

【ARM Coresight 介绍 3 - ARM Cortex-M DWT】相关推荐

  1. 嵌入式典型ARM处理器介绍以及分类

    笔者电子信息专业硕士毕业,获得过多次电子设计大赛.大学生智能车.数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究.对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验,共同 ...

  2. Cortex、ARMv8、arm架构、ARM指令集、soc?Cortex A8、A9都是ARMv7a 架构;Cortex M3、M4是ARMv7m架构;前者是处理器(内核)后者是指令集的架构(架构)

    架构组成元素的指令集状态或者语法thumb指令集与arm指令集的区别例如thumb指令集是什么_thumb指令集与arm指令集的区别以及thumb-2的关系在下一文中介绍,本文暂时不讨论 有粉丝问我到 ...

  3. 从单片机到嵌入式开发——(9) 从8051到ARM——STM32介绍和基本使用

    在之前的文章中,我们介绍了51单片机的IO口.编写语言.三种中断方式(外部.定时器.串口)和常见外设的应用(LED灯.数码管.按键.显示屏.AD.基于I2C协议通信的EEPROM),同时简要介绍了μC ...

  4. ARM Trustzone介绍-视频学习

    ARM Cache介绍 ARM Trustzone介绍 ARM-GIC中断控制器介绍

  5. 介绍一本ARM编程入门的图书

    介绍一本ARM编程入门的图书.首先声明,与广告无关,我与该书作者素昧平生.而且这本书是2008年出版的,用不着做新书推广.看了不少与ARM编程相关的书.觉得这本书对入门者有帮助. <ARM程序分 ...

  6. Arm Cortex-M23 MCU,Arm Cortex-M33 MCU与RISC-V MCU技术

    Arm Cortex-M23 MCU,Arm Cortex-M33 MCU与RISC-V MCU技术 本文介绍以下技术 Arm Cortex-M23 MCU Arm Cortex-M33 MCU RI ...

  7. 【嵌入式开发】ARM 芯片简介 (ARM芯片类型 | ARM处理器工作模式 | ARM 寄存器 | ARM 寻址)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42375701 相关资源下载 :  -- 三星 ARM Archit ...

  8. ARM(IMX6U)ARM Cortex-A7中断系统(GPIO按键中断驱动蜂鸣器)

    参考:Linux之ARM Cortex-A7 中断系统详解 作者:一只青木呀 发布时间: 2020-09-16 16:07:22 网址:https://blog.csdn.net/weixin_453 ...

  9. CoreSight介绍篇

    ARM的嵌入式IDE发展: 1)SDT,英文全称ARM SoftWare Development Kit,是ARM为方便用户在ARM芯片进行应用软件开发而推出的一整套开发工具. 2)ADS,英文全称A ...

最新文章

  1. UVA 122 Trees on the level 二叉树 广搜
  2. 神经网络入门(最通俗的理解神经网络)
  3. axis2 jar包冲突_一个jar包冲突引起的StackOverflowError
  4. JWT生成Token做登录校验讲解
  5. NORDIC 52832开发1之环境搭建及PTR5618模块性能测试
  6. 光源选型的要素有哪些?
  7. centos6.5 安装svn可视化管理工具 if.svnadmin
  8. python爬虫框架scrapy案例分析
  9. 【编译】GCC与CMAKE的关系 MinGW32 和 MinGW-w64的关系
  10. MAML论文阅读笔记--回归实验
  11. 尚学堂马士兵linux教程之文件管理
  12. 无法打开计算机桌面图标,桌面图标打不开如何修复?桌面图标无法打开的处理方法...
  13. Split过程源码分析
  14. pacman基本命令
  15. 【渝粤题库】陕西师范大学201611《中国古代文学(四)》作业
  16. burpsuite实现抓Windows for Android(WSA)包
  17. cannot resolve xxx 解决方法
  18. postgresql 锁_PostgreSQL中的锁:3.其他锁
  19. 基于STM32的RGB调色器——STM32程序和Qt上位机全开源
  20. 采样 -- 基本概念

热门文章

  1. C++实现二叉树 前、中、后序遍历(递归与非递归)非递归实现过程最简洁版本
  2. 分享个自己开发的夸克网盘资源搜索引擎
  3. realsense python 操作摄像头
  4. 糖尿病合并高血压高龄奥密克戎感染重症、危重症患者诊疗建议 v0(手稿)
  5. python手机壁纸高清_python爬取手机壁纸
  6. 20189220 余超《Linux内核原理与分析》第八周作业
  7. IOS和Android开发的一些个人感受
  8. EntityConnection ConnectionString
  9. awk——awk基础介绍
  10. JS返回上一页-JS返回下一页-JS页面跳转