CoreSight学习笔记

文章目录

  • 1 Components
    • 1.1 ROM Table
  • 2 使用场景
    • 2.1 Debug Monitor中断
      • 2.1.1 参考资料
    • 2.2 Programming the cross halt
      • 2.2.1 编程实现
      • 2.2.2 参考资料
    • 2.3 CTI中断
      • 2.3.1 编程实现
        • 2.3.1.1 准备工作
        • 2.3.1.2 触发中断
        • 2.3.1.3 中断响应
      • 2.3.2 参考资料

1 Components

1.1 ROM Table

在这里插入图片描述

2 使用场景

2.1 Debug Monitor中断

  1. 使能中断
		// 测试debug monitor中断// enable debug monitorCoreDebug->DEMCR |= (1 << 16);NVIC_EnableIRQ(DebugMonitor_IRQn);NVIC_SetPriority(DebugMonitor_IRQn, 1);
  1. 实现中断响应函数
void DebugMon_Handler(void) {printf("DebugMon_Handler entered\n");
}void HardFault_Handler() {printf("HardFault_Handler entered\n");
}

如果没有进debug monitor handler,而是进了hard fault handler,那么就说明Debug Monitor没有使能。

  1. 中断触发条件
    程序实现软件断点,全速run起来的情况下可以进去debug monitor中断。
#if defined (TEST_SOFTWARE_BREAKPOINTS)// 测试软件断点imtprintf("start test software breakpoint.\r\n");__asm("BKPT 0"); imtprintf("software breakpoint 1\r\n");__asm("BKPT 0"); imtprintf("software breakpoint 2\r\n");__asm("BKPT 0"); imtprintf("software breakpoint 3\r\n");__asm("BKPT 0"); imtprintf("software breakpoint 4\r\n");__asm("BKPT 0"); imtprintf("software breakpoint 5\r\n");__asm("BKPT 0"); imtprintf("software breakpoint 6\r\n");__asm("BKPT 0"); imtprintf("software breakpoint 7\r\n");__asm("BKPT 0"); imtprintf("software breakpoint 8\r\n");
#endif 

2.1.1 参考资料

[1] https://developer.arm.com/documentation/ddi0337/e/CEGHJDCF
[2] https://interrupt.memfault.com/blog/cortex-m-debug-monitor

2.2 Programming the cross halt

Cross-halt behavior happens when one processor core enters the Halting debug state, and then all the processor cores should enter the Halting debug state. This is a common situation that is encountered when debugging a system.

To generate the cross-halt behavior, the debugger must make use of the Debug Halt and Cross Halt trigger events. The debug halt event is the signal to the processor core to enter the debug state. The cross-halt event is the signal from the processor core that it is entering the debug state. To achieve the cross-halt behavior, the debugger maps the debug halt event and cross halt event signals for every processor core in the system to the same cross-trigger channel. For example, if the debugger mapped the events to Channel 3 it would program the registers as follows:
• Enable the CTI: CTICONTROL = 0b1
• Map input trigger 0 to Channel 3: CTIINEEN0 = 0b1000
• Map output trigger 0 to Channel 3: CTIINEEN0 = 0b1000
• Enable event propagation on Channel 3: CTIGATE = 0b1XXX
The following diagram illustrates how Trigger inputs 0 and Trigger outputs 0 for multiple CTI components can be mapped to channel 3 of the Cross Trigger Matrix:
在这里插入图片描述
注意:需要programme LAR寄存器,clear software lock。否则向CTI_CONTROL寄存器中写值的话会失效,即,值写不进去,写了在读出来还是没有变化。

2.2.1 编程实现

(1)enable trace 功能

CoreDebug -> DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;

(2)清除CTI的软件访问锁

LOCK_ACCESS_REGISTER = 0xC5ACCE55

(3)enable CTI功能

CTI_CONTROL |= (1 << 0);

(4)enable要使用的channel

CTI_GATE |= (1 << 3);  // 这里使用了channel 3 

(5)建立trigger和channel的映射

// 这里是trigger 0 和channel 3 建立映射。
CTI_IN_EN0 |= (1 << 3);
CTI_OUT_EN0 |= (1 << 3);

2.2.2 参考资料

[1] https://developer.arm.com/documentation/102520/0100/Programming-the-cross-halt

2.3 CTI中断

CTI中断是由ctitrigout信号触发产生。 ctitrigoutack信号可以清除ctitrigout所影响的寄存器的值。

配置【Integration Test Trigger Output register, ITTRIGOUT】寄存器相应的trigger为的值为1,可以产生ctitrigout信号。channel中也可以产生ctitrigout信号,可以通过配置【CTI Application Pulse register, CTIAPPPULSE】的值,在指定的channel上产生一个channel Event,会将此event传递给相应的trigger。

配置【CTI Interrupt Acknowledge register, CTIINTACK】的值可以acknowledge ctitrigout信号。

2.3.1 编程实现

2.3.1.1 准备工作

(1)enable trace功能和CTI的功能。
(2)启用想要使用的channel。下图所示,就启用了channel 3.
(3)建立trigger和channel的映射。以K3芯片为例,只有trigger2和trigger1才能产生中断信号给中断控制器,所以下图讲trigger2和channel3绑定。
(4)使能中断

2.3.1.2 触发中断

在channel 3上面产生channel Event,即可给trigger 2发出ctitrigout信号,触发中断。

CTI_APP_PULSE |= (1 << 3);
2.3.1.3 中断响应

(1)实现中断相应函数
(2)在相应函数中清除中断。避免频繁进入中断响应函数。

CTI_INT_ACK |= (1 << 2);

2.3.2 参考资料

[1] 《ARM® CoreSight™ SoC-400 Revision: r3p2 Technical Reference Manual》中CTI registers章节

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/674669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP和UDP相关问题(重点)(4)——4.使用TCP的协议有哪些?使用UDP的协议有哪些?

4.使用TCP的协议有哪些&#xff1f;使用UDP的协议有哪些&#xff1f; 使用TCP的协议有&#xff1a;HTTP3.0之前的HTTP协议、HTTPS、FTP、SMTP、SSH... 使用UDP的协议有&#xff1a;HTTP3.0、DNS、DHCP...

mybatis-plus使用apply进行字符串拆分后进行包含查询

首先数据库是 PostgreSql&#xff0c;有一个字段要进行模糊查询&#xff0c;我们一般是通过 like 就好了&#xff0c;但是偏偏这个字段是逗号分割的字符串&#xff0c;这个时候如果使用 like 也可以&#xff0c;只有字符串唯一&#xff0c;比如是 uuid 这类&#xff0c;但是啊&…

Java序列化详解

目录 一、什么是序列化 二、什么是反序列化 三、序列化和反序列化的作用 四、序列化和反序列化应用案例 五、常见序列化协议对比 5.1 JDK 自带的序列化方式 5.2 JDK序列化的缺陷 1. 无法跨语言 2. 易被攻击 3. 序列化后的流太大 4. 序列化性能太差 5.3 Kryo 5.4 Pr…

P8772 [蓝桥杯 2022 省 A] 求和--2024蓝桥杯冲刺省一

点击跳转例题 思路&#xff1a;简单数乘法结合律&#xff0c;然后前缀和的模板题&#xff1a; 前缀和的知识&#xff1a; 本题的代码&#xff1a;前缀和知识--模板&#xff1b; #include <bits/stdc.h> #define int long long //(有超时风险) #define PII pair<in…

rust语言tokio库底层原理解析

目录 1 rust版本及tokio版本说明1 tokio简介2 tokio::main2.1 tokio::main使用多线程模式2.2 tokio::main使用单线程模式 3 builder.build()函数3.1 build_threaded_runtime()函数新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图…

输入:123 输出321

给出一个 32 位的有符号整数&#xff0c;你需要将这个整数中每位上的数字进行反转。若翻转后超出取值范围&#xff0c;则输出0即可输入&#xff1a;123 输出321输入&#xff1a;-123 输出-321 #include <stdio.h> int main(int argc, char const *argv[]) { printf("…

StringBuilder与线程安全之StringBuffer

StringBuilder是Java中的一个类&#xff0c;位于java.lang包下&#xff0c;主要用于在程序中动态构建字符串。与String类相比&#xff0c;StringBuilder提供了一个可变的字符串序列&#xff0c;这意味着你可以在不生成新对象的情况下修改字符串的内容&#xff0c;从而提高了字符…

国产三维剖面仪—MPAS-100相控参量阵浅地层剖面仪

最近声学所东海站邹博士发来了他们最新的浅地层剖面仪—MPAS-100相控参量阵浅地层剖面仪的资料&#xff0c;市场型号GeoInsight&#xff0c;委托Ocean Physics Technology公司销售&#xff0c;地大李师兄的公司负责技术支持。 MPAS-100相控参量阵浅地层剖面仪就是俗称的三维浅…

git安装配置

1、下载安装 下载地址 2、配置git用户 git config --global user.name "yw" git config --global user.email "88888qq.com" 3、git init 初始化 4、生成ssh密钥 mkdir .ssh //创建文件夹cd .ssh //进入新建文件夹 ssh-keygen -t rsa // 输入密钥文…

(已解决)什么是vue导航守卫

vue导航守卫是是一种Vue Router内置的功能&#xff0c;它可以让我们在路由切换的过程中执行自定义的代码逻辑。 举一个简单的例子&#xff1a; import Vue from vue; import Router from vue-router;Vue.use(Router);const router new Router({// 路由配置... });// 全局前置…

SQL 注入 - http头注入之UA头注入探测

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、http头注入介绍 HTTP头注入是一种网络安全攻击手段,它利用了Web应用程序对HTTP头的处理不当或缺乏充分的验证和过滤。在这种攻击中,攻击者通过修改HTTP请求头中的某些字段,…

2、卷积和ReLU激活函数

python了解集合网络如何创建具有卷积层的特性。 文章目录 简介特征提取(Feature Extraction)卷积过滤(Filter with Convolution)Weights(权重)激活(Activations)用ReLU检测示例 - 应用卷积和ReLU结论In [1]: import numpy as np from itertools import productdef show_kerne…

Uniapp真机调试:手机端访问电脑端的后端接口解决

Uniapp真机调试&#xff1a;手机端访问电脑端的后端接口解决 1、前置操作 HBuilderX -> 运行 -> 运行到手机或模拟器 -> 运行到Android App基座 少了什么根据提示点击下载即可 使用数据线连接手机和电脑 手机端&#xff1a;打开开发者模式 -> USB调试打开手机端&…

使用 WMI 查询安全软件信息

在这篇文章中&#xff0c;我们将详细介绍如何使用 Windows Management Instrumentation (WMI) API 来查询当前计算机上安装的安全软件的基本信息。我们将分析代码的各个部分&#xff0c;并解释每个步骤所涉及的技术和原理。 一、什么是 WMI&#xff1f; WMI 是 Windows Manag…

Vue安装与配置

写入借鉴网址&#xff1a;好细的Vue安装与配置_vue配置-CSDN博客 下载Vue安装地址&#xff1a; Node.js — Download 查看是否安装成功&#xff1a; node -v npm -v 配置全局模式及缓存 结果通过&#xff1a; C:\Windows\system32>npm install vue -g added 20 packages …

大学生活的“三角平衡”与“合法”偷懒艺术

在那个被称为大学的神奇乐园里&#xff0c;我终于找到了自我&#xff0c;或者说&#xff0c;我找到了一种平衡。这种平衡被我称为“三角平衡”&#xff0c;它是由懒觉、兴趣爱好和学习这三者构成的。在这个平衡中&#xff0c;我像一名杂技演员一样&#xff0c;稳稳地站在三个顶…

C++重新入门-C++ 常量

目录 1.简介 2.整数常量 3.浮点常量 4.布尔常量 5.字符常量 6.字符串常量 7.如何定义常量 7.1 #define 预处理器 7.2const 关键字 1.简介 C 常量 常量是固定值&#xff0c;在程序执行期间不会改变。这些固定的值&#xff0c;又叫做字面量。 常量可以是任何的基本数据…

jsp商场会员卡管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 商场会员卡管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.…

python中sort()函数的详细使用方法

目录 使用reverse指定排序顺序 使用key指定排序规则 使用匿名函数制定规则 定义比较函数制定规则 制定多规则 多复杂规则排序 sort()是python非常好用的排序函数&#xff0c;可以对一个列表进行排序&#xff0c;这个排序只是会修改原列表&#xff0c;不会创建新的列表 使…

QT学习(五)C++函数重载

一、 函数重载 在同一个作用域内&#xff0c;可以声明几个功能类似的同名函数&#xff0c; 这些同名函数的形式参数&#xff08;指参数的个数、类型或者顺序&#xff09;必须不同。您不能仅通过返回类型的不同来 重载函数。 下面的实例中&#xff0c;同名函数 print() 被用…