EINT DINT ERTM DRTM EALLOW EDIS ESTOP0的理解
本文参考以下资料整理
https://wenku.baidu.com/view/6b0d6906cf84b9d528ea7a66.html
http://pangqicheng123.blog.163.com/blog/static/8233547620114111235243/
#define EINT asm(" clrc INTM")//INTM置0,开中断 #define DINT asm(" setc INTM")//INTM置1,关中断 #define ERTM asm(" clrc DBGM")//使能调试事件 #define DRTM asm(" setc DBGM")//禁止调试事件 #define EALLOW asm(" EALLOW") #define EDIS asm(" EDIS") #define ESTOP0 asm(" ESTOP0") //类似于一个断点,运行到这里的话,程序停止运行
TI 的 DSP 为了提高安全性能,将很多关键寄存器作了保护处理。通过状态寄存器 1(ST1)的位6设置与复位,来决定是否允许DSP指令对关键寄存器进行操作。
这些关键寄存器包括器件仿真寄存器、FLASH寄存器、CSM寄存器、PIE 矢量表、系统控制寄存器、GPIO MUX 寄存器、eCAN 寄存器的一部分。
DSP由于在上电复位之后,状态寄存器基本上都是清零,而这样的状态下正是上述特殊寄存器禁止改写的状态。为了能够对这些特殊寄存器进行初始化,所以在对上述特殊寄存器进行改写之前,一定要执行汇编指令asm(“EALLOW”)或者宏定义EALLOW来设置状态寄存器1的C6位。在设置完寄存器之后,一定要注意执行汇编指令asm(“EDIS”)或者宏定义EDIS来清除状态寄存器1 的C6 位。
在 device.h文件中可以找到#define EALLOW asm(" EALLOW")语句。
#ifndef DSP28_DEVICE_H #define DSP28_DEVICE_H #define TARGET 1 //--------------------------------------------------------------------------- // User To Select Target Device: #define F2812 TARGET #define F2810 0 //--------------------------------------------------------------------------- // Common CPU Definitions: // extern cregister volatile unsigned int IFR; extern cregister volatile unsigned int IER; #define EINT asm(" clrc INTM") #define DINT asm(" setc INTM") #define ERTM asm(" clrc DBGM") #define DRTM asm(" setc DBGM") #define EALLOW asm(" EALLOW") #define EDIS asm(" EDIS") #define ESTOP0 asm(" ESTOP0") #define M_INT1 0x0001 #define M_INT2 0x0002 #define M_INT3 0x0004 #define M_INT4 0x0008 #define M_INT5 0x0010 #define M_INT6 0x0020 #define M_INT7 0x0040 #define M_INT8 0x0080 #define M_INT9 0x0100
参考《TMS320C28x DSP CPU和指令集参考指南》中对INTM和DBGM的解释
1、DBGM
Bit 1:调试启用屏蔽位。当DBGM置位时,仿真器无法在实时状态下访问内存或寄存器。调试器无法更新其窗口。
在实时调试模式中,若DBGM = 1,则CPU忽略停止请求或硬件断点,直到DBGM清零。DBGM并不阻止CPU停止在软件断点。这点的一个影响可以在实时调试模式中看到。如果你在实时调试模式中单步执行一个指令,并且这条指令置位DBGM,CPU继续执行指令,直到DBGM被清零。
当你给TI调试器“实时”命令时(进入实时模式),DBGM强制为0。令DBGM = 0确保了允许调试和测试直接内存访问 (DT-DMAs);内存和寄存器的值可传递到主处理器,用于更新调试器窗口。
CPU在执行中断服务程序(ISR)之前将DBGM置位。当DBGM = 1时,来自主处理器和硬件断点的停止请求被忽略。如果你想要单步执行程序或在对时间要求不严格的ISR中设置断点,那么你必须在ISR的开始处增加一条CLRC DBGM指令。
DBGM主要用在时间要求严格的程序代码部分的仿真,来阻止调试事件。DBGM使能或禁止调试事件,如下:
0 调试事件使能。
1 调试事件禁止。
当CPU响应中断时,DBGM的当前值存储到堆栈中(当ST1存储在堆栈中时),然后DBGM置位。当由中断返回时,DBGM由堆栈中恢复。此位可分别由SETC DBGM指令和CLRC DBGM指令复位和清零。DBGM在中断操作期间被自动置位。复位时,DBGM置位。执行ABORTI (中止中断)指令也可以将DBGM置位。
2、INTM
Bit 0:中断全局屏蔽位。此位从全局上使能或禁止所有可屏蔽CPU中断(那些可由软件阻止的中断):
0 可屏蔽中断被全局使能。为了被CPU认可,则可屏蔽中断也必须被中断使能寄存器(IER)局部使能。
1 可屏蔽中断被全局禁止。即使一个可屏蔽中断被IER局部使能,也不会被CPU认可。
INTM对非可屏蔽中断没有影响,包括硬件复位或软件复位中断NMI。此外,当CPU在实时仿真模式下被停止时,由IER和DBGIER使能的中断将被响应,即使INTM设置为禁止可屏蔽中断。
当CPU响应中断时,INTM的当前值存储到堆栈中(当ST1存储在堆栈中时),然后INTM置位。当由中断返回时,INTM由堆栈中恢复。
此位可分别由SETC INTM指令和CLRC INTM指令复位和清零。复位时,INTM置位。INTM的值不会引起中断标志寄存器(IFR)、中断使能寄存器(IER)或调试中断使能寄存器(DBGIER)的改变
转载于:https://www.cnblogs.com/ylhwx/p/7775135.html
EINT DINT ERTM DRTM EALLOW EDIS ESTOP0的理解相关推荐
- DSP中EALLOW,EDIS的作用
28x 中有一些配置寄存器是受保护的,无法直接操作.也就是说在对这些寄存器进行修改之前,需要先去掉保护功能 而保护状态是由状态寄存器中EALLOW标志来指示的.汇编指令"EALLOW&quo ...
- DSP中的EALLOW和EDIS
F2812中有一些配置寄存器是受保护的,无法直接操作.在对这些寄存器进行修改之前,需要先去掉保护功能.而保护状态是由状态寄存器中EALLOW标志来指示的.汇编指令"EALLOW"就 ...
- DSP-EALLOW和EDIS
① F2812中有一些配置寄存器是受保护的,无法直接操作.在对这些寄存器进行修改之前,需要先去掉保护功能.而保护状态是由状态寄存器中EALLOW标志来指示的.汇编指令"EALLOW" ...
- TMS320F28335的SCI通信-FIFO中断通信实验
这两天在调28335的SCI通信,现在把实验过程跟大家分享:1.实验过程:通过串口调试助手1向DSP的SCIA接口发送一段代码,DSP接收到数据之后通过SCIB接口发送到串口软件2.同样串口软件通过S ...
- (七)DSP28335基础教程——I2C通信实验(OLED显示控制)
0 前言 本期实验目标:采用硬件I2C模块与OLED进行通信,完成显示控制. 目前发现28335比较缺乏关于I2C模块的实用例程,许多新手在配置使用该模块比较难上手,走弯路.那么通过该例程,大家则可以 ...
- TMS320F28335项目开发记录9_28335之中断系统
TMS320F28335项目开发记录9_28335之中断系统 2014年11月08日 12:00:12 阅读数:3104 28335中断系统 1.中断系统 在这里我们要十分清楚DSP的中断系统.C28 ...
- TMS320F28335入门(四)外部中断
//C28335一共96中断,可以使用的有58个中断,其余保留 //C28335的中断请求可以分成: //可屏蔽中断:通过判断优先级选择是否处理 //不可屏蔽中断:强制停止CPU进程,进入中断程序,比 ...
- DSP-C28x 理解INTM、DBGM、EALLOW、EDIS
参考手册:TMS320C28x DSP CPU and Instruction Set Reference Guide 代码位置:Dsp2803x_Device.h #define EINT asm( ...
- EALLOW和EDIS指令的使用
1.EALLOW与EDIS 汇编指令 #define EALLOW __asm("EALLOW") #define EDIS __asm("EDIS") #de ...
- dsp 中INTM、DBGM、EALLOW、EDIS含义
官方提供的dsp281x_devices.h中有汇编写的部分指令,记录下含义 #define EINT asm(" clrc INTM") #define DINT asm(&qu ...
最新文章
- ModuleNotFoundError: No module named 'rospkg'
- 全面解析Java中的String数据类型
- Coursera公开课笔记: 斯坦福大学机器学习第一课“引言(Introduction)”
- C++程序设计方法3:强制类型转换
- [Unity] 战斗系统学习 5:构建 TPS 框架 1
- 牛x!一款比传统数据库快 100-1000 倍的数据库,来认识一下?
- SQL 语句与性能之联合查询和联合分类查询
- 自动控制原理9.4---李雅普诺夫稳定性分析
- Oracle Coherence中文教程十二:配置高速缓存
- 现金流量表编制(经典总结)
- 第三章均数估计与假设检验例题及软件实现(SAS/R/STATA/SPSS)
- pacs通讯测试软件,全院级PACS系统模拟测试报告
- 什么是外包公司你知道?
- 为什么二分K-均值比K-均值的聚类效果更好?
- 分析和解决:ERR Error compiling script (new function): user_script:1: 'end' expected near '
- 基于L0边缘保持滤波的图像融合 matlab代码
- 做微商如何快速建立信任?
- 招商银行信用卡使用说明
- 黎曼猜想推导的数学基础
- android广播不同app,用广播(Broadcast)实现不同app之间的通信
热门文章
- diskgenius扩容c盘重启电脑卡住_DiskGenius怎么给C盘扩容?DiskGenius无损调整C盘容量方法 (全文)...
- 智能陈桥五笔输入法 for linux,科技教程:在Linux下安装陈桥五笔输入法
- 农历数据html,农历公历数据sql,包含闰月数据,天干地支,风水等数据.sql
- SoftICE使用(2)-网络远程调试zz xfocus
- 01惯性导航常用坐标系与地球参考椭球
- 【禁止套娃】用PPSSPP模拟PSP模拟Neogeo模拟SNK拳皇97
- php生成微信小程序二维码
- x86,amd64,x86-64,x64区别
- html怎么画一个正方形,css3画一个正方体
- Markdown文件的标题分级自动编号——Typora