本文参考以下资料整理

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的理解相关推荐

  1. DSP中EALLOW,EDIS的作用

    28x 中有一些配置寄存器是受保护的,无法直接操作.也就是说在对这些寄存器进行修改之前,需要先去掉保护功能 而保护状态是由状态寄存器中EALLOW标志来指示的.汇编指令"EALLOW&quo ...

  2. DSP中的EALLOW和EDIS

    F2812中有一些配置寄存器是受保护的,无法直接操作.在对这些寄存器进行修改之前,需要先去掉保护功能.而保护状态是由状态寄存器中EALLOW标志来指示的.汇编指令"EALLOW"就 ...

  3. DSP-EALLOW和EDIS

    ① F2812中有一些配置寄存器是受保护的,无法直接操作.在对这些寄存器进行修改之前,需要先去掉保护功能.而保护状态是由状态寄存器中EALLOW标志来指示的.汇编指令"EALLOW" ...

  4. TMS320F28335的SCI通信-FIFO中断通信实验

    这两天在调28335的SCI通信,现在把实验过程跟大家分享:1.实验过程:通过串口调试助手1向DSP的SCIA接口发送一段代码,DSP接收到数据之后通过SCIB接口发送到串口软件2.同样串口软件通过S ...

  5. (七)DSP28335基础教程——I2C通信实验(OLED显示控制)

    0 前言 本期实验目标:采用硬件I2C模块与OLED进行通信,完成显示控制. 目前发现28335比较缺乏关于I2C模块的实用例程,许多新手在配置使用该模块比较难上手,走弯路.那么通过该例程,大家则可以 ...

  6. TMS320F28335项目开发记录9_28335之中断系统

    TMS320F28335项目开发记录9_28335之中断系统 2014年11月08日 12:00:12 阅读数:3104 28335中断系统 1.中断系统 在这里我们要十分清楚DSP的中断系统.C28 ...

  7. TMS320F28335入门(四)外部中断

    //C28335一共96中断,可以使用的有58个中断,其余保留 //C28335的中断请求可以分成: //可屏蔽中断:通过判断优先级选择是否处理 //不可屏蔽中断:强制停止CPU进程,进入中断程序,比 ...

  8. DSP-C28x 理解INTM、DBGM、EALLOW、EDIS

    参考手册:TMS320C28x DSP CPU and Instruction Set Reference Guide 代码位置:Dsp2803x_Device.h #define EINT asm( ...

  9. EALLOW和EDIS指令的使用

    1.EALLOW与EDIS 汇编指令 #define EALLOW __asm("EALLOW") #define EDIS __asm("EDIS") #de ...

  10. dsp 中INTM、DBGM、EALLOW、EDIS含义

    官方提供的dsp281x_devices.h中有汇编写的部分指令,记录下含义 #define EINT asm(" clrc INTM") #define DINT asm(&qu ...

最新文章

  1. ModuleNotFoundError: No module named 'rospkg'
  2. 全面解析Java中的String数据类型
  3. Coursera公开课笔记: 斯坦福大学机器学习第一课“引言(Introduction)”
  4. C++程序设计方法3:强制类型转换
  5. [Unity] 战斗系统学习 5:构建 TPS 框架 1
  6. 牛x!一款比传统数据库快 100-1000 倍的数据库,来认识一下?
  7. SQL 语句与性能之联合查询和联合分类查询
  8. 自动控制原理9.4---李雅普诺夫稳定性分析
  9. Oracle Coherence中文教程十二:配置高速缓存
  10. 现金流量表编制(经典总结)
  11. 第三章均数估计与假设检验例题及软件实现(SAS/R/STATA/SPSS)
  12. pacs通讯测试软件,全院级PACS系统模拟测试报告
  13. 什么是外包公司你知道?
  14. 为什么二分K-均值比K-均值的聚类效果更好?
  15. 分析和解决:ERR Error compiling script (new function): user_script:1: 'end' expected near '
  16. 基于L0边缘保持滤波的图像融合 matlab代码
  17. 做微商如何快速建立信任?
  18. 招商银行信用卡使用说明
  19. 黎曼猜想推导的数学基础
  20. android广播不同app,用广播(Broadcast)实现不同app之间的通信

热门文章

  1. diskgenius扩容c盘重启电脑卡住_DiskGenius怎么给C盘扩容?DiskGenius无损调整C盘容量方法 (全文)...
  2. 智能陈桥五笔输入法 for linux,科技教程:在Linux下安装陈桥五笔输入法
  3. 农历数据html,农历公历数据sql,包含闰月数据,天干地支,风水等数据.sql
  4. SoftICE使用(2)-网络远程调试zz xfocus
  5. 01惯性导航常用坐标系与地球参考椭球
  6. 【禁止套娃】用PPSSPP模拟PSP模拟Neogeo模拟SNK拳皇97
  7. php生成微信小程序二维码
  8. x86,amd64,x86-64,x64区别
  9. html怎么画一个正方形,css3画一个正方体
  10. Markdown文件的标题分级自动编号——Typora