http://www.ti.com.cn/product/cn/tms320c28345
http://www.61ic.com/
定点dsp是指硬件支持定点计算,但不支持浮点运算。浮点dsp是有浮点运算指令的dsp。在定点dsp中(TMS320F2812),浮点乘法在编译时转换为定点乘法加法的一系列运算。所以定点dsp不是不能进行浮点运算,而是进行浮点运算要很多个指令周期。
DSP中的EALLOW和EDIS
F2812中有一些配置寄存器是受保护的,无法直接操作。在对这些寄存器进行修改之前,需要先去掉保护功能。而保护状态是由状态寄存器中EALLOW标志来指示的。汇编指令“EALLOW”就是将该标志位置位,允许对受保护的寄存器操作。
EALLOW(Edit allow)一般和EDIS(Edit disable)配套使用,在对受保护的寄存器操作之后,用EDIS恢复寄存器的被保护状态。
DSP插入汇编
在C程序中直接插入 asm(“ ***"),内嵌汇编语句,需要注意的是这种用法要慎用,在线汇编提供了能直接读写硬件的能力,如读写中断控制允许寄存器等,但编译器并不检查和分析在线汇编语言,插入在线汇编语言改变汇编环境或可能改变C变量的值可能导致严重的错误。
#define EINT asm(" clrc INTM") //INTM置0,开中断
#define DINT asm(" setc INTM") //INTM置1,关中断
#define ERTM asm(" clrc DBGM") //使能调试事件
#define DRTM asm(" setc DBGM") //禁止调试事件
二、参考《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)的改变。