DSPC2000汇编指令汇编

第六章 DSP的寻址方式和汇编指令当硬件执行指令时,寻找指令所指定的参与运算飞操作数的方式——寻址方式。

根据程序的要求采用不同的寻址方式,可以有效地缩短程序的运行时间和提高代码执行效率。

汇编指令是可执行指令,每一条指令对应一条机器码,用来控制处理器仲的执行部分进行各种操作。

在本章节当中将主要以基于C28x的DSP芯片为例,为读者讲解DSP的寻址方式和汇编指令系统,其中大部分内容也可适用于其他Ti公司的DSP产品。

6.1汇编语言指令集概述在学习C28x系列DSP的寻址方式和汇编指令指令之前,先来对一些基础的知识进行讲解一下先,在汇编程序当中开发人员会常常使用到许多的特殊符号和标志,它们都具有特殊的含义,在学习汇编之前读者们必须先理解这些符号和标志含义,在这里会对其中最常用最重要的操作数符号和寄存器经行详细说明。

在进行汇编讲解之前先来了解一下开发的核心——CPU。

在TMS320C2000系列中,CPU 内核为:C20x/C24x/C240x:C2xLP:C27x/C28x:C27x、C28x这些CPU的硬件结构有一定差别,指令集也不相同,但是,在C28x芯片中可以通过选择兼容特性模式,使C28xCPU与C27xCPU及C2xLPCPU具有最佳兼容性。

可通过状寄存器STl的位OBJMODE和位AMODE的组合,选定模式。

C28x芯片具有3种操作模式:1.C28x模式:在该模式中,用户可以使用C28x的所有有效特性、寻址方式和指令系统,因此,一般应使C28x芯片工作于该种模式。

2.C27x目标——兼容模式:在复位时,C28x的CPU处于C27x目标-兼容模式。

在该模式下,目标码与C27xCPU完全兼容,且它的循环—计数也与C27xCPU兼容。

3.C2xLP源——兼容模式:该模式允许用户运行C2xLP的源代码,这些源代码是用C28x代码生成工具编译生成的。

在下面的讲解当中会牵涉到模式的转换,希望读者要搞清楚每一个模式的对应关系。

本节假设条件为芯片工作于C28x模式(OBJMODE=1,AMODE=0)。

复位后,通过执行指令C28OBJ或者SETC OBJMODE将ST1中的OBJMODE位置1,芯片即可工作于C28x模式。

6.1.1 DSP中的操作数汇编语言离不开操作符和操作数,操作符可以认为就是CPU的指令或者编译器上的伪指令,操作数是指令执行过程中的参与者,也可以说操作数就是指令所控制的对象。

在应用程序的开发过程当中少不了的就是算术运算还有比较运算,当然在汇编语言编程的时候也是一样的,在汇编语言当中进行算术运算的操作并不像C/C++那样直观、方便,需要掌握众多的助记符才行,接下来会通过表6-2来说明一下关于算术方面的助记符以及与其相关的标志位。

表6-2影响指令的判断条件的说明在汇编程序当中实现乘法操作时一件非常不简单的事,由于是属于纯寄存器操作,因此,开发人员需要准备保存乘法结果的地址,在表6-1当中讲解操作数符号的时候有一个关于乘表6-3 PM与结果保存方式的关系6.1.2汇编语法指令描述前一小节提到过,汇编指令一般都由操作符和操作数组成,操作符也被称为指令助记符,它是指令中的关键字,表示本条指令操作类型,不能省略。

操作数可以省略,也可以有很多,但各操作数之间要用“,”分开。

指令助记符与操作数之间要用空格分开。

n为数值0~7,ARn指定下次的辅助寄存器。

ind:选择一下7种符号之一:*,*+,*-,*0+,*0-,*BR0+,*BR0-(兼容模式使用)。

#:立即寻址方式中常用的前缀。

数值前面带“#”,表示该数值为一个立即数。

<<左移。

>>右移。

@:当使用C28x语法时,64位字段数据与通过“@”符号来表示,一帮组程序员理解当前正在使用哪种寻址模式。

@@:当使用C28x语法时,128位字段数据页通过“@@”符号来表示。

loc16:16位寻址方式指定地址单元的内容。

loc32:32位寻址方式指定地址单元的内容。

#16bitsigned:16位有符号立即数。

6.2寻址方式通过6.1节当中读者们应当对汇编语言编程有了一定的了解,仅仅了解了汇编语言的操作符还是不过的,接下来就从汇编语言最根本的开始学习——寻址方式寻址方式就是寻找操作数或者操作数地址的方式,在存储器中,操作数或指令字写入或读出的方式,有地址指定方式、相联存储方式或堆栈存取方式。

几乎所有的计算机,在内存中都采用地址指定方式。

当采用地址指定方式时,形成操作数或指令地址的方式称为寻址方式。

C28x系列DSP的指令集采用7种寻址方式:1.直接寻址方式:DP(数据页指针),在此方式中,16位的DP寄存器被当做一个固定的页指针,讲指令中提供6未或者7位的地址偏移量与DP寄存器中的值组合起来就构成完整的地址。

当访问具有固定地址的数据结构时,这种寻址方式特别有用,例如,外设寄存器和C/C++中的全局及静态变量。

2.堆栈寻址方式:SP(堆栈指针),在这种方式下,16位的SP指针被用来访问软件堆栈的内容。

C28x系列的堆栈是从低端地址想高端地址生长的,SP总是指向下一个空的存储单元。

当需要访问堆栈中的数据时,SP的值减去指令仲提供的6位偏移量作为被访问数据的地址和,而堆栈指针将在入栈后加1,出栈前减1.3.间接寻址方式:XAR0到XAR7(辅助寄存器指针),在该方式下,32位的XARn寄存器被当做一般的数据指针来使用个。

通过相应的指令可以实现操作后XARn加1、操作前/后减1,还可以配合3位偏移量或者其他16位寄存器实现变址寻址。

4.寄存器寻址方式:这种方式下,另一个寄存器可以是该次访问的资源或者目的操作数。

这样在C28x中既能实现寄存器到寄存器的操作。

5.数据/程序/IO空间寻址方式:在这种方式下,存储器中操作数的地址被包含在指令中。

6.程序空间间接寻址方式:某些指令可以通过指针来访问位于程序空间中的存储器操作数。

由于在C28xCPU中存储器是统一寻址的,所以单周期内可以读取两个操作数。

7.字节寻址方式:该方式能访问到股东地址单元的最低有效位和最高有效位。

对于基于C28x的DSP芯片来说,以上的7种寻址方式仲出了IO空间寻址方式外其他的都支持。

C28x的大多数指令都是利用操作符中的8位字段来选择寻址方式和对寻址方式进行修改.在C28x的指令系统中,这个8位字段用于以下寻址方式:1.loc16:为16位数据访问选择直接/堆栈/间接/寄存器寻址方式。

[loc16]表示loc16这种寻址方式对应的16位数据。

2.loc32:为32位数据访问选择直接/堆栈/间接/寄存器寻址方式。

[loc32]表示loc32这种寻址方式对应的32位数据。

在直接寻址方式下,loc16/loc32指的是一个用标号表示的地址,这个地址由16位的DP寄存器和操作码内8位字段的6位或7位偏移量共同决定。

[loc16]/[loc32]表示这个地址对应的16/32位数据。

以上7种寻址方式都与“loc16/loc32”组合起来使用。

在间接寻址方式下,loc16/loc32表示放在辅助寄存器(XAR0~XAR7)中的一个地址,[loc16]/[loc32]表示这个地址对应的16/32位数据。

在堆栈寻址方式下,loc16/loc32表示堆栈指针指向的一个堆栈单元,[loc16]/[loc32]表示这个单元内的16/32位数据。

在寄存寻址方式下, loc16/loc32表示一个16位或32位寄存器(如ACC、P、XT、AH 等), [loc16]/[loc32]表示这些寄存器内的16/32位数据。

由于C28x提供了多种寻址方式,因此用寻址方式选择位(AMODE)来选择8位字段(loc16/loc32)的解码。

该位属于状态寄存器ST1。

寻址方式可以大致归类如下:(1)AMODE=0——该方式是复位后的默认方式,也是C28x的C/C++编译器使用的方式。

这种方式与C2xLP CPU的寻址方式不完全兼容。

数据页指针偏移量是6位(在C2xLP CPU 中是7位),并且不支持所有的间接寻址方式。

(2)AMODE=1——该方式包括的寻址方式完全与C2xLP 器件的寻址方式兼容。

数据页指针的偏移量是7位并支持所有C2xLP 支持的间接寻址方式。

编译器总是假定AMODE=0,所以它只使用对AMODE=0有效的寻址模式。

而汇编器可以通过设置命令行选项实现默认AMODE=0或者AMODE=1。

v28:假定AMODE=0(C28x寻址方式)v28 – m20:假定AMODE=1(与C2xLP全兼容的寻址方式)在文件中使用内嵌伪指令:. c28_amode :告诉汇编器后面的代码段都假定AMODE=0(C28x寻址方式). lp_amode :告诉汇编器后面的代码段都假定AMODE=1(与C2xLP全兼容的寻址方式)指令操作码仲的8位字段决定了loc16/32寻址方式,其可用的寻址方式总结见表6-4。

表6-4 loc16/loc32的寻址方式6.2.1直接寻址方式指令字中包含数据存储器的7位便宜地址与基地址构成16位数据存储器地址,基地址由数据页指针DP或堆栈指针SP提供,具体由ST1的CPL决定。

64K数据存储器包含512个数据页指针DP,DP的范围记为0~511.状态寄存器ST0内的第9位数据指针中的值来确定当前数据页。

具体的直接寻址方式如图6-1所示。

15~8位7位6~0位图6-1直接寻址方式假设需要访问数据空间地址0000105DH:(1)AMODE=0:使用直接寻址方式访问数据存储器时,必须首先对DP进行设置以确定数据页面,然后再书写进行某种操作的指令,该指令的操作数将确定数据页面内部的特定偏移单元。

其步骤如下:1. 设置数据页面将当前数据页面载入DP。

MOVW DP,#0041H ;初始化数据页面指针2. 设置偏移量给出6位偏移量作为指令的一个操作数。

ADD AL,@1Dh ; AL与当前数据页面内偏移1DH单元的内容相加,结果存入到AL中如图6-2所示直接寻址下AMODE为0的地址分配16bit6bit图6-2直接寻址下AMODE为0的地址分配(1)AMODE=1:1选择兼容选址模式SETC AMODE ;令AMODE=1.lp_amode ;通知编译器AMODE=12设置数据页面讲当前数据页面载入DPMOVW DP,#0040H ;初始化数据页面指针3设置偏移量给出7位偏移量作为指令的一个操作数。

ADD AL,@@5Dh ;AL与当前数据页面内偏移量5DH单元的内容相加,结果存入到AL中如图6-3所示直接寻址下AMODE为1的地址分配。

15bit7bit图6-3直接寻址下AMODE为1的地址分配6.2.2堆栈寻址方式在堆栈寻址方式下,16位的SP指针被用于访问软件堆栈的信息。

合集下载

DSP第四章 TMS320C20X系列的寻址方式及汇编指令

DSP第四章 TMS320C20X系列的寻址方式及汇编指令

LT *0+
执行指令前: ARP=1, (AR1)=100H,(AR0)=3 执行操作: 用AR1所指的数据存储器100H内 容装载暂时寄存器; 执行指令后: ARP=1,(AR1)=103H
⑤减去索引量
方法
举例
指令使用AR内容作
LT *0-
为数据存储器地址,
执行指令后AR内容 执行指令前:
自动减去ARO的内容。 ARP=1, (AR1)=100H,(AR0)=3
执行操作:
用AR1所指的数据存储器100H内
容装载暂时寄存器;
执行指令后:
ARP=1,(AR1)=FEH
⑥加上索引量,反向进位
方法
举例
指令使用AR内容作为 数据存储器地址,执 行指令后AR内容自动 加上AR0的内容,该 加法采用反向进位方 法。 注:主要用于FFT算 法
LT *BR0+
把AR0加到辅助寄存器中时,地址以位倒序的方 式产生,即进位是从左向右,而不是从右向左进位。
LTP ind [,ARn]
MAC MAC pma , dma
乘且累加
MAC pma, ind [ , ARn]
MACD MACD pma, dma
乘且累加,并将被寻址数据移至下一单元
MACD pma, ind [, ARn]
MPY MPY dma
MPY ind [, ARn]
MPYA/MPYS
累加前次乘积,再将TREG与被寻址数相乘
PAC PAC
PREG转入累加器ACC
SPH
存储PREG高16位,直接或间接寻址
SPL
存储PREG低16位,直接或间接寻址
例1:MAC
0FF00H,02H ;DP=6,地址300H~37FH,PM=0, CNF=1

DSP_c2000_C语言编程要点

DSP_c2000_C语言编程要点
2> 全部采用小数,这样因为小数之间相乘永远是小数,永远不会溢出。取一个极限最 大值(最好使用 2 的 n 次幂),转换成 x/Max 的小数(如果 Max 是取的 2 的 n 次幂,就 可以使用移位代替除法)。
例 3、DSP 程序中比较通用的命名方法
1) 变量、常量和对象命名多用名词或形容词+名词,比如 ADC 的寄存器就可以命名为 “AdcRegs”。
例 2、Q 格式
由于 C2000 系列是定点 DSP,遇到小数时不能直接处理,所以就要想一些办法,通常 DSP 用 Q 格式来表示。当假定小数点位于第 0 位的右侧时,为 Q0;当小数电位于第 15 位的 右侧时为 Q15;若是 32 位处理器则最大可为 Q31。
浮点数和定点数转换的公示:
X 为浮点数, X 为定点数。
WDCR=0x0068; WDKEY=0X0055; WDKEY=0X00aa; printf(“hello,DSP world\n”); for(;;) ; } 首先,要禁止看门狗 watchdog。DSP 默认上电后看门狗会自动启动,时间一到就会令 DSP 复位。 其次,DSP 的 C 需要绝对定位,而主机的 C 的代码有操作系统定位。在“printf(“hello, DSP world\n”);”语句后,需要加设死循环语句“for(;;) ;”。标准 C 运行在操作系统下, 退出 main()函数后,控制权会交给操作系统。而一般 DSP 没有操作系统,退出 main() 函数即意味着程序跑飞了,所以要在主函数里加一个死循环。 在程序开头是通过宏定义去表示 watchdog 的寄存器,因为例子中用到的 DSP 芯片是 F240 系列的,而其 WDCR 和 WDKEYD7 寄存器的地址分别是 0x7029h 和 0x7025h,(volitial unsigned int*)表明 0x7029 是一个可被修改的无符号整型指针变量。

DSP2-3(c6000系列cpu结构和指令集)

DSP2-3(c6000系列cpu结构和指令集)

2-3 2013.1主讲教师:任海鹏1. 8088CPU结构和240DSP流水线 2. C6000系列DSP的CPU结构 3. C6000系列DSP的指令基础 4. C6000系列DSP的流水线操作 5. 中断结构和中断响应《DSP原理及应用》2任海鹏CPU程序的执行顺序取指——PC控制 CPU上电PC=复位地址 第一条指令开始执行 随着节拍(时钟)顺 序(同步)执行下去 每一条指令的执行都是顺序安排好的。

问题:异步事件处理机制?《DSP原理及应用》3任海鹏中断的作用CPU按照节拍,将指令顺序地(或循环执行), 顺序执行的每一条操作是“同步”的。

如何来响应一些无法预知何时发生的操作或任 务呢? 两种可能的解决方法,一种是等待什么都不做; 一种是做其它事情,等到通知这个操作需要进行时, 在转到需要的操作。

《DSP原理及应用》4任海鹏中断的作用第二种方式就是中断方法,当有中断被响应 后,CPU停止当前的工作,去执行需要的操作,该 操作被执行后,需要返回原来的地方继续执行。

中断过程中存在两个操作的切换问题。

两个基本要求:被中断的程序执行到哪里要记住(保存)以便将来 返回; 到哪里去找要执行的中断操作要给出。

《DSP原理及应用》5任海鹏中断的入口和返回设计CPU的时候如何达到这两个要求呢?CPU中的中断返回指针寄存器IRP(NRP)来记忆当前程序 执行到哪里; CPU中的中断服务表指针寄存器ISTP用来指明中断发生后 到哪里去找要执行的程序。

《DSP原理及应用》6任海鹏中断的响应中断被响应以后发生的操作将要进入E1阶段的指令地址放入到中断返回寄存器IRP; 根据中断服务表指针中所指的地址去读取中断服务程序; 中断服务程序执行完后,一条B IRP指令可以使CPU从IRP 所指的地址开始重新执行被中断的程序。

《DSP原理及应用》7任海鹏中断的优先级一般需要执行的异步操作有多个,就需要设 置多个中断; 多个中断必要安排中断的优先级,使优先级 高的可以先响应; 同时中断服务表指针也要根据不同中断有所 不同; 中断源多了后,方便了应用,但对于简单应 用,要对不用的中断进行控制(屏蔽),需要一 些中断相关的一些控制寄存器。

TMS320C6000内联指令汇编

TMS320C6000内联指令汇编
将src1中的和src2中的16位有符号对进行点积,结果被写成有符号32位int或者符号扩展为64位
int_dotpn2 (intsrc1,intsrc2);
DOTPN2
将src1和src2中的16位有符号数进行点积相减
int_dotpnrsu2 (intsLeabharlann c1,unsignedsrc2);
DOTPNRSU2
LDHU
必须2byte对齐(读)
unsigned&_amem4 (void *ptr);
LDW
STW
必须4byte对齐(读或存)
const unsigned&_amem4_const (const void *ptr);
LDW
必须4byte对齐(读)
double&_amemd8 (void *ptr);
unsigned_bitr (unsignedsrc);
BITR
翻转比特位的顺序
int_cmpeq2 (intsrc1,intsrc2);
CMPEQ2
比较每16位的值是否相等,结果放入dst的最低2位
int_cmpeq4 (intsrc1,intsrc2);
CMPEQ4
比较每8位的值是否相等,结果放入dst的最低4位,相等置1,否则为0
long_lsadd (intsrc1,__int40_tsrc2);
SADD
将src1和src2相加,且饱和其结果
int_sat (__int40_tsrc2);
SAT
将一个40比特的long转换为一个32比特的有符号int,如有需要,对结果进行饱和
unsigned_set (unsignedsrc2,unsignedcsta,unsignedcstb);

DSP 第五章指令

DSP 第五章指令

C2000提供了4种修改方法: 例: 无增量或减量 加1或减1 加或减一个变址量
LT *0+ ;用当前AR所指的数据存 储器地址内容装载TREG, 然后向当前AR内容加上 AR0内容 。 LT *0- ;用当前AR所指的数据存 然后将当前AR内容减1。
储器地址内容装载TREG, 按逆向进位方式加或逆向借位方式减一个变址量
C2000提供了4种修改方法: LT *BR0+ ;用当前AR所指的数据存储器地址内容装载TREG, 然
后向当前AR内容加上 AR0内容 , 加法采用逆向进位方式。 无增量或减量 后将当前AR内容减1。减法采用逆向借位方式。 加1或减1 LT *BR0- ;用当前AR所指的数据存储器地址内容装载TREG,然 AR TREG
应注意 : 1. 在程序开始时必须初始化DP。 2. 如果程序中的所有指令均访问同一个数据页,只需在程序的 前面装入DP,而不必在采用直接寻址方式的每个指令之前设 置数据页。若访问新的数据页,需重新装新的DP值。 3. 用直接寻址方式的指令其操作数不加前缀“#”
例1: LDP ADD
Байду номын сангаас
#4 9h,5
直接寻址方式的数据存储器地址产生
状态寄存器ST0 D8 DP(9LSBs) D0 D15 8MSBs 指令操作码 指令寄存器 D8 D7 D6 0 7LSBs D0
D15 DP(9MSBs)
D7 D6 偏移量 (7LSBs)
D0
16位数据存储器地址
使用直接寻址方式访问数据存储器的步骤: 1)设置数据页面,将当前数据页面(0-511)装入DP: LDP #k 2)设置偏移量, 给出7位偏移量作为指令的一个操作数。 ADD 5Dh
三、指令句法描述

DSPC2000实时处理器手册

DSPC2000实时处理器手册
视频 — 观看培训视频、工程设计专题讨论及 TI 活动事件。欢迎访问 E2E 视频板块,了解 TI 产品信息以及 新技术与新的发展趋势。
博客 — 阅读众多见解独到的博客帖子,内容涵盖新技术发现和“网络滞后”等各种话题。在这里您可以 一睹 TI 最优秀工程师的观点。
论坛 — 您可在 TI E2E 论坛上获得帮助。TI 的内外部工程师均会阅读该论坛,总会有人知道您问题的答 案。如果您也能为他人伸出援手并一展才华,那么欢迎您加入到论坛的互帮互助中来。
/c2000
C2000™ 微处理器 3
存储器总线与快速中断
C2000 MCU 具备 96 个中断矢量,可帮助您的设计项目实现 终极灵活性。C28x™ 微处理器内核专为实时控制而精心设 计,其快速中断能实现 10 个周期的上下文环境开关。
通过采用改进的哈佛架构 (Harvard architecture),32 位数据 与外设总线可确保内核、存储器以及外设能够实现高效 互动。高度安全的闪存、RAM 与 ROM 能保护您的知识产 权不被盗用。此外,部分器件还可提供六通道 DMA。
超过 100 种代码兼容的器件
新的 C2834x Delfino MCU 甚至可进 一步实现高达 600 MFLOPS 的极 限性能。与当前的 C2000 MCU 相 比,C2834x 平台能将代码大小 精简 52%,存储器存取时间减少 70%。此外,高分辨率 PWM 还支 持 65ps 的分辨率。全新的高速 度可使高端实时控制应用实现更
Communication Ports
Device
12-bit ADC
Channels/
Speed
RAM Flash ROM PWM HiRes Quadrature Event

第4章TMS320C2000DSP指令系统

1 0 1 1 1 0 1 1 0 1 1 0 0 0 1 1
指令字中 包含指令 所使用的 一个常数
立即寻址方式 的RPT操作码
短立即操作数 99(63h)
长立即数寻址方式举例
ADD #16384,2 ;将16384(4000h)左移2位 ;后与累加器内容相加,结果保存在累加器中 第1个指令字为指令操作码和移位数
;加,结果保存到当前辅助寄存器中。
MAR *+,AR5 ;将当前辅助寄存器的内容加1, ;并将5送到ARP,ARP原来的值送到ARB
参见:TMS320C20x用户 指南.pdf 第6、7章
4.3 ’C2000指令系统简介
‘C2xx DSP中共有汇编语言指令88条,分成6类: ①累加器、算术和逻辑指令26条如:ADD、LACC、AND ②辅助寄存器和数据页面指针指令7条如:MAR、LAR等 ③TREG、PREG和乘法指令20条如:LT、MTY、PAC等 ④分支、调用指令12条如:B、BCND、INTR等 ⑤控制指令15条如:SPM、POP、BIT等 ⑥存储器和I/O操作指令8条如:BLDD、SPLK、TBLR等 注:有些指令助记符是增强性指令,对应于几条简单指令(机器
立即寻址: LACC #lk[,shift] 长立即数经左移shift位后装入ACC, shift=0~15,shift=0时可不写;
LACC立即寻址举例
LDP #05h SPLK #0a5a5h,35h MAR *,AR3 LAR AR3,#02b5h LAR AR0,#0123h LACC #1234h,15 *1234h=01 0010 0011 0100b ——>左移15位 ——〉0 1001 0001 1010 0000 0000 0000 0000 b =91a0000h——〉ACC

第9讲 DSP的C及汇编语言


OnFileLoaded()函数
GEL文件—回调函数
该回调函数在加载program/symbol(.out)文件之后执行。 可以建立调试源搜索路径(在没有CCS工程文件的时候), 设定断点和探针,完成软件的复位和重启。
GEL文件—回调函数
OnReset()函数
当目标处理器复位后该函数被调用。如果你需要每次重
无论用哪种方法定义中断服务函数,都须注意以下问题:
(1)中断处理函数必须是void类型,而且不能有任何
输入参数。
(2)进入中断服务函数,编译器将自动产生程序保护 所有必要的寄存器,并在中断服务函数结束时恢复运行 环境。 (3)进入中断服务函数,编译器只保护与运行上下文 相关的寄存器,而不是保护所有的寄存器。中断服务函 数可以任意修改不被保护的寄存器,如外设控制寄存器 等。 (4)要注意IMR、INTM等中断控制量的设置。通常 进入中断服务程序要设置相应寄存器将中断屏蔽,退出 中断服务程序时再打开,避免中断嵌套。
需要注意的问题
(2)指针类型转换是必须的,关系到接收分配 好的内存块的地址可以向前看多少字节。 如果不做指针类型转换会怎么样? void * 指针存在的意义。
需要注意的问题
(3)内存块大小的可移植性问题
分配一个整型变量数组应使用: 数组元素个数 * sizeof(int) 确定内存块的大小 问题:sizeof和strlen函数的区别
/*进行CCS存储器映射,告知目标处理器哪些空间可以访问,哪些不可以访问。*/
Setup_Memory_Map( ); } OnTargetConnect( )//对处理器进行最小初始化 { Setup_Cache( ); //设置缓存L1P,L1D,L2 Setup_Pin_Mux( ); // 设置管脚 Setup_Psc_All_On( ); // 设置psc Setup_PLL0_594_MHz_OscIn( ); // 设置dsp主频[DSP @ 594 MHz][Core 1.20V] Setup_PLL1_DDR_135_MHz_OscIn();//设置ddr时钟频率 Setup_Aemif_8Bit_Bus( ); // 设置Async-EMIF[8-bit bus] }

dsp汇编指令

dsp中的汇编伪指令伪指令分类伪指令及其表示格式具体描述段定义伪指令 .asect “段名” , 地址汇编到一以绝对地址为起始的段中.bss 符号,字数[,块标号] 在未初始化数据段bss中保留空间.data 汇编到已初始化数据段data中.sect “段名”汇编到一已命名(已初始化)的段中.text 汇编到可执行代码段text中符号 .usect “段名”,字数[,块标号] 在一已命名(未初始化)的段中保留空间常数初始化伪指令(包括数据和地址常数) .bes 位数在当前段中保留位数(标号指向所保留空间的尾部).bfloat 数值初始化一个32位,IEEE单精度的浮点常数;禁止有跨页的初始化对象。

.blong 数值1[,…,数值n] 初始化一个或多个32位整数;禁止有跨页的初始化对象。

.byte 数值1[,…,数值n] 初始化当前段中一个或多个连续字节.field 数值1[,…,数值n] 初始化一个可变长度的字段.float 数值初始化一个32位,IEEE单精度的浮点常数.int 数值1[,…,数值n] 初始化一个或多个16位整数.long 数值1[,…,数值n] 初始化一个或多个32位整数.space 位数在当前段中保留位数(标号指向所保留空间的头部).string “字符串1”[,…,“字符串n”] 初始化一个或多个文本字符串.word 数值1[,…,数值n] 初始化一个或多个16位整数对准段程序计数器的伪指令 .align 在一页的边缘对准SPC(段程序计数器).even 在一偶数的边缘对准SPC定义输出列表格式的伪指令 .drlist 使所有伪指令行都被列出(缺省方式).drnolist 禁止某些伪指令行的列出.fclist 允许列出错误的条件代码块(缺省方式).fcnolist 禁止列出错误的条件代码块.length 页的长度定义源文件列表的页长.list 从头开始源文件的列表.mlist 允许宏列表和循环块(缺省方式).mnolist 禁止宏列表和循环块定义输出列表格式的伪指令 .nolist 停止源文件列表.option{B/D/F/L/M/T/X} 选择输出列表文件的参数.page 在源文件列表中生成一页.sslist 允许扩展子程序符号列表.ssnolist 禁止扩展子程序符号列表(缺省方式).tab 大小设置表的大小.title “字符串”在列表页头显示一个标题.width 页宽设置源文件列表的页宽外部文件定位的指伪令 .copy [“]文件名[”] 包含其他文件中的源语句.def 符号1[,…,符号n] 标明一个或多个在当前模块中定义而在其他模块中要用到的符号.global 符号1[,…,符号n] 标明一个或多个全局(外部)符号.include [“]文件名[”] 包含其他文件中的源语句.mlib [“]文件名[”] 定义宏定义库.ref符号1[,…,符号n] 标明一个或多个在另一模块中定义而在当前模块中要用到的符号条件汇编伪指令.break [确切定义的表达式] 如果条件满足,就结束.loop汇编。

DSP常用汇编语言指令简介

南航自动化学院DSP技术应用实验 unconditionally 室
5. 控制指令举例
Example1:BIT0h,15 ;(DP = 6)把内存地址=300h 单元内容的最低位(BIT0)送给TC。 Example2:LDP #0h;使用立即数方式装载 数据页,也可以采用直接寻址和间接寻址方式装 载。 Example3:PUSH ;把累加器的低16位压入堆 栈。 Example4:SETC C;置进位C=1,也可以设置 以下的控制位为1或者为0,例如:CNF、INTM、 OVM、SXM、TC和XF。类似的指令还有: CLRC。
2. 工作寄存器等指令举例
Example4:ADRK #80h ;把当前工作寄存器内容 加一个立即数80h(注意立即数范围:00~FFh)。类 似的指令还有SBRK。 Example5:BANZ指令使用举例。例: MAR *, AR0 ;当前ARP=AR0 LAR AR1, #03h ;AR1内容赋值为03h LAR AR0, #60h ;AR0内容赋值为60h ZAC ; 累加器ACC清零 loop: ADD *+, AR1 ;把当前工作寄存器AR0指向 的内存单元数值加到ACC,然后AR0内容加1,当前工 作寄存器指针指向AR1 BANZ loop, *-AR0 ;判断AR0是否为0,否则程序 转到loop,同时AR0的内容减1。 南航自动化学院DSP技术应用实验 返回到第10页 室
南航自动化学院DSP技术应用实验 室
1. 累加器等指令举例
Example 1:ADD 1,1;(假设DP = 6),把 第6个数据页的第一个内存单元内容左移一 位加到累加器 Example 2:LACC *,4; (与SXM有关) Example 3:ROL;把累加器内容循环左移 Example 4:SACL *,0,AR7 ;把当前工作寄 存器指示内容左移0位送入累加器的低8位 Example 5:RPT #15 SUBC * ;累加器减去当前寄存 器指的内容,连续减16次,结果存累加器
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档