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)的改变

时间: 2024-11-10 15:35:10

EINT DINT ERTM DRTM EALLOW EDIS ESTOP0的理解的相关文章

DSP 28335 的中断系统总结--来源:李旭瑞_小鸡电子

PIE通过12根线与28335核的12个中断线相连.而PIE的另外 一侧有12*8根线分别连接到外设,如AD.SPI.EXINT等等.这样PIE共管理12*8=96个外部中断.这12组大中断由28335核的中断寄存器IER来控 制,即IER确定每个中断到底属于哪一组大中断(如IER |= M_INT12;说明我们要用第12组的中断,但是第12组里面的什么中断CPU并不知道需 要再由PIEIER确定).接下来再由PIE模块中的寄存器PIEIER中的低8确定该中断是这一组的第几个中断,这些配置都要告

DSP EPWM学习笔记1 - EPWM定时中断

彭会锋 75 #include "DSP28x_Project.h" // Device Headerfile and Examples Include File 77 78 // Select the example to compile in. Only one example should be set as 1 79 // the rest should be set as 0. 80 81 #define EXAMPLE1 1 // Basic pinout configur

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

28335中断系统 1.中断系统 在这里我们要十分清楚DSP的中断系统.C28XX一共有16个中断源,其中有2个不可屏蔽的中断RESET和NMI.定时器1和定时器2分别使用中断13和14.这样还有12个中断都直接连接到外设中断扩展模块PIE上.说的简单一点就是PIE通过12根线与28335核的12个中断线相连.而PIE的另外一侧有12*8根线分别连接到外设,如AD.SPI.EXINT等等. 这样PIE共管理12*8=96个外部中断.这12组大中断由28335核的中断寄存器IER来控制,即IER确

松翰单片机_SN8F570310——EINT

SN8F570310——EINT 松翰单片机_SN8F570310--EINT 原文地址:https://www.cnblogs.com/panda-w/p/11742956.html

fastJson&edis

fastJson&redis 1. fastJson 1.1 依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency> 1.2 入门操作(相互之间转换) @Test public void test() throws Ex

ucos-ii在ti dsp 28377芯片上的运行过程和移植过程

1.移植过程 在将ucos移植到28377d平台上时主要遇见了下面几个问题, 1) 文件怎么组织,是通过修改micrim上提供的28335一直代码修改而成的,下载地址为:https://www.micrium.com/. 2)移植完成后发现创建任务完成后,任务无法跳转,移植在主函数中来回循环 3)当使用ostimedly()函数对任务延时,当延时时间已经完成,系统无法跳出空任务循环,移植在IdleTask中运行 4)任务切换过程中总是跳入到异常中断中. 移植思路: 开始移植过程时,下载了micr

指令周期 机器周期 状态周期 振荡时钟周期(时钟周期)(转)

转自:http://blog.csdn.net/zhangxichao/archive/2009/05/14/4186972.aspx 时钟周期: 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的.最小的时间单位. 在一个时钟周期内,CPU仅完成一个最基本的动作.对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us:若采用4MHZ的时钟频率,则时钟 周期为250us.由

28335sci中断接收

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File #include "DSP2833x_Examples.h"   // DSP2833x Examples Include File void Init_Gpio(void) {  EALLOW; GpioCtrlRegs.GPAMUX1.all=0x0000; GpioCtrlRegs.GPADIR.all=0xffff; ED

CCS 6新建TMS320F2812工程

准备材料 CCS6 下载地址:http://www.ti.com/tool/ccstudio F2812的C语言头文件 下载地址:http://www.ti.com/lit/zip/sprc097 安装后的文件结构样式如下: 新建空的工程 点击"Project"->"New CCS Project". 在New CCS Project窗口中,按需要填写以下内容后按"Finish"完成新建空的工程. 新建完成后的工程,结构如下: 点击左上方的