
global start ; 定义全局标号
text
start:
nop
LDp #4 ; 直接寻址,装载DP值,页指针指向片内数据区DARAM B0
SPlk #1,1 ; 绝对地址201H开始的四个单元存1,2,3,4
Splk #2,2 ;
Splk #3,3 ;
Splk #4,4 ;
Splk #7,AR3
Splk #300h,AR1
; 以下使用间接寻址将201H开始的4个单元的数
; 转存到300H开始的4个单元
lar ar0,#201h ; 源起始地址存在辅助寄存器0
lar ar1,#300h ; 目的起始地址存在辅助寄存器1
lar ar2,#3 ; 循环计数值为移动数-1
mar ,ar0 ; 设置当前辅助寄存器为ar0
loop1: ; 开始循环搬移数据
lacc +,ar1 ; 将当前辅助寄存器(ar0)所指向的数据内存单元的值装载到acc
; ar0加1,设置当前辅助寄存器为ar1
sacl +,ar2 ; acc低16位存放到当前辅助寄存器(ar1)指定的单元
; ar1加1,设置当前辅助寄存器为ar2
banz loop1,ar0 ; 当前辅助寄存器(ar2)如果不等于0则
; 当前辅助寄存器(ar2)减1,转loop1
xh: b xh ; 空循环
end
不能从dsp中读取,因为out文件是执行文件,是有在开发板或是仿真中才能读取;
DSP(Digital Signal Process)即数字信号处理技术,DSP芯片即指能够实现数字信号处理技术的芯片。
DSP芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线 *** 作,提供特殊的DSP指令,可以用来快速的实现各种数字信号处理算法。
DSP系统的引导程序(BOOT)是系统加电或复位时,DSP将一段存储在外部的非易失性存储器的程序代码通过DMA方式拷贝到内部的高速内存中运行。这样既能扩展DSP有限的存储空间,又能充分发挥DSP内部资源的效能。用户的代码也可以通过掩膜方式写入到DSP内部ROM中,但这样受容量和价格的限制,且不便于扩展和升级。 DSP的引导过程如下: 1) DSP复位后,通过DMA方式将外部CE1空间的数据读入到内部程序空间地址0处,读入数据的多少因芯片而异(TMS320C6712一次只拷贝1KB)。 2) DSP推出复位状态,开始执行内部程序空间地址0处的程序,这段程序先将外部主程序数据读入到DSP内部程序空间相应地址,然后跳转到主程序运行。 第一步是由芯片自动完成,关键是第二步:用户需要编写相应的汇编程序,实现二次引导,即用户主程序的装载
从这些宏定义可以看到C语言是如何支持硬件编程的。
以#define IMR (volatile unsigned int )0x0004 为例:
1)0x0004,这个容易理解,是一个十六进制的常数
2)再看(volatile unsigned int ),这是一个强制转换,将0x0004转换成(volatile usigned int )
3)现在解释volatile usigned int 是什么。 表示指针(地址),这个指针指向一个 usigned int的数。最前面的volatile有特殊含义:这个指针必须保存在RAM中(不是FLASH或DSP寄存器中)
4)综合上面1)2)3)可知: (volatile unsigned int )0x0004 的含义是:
0x0004是一个地址,在这个地址内保存的是一个unsigned int 类型的整数。这个地址存在于RAM
5)(volatile unsigned int )0x0004 最左边多一个,表示取地址指向单元的内容。综合起来的意思是:从0x0004地址单元中取出一个usigned int 类型的数据值
6)#define IMR (volatile unsigned int )0x0004 的意思是,将从0x0004地址单元中取出一个usigned int 类型的数据值定义为IMR
7)根据DSP硬件,在DSP中RAM中的 0x0004地址单元恰好是中断管理寄存器!
8)绕了半天,#define IMR (volatile unsigned int )0x0004 的意思是:在C语言程序中,定义了一个宏标示符 IMR 来表示DSP中的中断管理寄存器。在程序中,可以通过这个宏标示符来使用这个寄存器:
unsigned int v = IMR; //取出中断管理寄存器的值并赋给v
以上就是关于求一段DSP程序全部的内容,包括:求一段DSP程序、能否从dsp中读取out文件,如何读取、雅马哈功放dsp程序最经常用哪几种程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)