导航:首页 > 编程语言 > dsp汇编编程

dsp汇编编程

发布时间:2022-02-07 21:40:21

① DSP汇编指令

上面一段是中断向量表,然后间隔十六个空间。
下面一段是表示在原地循环,一般是主程序时,这时就只响应中断程序。
在有问题的话qq:1340621316

② 请问刚开始学习DSP应该怎么学习,编程应该学习C语言还是汇编语言呢,请高手指点一下。

呵呵,看到这个问题和一些网友的回答,感到走自学成才之路的人真多!
很多人都不懂由浅入深,循序渐进的路子。

C语言是在大一学的,有了初中水平即可掌握C语言。不上大学,也能学会C语言。
学会了C语言,并不能算有什么成就。

大约在大三、大四,学习了模电、数电等课程之后,才学到单片机和DSP。
学单片机和DSP,目的就是学习硬件和汇编。
在这个期间,怎么还能提到学C语言? C语言编程不是在前两年就会了吗?
学DSP,如果学不好汇编语言,可以说是根本就没有学会DSP。

学好了硬件和软件,用什么语言编写程序,并没有规定。
粗放型的,使用C即可,想要精雕细刻,就必须用汇编语言。

③ DSP汇编编程

.global start ; 定义全局标号
.sect ".resect"
B start
.text
.bss x,1 ;三个变量各为一个字(16位,非初始化段)
.bss y,1
.bss z,1
.textstart:
ldp #0 ;因下面诸变量使用直接寻址,装载DP值
splk #5,x ;变量赋初值,x=5
splk #6,y ; y=2
lacc x ;将x的值装载至累加器
add y ;累加器加上y的值
sacl z ;将累加器结果(32位)的低16位存放到变量z
ldp #4 ;直接寻址,装载DP值,页指针指向片内数据区DARAM B0
splk #1,1 ; 绝对地址201H开始的四个单元存1,2,3,4
splk #2,2
splk #3,3
splk #4,4; 以下使用间接寻址将201H开始的4个单元的数
; 转存到300H开始的4个单元 lar ar0,#201h ; 源起始地址存在辅助寄存器0
lar ar1,#300h ;目的起始地址存在辅助寄存器1
lar ar2,#3 ; 循环计数值为移动数-1
mar *,ar0 ; 设置当前辅助寄存器为ar0loop1: ;开始循环搬移数据
lacc *+,ar1 ;将当前辅助寄存器(ar0);所
;指向的数据内存单元的值装载到acc,
; ar0加1,设置当前辅助寄存器为ar1
sacl *+,ar2 ; acc低16位存放到当前辅助寄存;器(ar1)指定的单元
ar1加1,设置当前辅助寄存器为ar2
banz loop1,ar0 ; 当前辅助寄存器(ar2)如果不等于0则当前辅助寄 存器(ar2)减1,转loop1xh: B xh ; 空循环
.end

④ 如何用DSP汇编程序实现Z=X+Y

.global start ; 定义全局标号
.mmregs
.data
.bss x,1 ; 开设全局变量(非初始化段)
.bss y,1 ; 三个变量各为一个字(16位)
.bss z,1
.text
start:
ST #0f000h,*(x)
ST #0e000h,*(y)
LD #0h,A
ADD *(x),A
ADD *(y),A
STL A,*(z)

xh:
b xh ; 空循环
.end

⑤ 对DSP而言,CCS用C语言编程和汇编编程,二者的效率相差多少

我用的是28XX系列的,不知道经验对你有没有用,因为不同系列的芯片多少有些差别。
TI提供的库已经相当可以了,兼顾易用与效率。我当时做过这样的测试
1. 用IQMATH实现
2. 直接C语言实现
3. C语言优化实现
4. 原生汇编实现
IQMATH的运行周期在1000左右,比方案3快几十个周期,比方案4慢几个周期,方案2是10000多个周期。
另外,因为只是单独测的算法,汇编之所以快是快在寄存器的使用上,操作数可以直接入寄存器,但是考虑到程序其他部分是用C语言编写的话,把操作栈的时间也加上,并不比方案1快。毕竟我对TI的汇编吃的也不透。
在编写上,无疑是方案1提供了最接近C语言风格的实现,几乎不用考虑ISA方面的问题。
另外对于执行效率,我觉得主要考虑三点:
1.分支的使用
CCS对C语言的优化我没做过太多比对。其实单从反汇编的结果看,我接触过的嵌入式开发环境的编译器都能做出很好的优化。但是几乎每个编译器都会在逻辑的优化上有欠缺——它只能对一些显而易见的判断条件进行优化,而在写程序的过程中,我们经常出于易读性的考虑,或者稳定性的考虑,或者其他的考虑加入几乎不会发生的分支,这样的分支判断会消耗一定比率的代码段执行效率,视乎代码段内有用功能的长度而定,越长这个比率越小,越短这个比率越高。
2.一般操作,就是各种赋值操作
在一般的操作上,编译器的优化已经很令人满意了,基本上可以作为编写汇编的范本。我觉得所谓效率能达到90%就是针对这个部分说的。
3.特殊操作,比如对整块内存的操作,或者是浮点运算上。
在一些特殊的操作上,就要看是否有现成的库,或者看硬件是否支持。比如对整块内存操作就别用循环一个字节一个字节的搬了。
以上三点都能考虑到的话,相信执行效率方面已经没有太大的提升空间了。

另外如果你的代码发生在初始化部分,也就是只在系统运行开始的时候运行一次,那么优化不优化其实没有太大的必要,除非你对系统初始化的时间有严格的要求。但是如果你的代码是作为任务要被反复运行的,那就有优化的必要了。

在CCS里有代码消耗时钟周期的统计,如果你觉得某段代码效率低下的话,可以先分段进行消耗时钟周期的计算,这样优化比较有针对性。

⑥ dsp汇编怎么学

现在C5509的教材比较多,说的也很详细。现在DSP代码为了方便一直,都是用C写的,你可以看看TI给的例程和库文件。汇编了解就行,没有必要深入到对寄存器的操作,就连现在DSP的C代码,ti也给我们提供了很多库文件,直接调用就行,执行效率也高。

⑦ DSP中如何用汇编指令读写一个全局变量

LDW和STW都是以地址来作为读取和存储的。你需要得到这个变量的地址,然后才能用ldw和stw来进行读写操作。

⑧ dsp要用到汇编语言吗

肯定要汇编,你不用怕,汇编用得很少,你最好学学汇编,至少要看得懂(不难),绝大多数情况都是把汇编COPY过来用,C语言编程占据99%,剩下1%的汇编你搞不定,整个程序你就OVER了。

⑨ DSP实现数字滤波器,用汇编语言怎么编写程序

希望可以帮到你

用线性缓冲区实现FIR滤波器
程序清单:
.title “FIR1.ASM”
.mmregs
.def start
x .usect “x”,8
PA0 .set 0
PA1 .set 1
.data
COEF: .word 1*32768/10
.word 2*32768/10
.word -4*32768/10
.word 3*32768/10
.word -4*32768/10
.word 2*32768/10
.word 1*32768/10
.text
start: SSBX FRCT
STM #x+7,AR2
STM #6,AR0
LD #x+1,DP
PORTR PA1,@x+1
FIR1: RPTZ A,#6
MACD *AR2-,COEF,A
STH A,*AR2
PORTW *AR2+,PA0
BD FIR1
PORTR PA1,*AR2+0
.end

用循环缓冲区实现FIR滤波器

程序清单:
.title “FIR2.ASM”
.mmregs
.def start
.bss y,1
xn .usect “xn”,7
b0 .usect “b0”,7
PA0 .set 0
PA1 .set 1
.data
table: .word 1*32768/10
.word 2*32768/10
.word 3*32768/10
.word 4*32768/10
.word 5*32768/10
.word 6*32768/10
.word 7*32768/10
.text
start: SSBX FRCT
STM #b0,AR1
RPT #6
MVPD table,*AR1+
STM #xn+6,AR2
STM #b0+6,AR3
STM #7,BK
STM #-1,AR0
LD #xn,DP
PORTR PA1,@xn
FIR2: RPTZ A,#6
MAC *AR2+0%,*AR3+0%,A
STH A,@y
PORTW @y,PA0
BD FIR2
PORTR PA1,*AR2+0%
.end

链接命令文件
FIR2.obj
vectors.obj
-o FIR2.out
-m FIR2.map
-e start
MEMORY
{
PAGE0:
EPROM:org=0E000h,
len=1000h
VECS: org=0FF80h,
len=0080h
PAGE1:
SPRAM:org=0060h,
len=0020h
DARAM:org=0080h,
len=1380h
}
SECTIONS
{
.text:>EPROM PAGE 0
.data:>EPROM PAGE 0
.bss :>SPRAM PAGE 1
xn:align(8){}>DARAM PAGE 1
b0:align(8){}>DARAM PAGE 1
.vections:VECS PAGE 0
}

⑩ dsp 用什么编程

CCS

CCS有两种工作模式:

1、软件仿真器模式:可以脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试。

2、硬件在线编程模式:可以实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序。

CCS的开发系统主要由以下组件构成:

① TMS320C54x集成代码产生工具;

② CCS集成开发环境;

③ DSP/BIOS实时内核插件及其应用程序接口API;

④ 实时数据交换的RTDX插件以及相应的程序接口API;

⑤ 由TI公司以外的第三方提供的各种应用模块插件。

(10)dsp汇编编程扩展阅读

dsp编程中双重循环、多重循环的优化:

(1)多重循环拆成单层循环,减少循环层数;

例如,双重循环内一个cycle只使用了一个乘法器,拆成单层循环后,一个cycle可使用2个乘法器,充分利用DSP乘法器资源,同时运算速度也会加快;

(2)循环次数少的放在外层循环,循环次数多的放在内存循环;

(3)二维数组的二重循环:二维数组的行循环放在外层循环,列循环放在内层循环;

(4)避免循环内部的乘除运算:循环内部的乘除运算尽量移到循环外部以及用加法替代。

阅读全文

与dsp汇编编程相关的资料

热点内容
新睿云服务器怎么换 浏览:365
小程序社区源码 浏览:666
单片机程序复制hex 浏览:552
如何用巧影制作加密视频 浏览:327
恒子奶奶解压视频 浏览:856
天正cad命令行 浏览:805
stc单片机用什么编译 浏览:998
php代码对比工具 浏览:5
手机重启后无命令怎么办 浏览:65
算术编码压缩有什么用 浏览:48
闲话编程第一季 浏览:527
哪个app开店不用营业执照 浏览:684
宁波单片机销售 浏览:31
程序员技术门槛降低 浏览:131
linux文件忙 浏览:836
android手机设置代理 浏览:661
开发动态天气预报网源码 浏览:916
pdf范文 浏览:535
手机怎么获取海外服务器地址 浏览:318
最近哪个app加油优惠大 浏览:49