DSPC2000汇编指令
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语言编程要点
例 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 是一个可被修改的无符号整型指针变量。
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实时处理器手册
博客 — 阅读众多见解独到的博客帖子,内容涵盖新技术发现和“网络滞后”等各种话题。在这里您可以 一睹 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
C2000使用手册
TMS320C2000系列DSP寄存器及初始化TMS320LF240X系列DSP使用时,在掌握了其工作原理和过程之后,就要熟练使用DSP自带的一些资源如:IO口、DSRM、SRAM、EVA、,EVB、SCI、SPI、ADC和WD等等;对这些资源的使用很重要的一点就是对其合理配置和初始化,初始化的关键就是对其相关寄存器的设置,设置寄存器必须了解各位的含义,记住每位的含义是不大现实的;为此,我们专门设计了DSP初始化子程序,注明每个模块所用到的寄存器以及每位的含义,以方便设计。
=================================================DSP系统初始化=================================================ARB---辅助寄存器指针缓冲器:当ARP被加载到ST0,除了使用LST指令外,原有的ARP值被复制到ARB中当通过LST#1指令加载ARB时,也把相同的ARB值复制到ARPARP---辅助寄存器指针:ARP选择间接寻址时当前的辅助寄存器AR当ARP被加载时,原有的ARP值被复制到ARB 寄存器中在间接寻址时,ARP可由存储器相关指令改变,也可由LARP,MAR,和LST指令改变当执行LST#1指令时,ARP也可加载每ARB相同的值C---- 进位位:此位在加法结果产生进位时被置为1,或在减法结果产生借位时被清0否则,除了执行带有16 位移位的ADD或SUB指令外,C在加法后被清除或在减法后被设置在ADD或USB指令时,ADD仅可对进位位进行置位而SUB仅可对进位位进行清除,而不会对进位位产生其他影响移1位和循环指令也可影响进位位C,以及SETC、CLRC和LST指令也可影响C条件转移、调用和返回指令可以根据C的状态进行执行复位时C 被置1CNF---片内DARAM配置位:若CNF=0,可配置的双口RAM区被映射到数据存储空间若CNF=I,可配置的双口RAM 区被映射到程序存储空间CNF位可通过SETC CNF,CLRC CNF和LST指令修改R/S/复位时CNF置为0 DP----数据存储器页指针:9位的DP寄存器与一个指令字的低七位一起形成一个16位的直接寻址地址INTM---中断模式位:当INTM被置为0时,所有的未屏蔽中断使能当它被置1,所有可屏蔽中断禁止OV----溢出标志位:该位保存一个被锁存的值,用以指示CALU中是否有溢出发生一旦发生溢出,OV位保持为1直到下列条件中的一个发生时才能被清除OVM---溢出方式位:当OVM=0时,累加器中结果正常溢出当OVM=1时,根据遇到溢出的情况,累加器被设置为它的最大正值或负值SETC指令和CLRC指令分别对该位进行置位和复位PM----乘积移位方式:若PM=00,乘法器的32位乘积结果不移位直接装入CALU若PM=01,PREG输出左移1位后装入CALU,最低位LSB以0填充若PM=10,PREG输出左移4位后装入CALU,最低位LSB以0填充若PM=11,时PREG输出进行符号扩展右移六位SXM----符号扩展方式位:当SXM=1时,数据通过定标移位器传送到累加器时将产生符号扩展SXM=0将抑制符号扩展SXM位对某些指令没有影响TC---- 测试/控制标志位:在下述情况之一,TC位被置1:由BIT或BITT指令测试的位为1当利用NORM指令测试时,累加器的两个最高有效位"异或"功能为真条件转移、调用和返回指令可根据TC位的条件来执行BIT、BITT、CMPR、LST和NORM指令影响TC位XF---- XF引脚状态位:该位决定XF引脚的状态SETCXF指令可对位XF进行置位,而CLRCXF指令可对其进行清0复位时XF置1SCSR1--系统控制和状态寄存器1---地址7018HD15---保留位D14---CLKSRC。
第4章TMS320C2000DSP指令系统
指令字中 包含指令 所使用的 一个常数
立即寻址方式 的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
c2000,c5000,c6000系列DSP编程方法
二、TI公司三大系列内部结构的简介 1、C2000系列的内部结构1,C2000系列基于改进的哈佛结构,支持分开的程序空间和数据空间。
还有第三个空间,即I/O空间,用于片外总线接口。
外设总线映射到数据空间,因此,运行在数据空间的所有指令,都可以运行于所有的外设寄存器。
C2000系列的CPU包括:一个32位的中心算术逻辑单元(CALU)、一个32位的累加器(ACC)、CALU具有输入和输出数据定标移位器、一个16x16位乘法器、一个乘积定标移位器、数据地址产生逻辑:包括8个辅助寄存器和1个辅助寄存器算术单元(ARAU)、程序地址产生单元C2000系列采用2xLPASIC核,其内部设有6组16位的数据与程序总线。
这6组总线是:PAB(ProgramAddr.Bus)程序地址总线DRAB(Data-ReadAddr.Bus)数据读地址总线; DWAB(Data-WriteAddr.Bus)数据写地址总线; PRDB(ProgramReadBus)程序读总线;DRDB(DataReadBus)数据读总线;DWEB(DataWriteBus)数据写总线。
将数据读地址总线(DRAB)和数据写地址总线(DWAB)分开,CPU就可以在同一个机器周期内读和写数据。
C2000系列具有以下类型的片内存储器:双访问RAM(DARAM),即一个机器周期内可以访问两次的存器;FlashEEPROM或工厂掩模的ROM。
C2000系列的存储器分为单独可选择的4个空间,总共的地址范围为224K字:程序存储器(64K字);局部数据存储器(32K字);全局数据存储器(64K字);输入/输出(64K字)。
2、C5000系列的内部结构C5000系列中央处理单元CPU包括算术逻辑单元、乘法器、累加器、移位寄存器、各种专门用途的寄存器、地址发生器、比较选择单元、指数编码器。
具体内容如下①先进的多总线结构,具有1条程序存储器数据总线、3条数据存储器数据总线和4条地址总线;②40位算术逻辑单元(ALU),包括40位的桶形移位寄存器和2个独立的40位的累加器;③17位乘17位的并行乘法器与一个40位的专用加法器结合在一起,用于单周期乘/累加操作;④比较、选择和存储单元(CSSU),用于Viterbi操作(一种通信的编码方式)中的加/比较选择;⑤指数编码器用于在单周期内计算40位累加器的指数值;⑥2个地址生成器,包括8个辅助寄存器和2个辅助寄存器算术单元[6]。
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常用汇编语言指令简介
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次,结果存累加器
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汇编。
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代码生成工具编译生成的。
在下面的讲解当中会牵涉到模式的转换,希望读者要搞清楚每一个模式的对应关系。
DSP汇编指令总结
DSP汇编指令引言DSP是指数字信号处理器,是一种专门用于数字信号处理的微处理器。
DSP汇编指令是在DSP芯片上执行操作的命令。
这篇文档将常见的DSP汇编指令及其使用方法。
通用指令MOVMOV是Move的缩写,指将数据从一个寄存器移动到另一个寄存器或内存地址中。
它有很多不同的格式,例如:MOV R1, #0 ; 将0存储在R1寄存器中MOV R2, R1 ; 将R1寄存器中的值复制到R2寄存器中MOV @R3, R2 ; 将R2寄存器中的值存储在R3指向的内存地址中ADD和SUBADD和SUB分别表示加法和减法运算。
它们也有不同的格式,例如:ADD R1, R2 ; 将R2寄存器中的值加到R1寄存器中ADD R1, #2 ; 将2加到R1寄存器中SUB R1, R2 ; 将R2寄存器中的值从R1寄存器中减去AND和ORAND和OR分别表示按位与和按位或运算。
它们也有不同的格式,例如:AND R1, R2 ; 将R1寄存器和R2寄存器中的值按位与后存储在R1寄存器中OR R1, R2 ; 将R1寄存器和R2寄存器中的值按位或后存储在R1寄存器中CMPCMP是Compare的缩写,用于比较两个值。
它会将两个操作数相减,并设置相关的标志位。
它的格式如下:CMP R1, R2 ; 比较R1和R2寄存器中的值跳转指令JMPJMP是Jump的缩写,用于无条件跳转到目标地址。
它的格式如下:JMP label ; 跳转到标签为label的位置JNZ和JZJNZ和JZ分别表示如果结果不为零则跳转和如果结果为零则跳转。
它们的格式如下:JNZ label ; 如果前一条CMP指令比较结果不为零,则跳转到标签为label的位置JZ label ; 如果前一条CMP指令比较结果为零,则跳转到标签为label的位置JGE和JLEJGE和JLE分别表示如果大于或等于则跳转和如果小于或等于则跳转。
它们的格式如下:JGE label ; 如果前一条CMP指令比较结果大于或等于,则跳转到标签为label的位置JLE label ; 如果前一条CMP指令比较结果小于或等于,则跳转到标签为label的位置循环指令DJNZDJNZ是Decrement and Jump if Not Zero的缩写,表示如果操作数不为零则减1并跳转到目标地址。
4-C2000软件编程方法
Obj
Lib
源文件(Source) 库文件(Lib、Obj) 命令文件(Cmd) 执行文件(out)
CMD
Executable Code (out)
建立工程文件
给工程文件添加内容
C2000 CMD文件的内容
TMS320F2812 内存映射
数据 | 程序 数据 | 程序
0x00 0000 0x00 0400
2、汇编编译指令
编译代码和数据到指定的段; 在存储区为非初始化变量保留存储空间; 控制列表文件的内容; 初始化存储器; 编译条件块; 声明全局变量; 指定程序要调用宏指令的宏指令库; 检查符号调试信息。
pragma伪指令 CODE_SECTION DATA_SECTION
Section段 初始化段(见表10.2) 未初始化段(见表10.3)
3、连接指令
连接器完成输出段到存储器映射空间,具体功 能如下: 分配段到目的系统的已配置存储空间; 重定位符号和段,分配他们到物理地址; 处理输入文件之间未定义的外部引用。 连接指令:MEMORY,SECTIONS
3、连接器处理COFF的段
连接器主要有两个功能: 1)使用COFF中的段目的段,当多余1个文 件被连接时,它把这些段合并创建一个可执 行的COFF输出模块形式的段。 2)连接器为输出段选择存储器地址。
MO SARAM (1K) M1 SARAM (1K)
reserved
0x00 0800 PF 0 (2K) reserved 0x00 0D00 PIE vector reserved (256) ENPIE=1 reserved 0x00 1000 0x00 6000 PF 2 (4K) reserved 0x00 7000 PF 1 (4K) reserved 0x00 8000 LO SARAM (4K)
《DSP器件及应用》2-4-C2000的程序控制
微堆栈MSTACK
执行块操作时: 在CPU执行块操作时: 执行块操作时
使用PC作为第一个操作数的地址增量 使用 作为第一个操作数的地址增量 产生第2个操作数地址 用ARAU产生第 个操作数地址 产生第 使用一个微堆栈(只有一级的堆栈) 使用一个微堆栈(只有一级的堆栈)MSTACK来 来 暂时保存“返回地址” 下条指令对应的PC值 暂时保存“返回地址”(下条指令对应的 值) 操作开始时, 操作开始时,PC +1[或PC + 2]—〉MSPACK, 或 〉 , 首操作数地址 —〉PC,块操作,…,结束, 〉 ,块操作, ,结束, MSTACK —〉PC。 〉 。
2.4.1 程序地址产生
当执行当前(现行)指令时, 当执行当前(现行)指令时,程序流要求 CPU产生紧接着的后一指令的地址 产生紧接着的后一指令的地址 当顺序执行时,程序计数器PC+1 当顺序执行时,程序计数器 当非顺序执行时, 当非顺序执行时,紧接着的后一指令的地址 来源于
指令操作字 累加器低部分ACCL(分支或调用) 累加器低部分 (分支或调用) 堆栈(返回) 堆栈(返回) 微堆栈(块操作) 微堆栈(块操作) 向量表(中断) 向量表(中断)等
可测试(判断) 可测试(判断)的条件
OV: OV = 1,ACC发生溢出; : 发生溢出; , 发生溢出 NOV:OV = 0,ACC不溢出; 不溢出; : , 不溢出 TC: TC = 1,测试控制位等于 ; : ,测试控制位等于1; NTC:TC = 0,测试控制位等于 ; : ,测试控制位等于0; BIO:BIO = 0,BIO引脚为低电平; 引脚为低电平; :BIO ,BIO引脚为低电平 应注意的是, 和 是互斥的, 应注意的是 , TC和BIO是互斥的, 这两个 是互斥的 条件不能同时存在。 条件不能同时存在。
c2000,c5000,c6000系列DSP编程方法
二、TI公司三大系列内部结构的简介 1、C2000系列的内部结构1,C2000系列基于改进的哈佛结构,支持分开的程序空间和数据空间。
还有第三个空间,即I/O空间,用于片外总线接口。
外设总线映射到数据空间,因此,运行在数据空间的所有指令,都可以运行于所有的外设寄存器。
C2000系列的CPU包括:一个32位的中心算术逻辑单元(CALU)、一个32位的累加器(ACC)、CALU具有输入和输出数据定标移位器、一个16x16位乘法器、一个乘积定标移位器、数据地址产生逻辑:包括8个辅助寄存器和1个辅助寄存器算术单元(ARAU)、程序地址产生单元C2000系列采用2xLPASIC核,其内部设有6组16位的数据与程序总线。
这6组总线是:PAB(ProgramAddr.Bus)程序地址总线DRAB(Data-ReadAddr.Bus)数据读地址总线; DWAB(Data-WriteAddr.Bus)数据写地址总线; PRDB(ProgramReadBus)程序读总线;DRDB(DataReadBus)数据读总线;DWEB(DataWriteBus)数据写总线。
将数据读地址总线(DRAB)和数据写地址总线(DWAB)分开,CPU就可以在同一个机器周期内读和写数据。
C2000系列具有以下类型的片内存储器:双访问RAM(DARAM),即一个机器周期内可以访问两次的存器;FlashEEPROM或工厂掩模的ROM。
C2000系列的存储器分为单独可选择的4个空间,总共的地址范围为224K字:程序存储器(64K字);局部数据存储器(32K字);全局数据存储器(64K字);输入/输出(64K字)。
2、C5000系列的内部结构C5000系列中央处理单元CPU包括算术逻辑单元、乘法器、累加器、移位寄存器、各种专门用途的寄存器、地址发生器、比较选择单元、指数编码器。
具体内容如下①先进的多总线结构,具有1条程序存储器数据总线、3条数据存储器数据总线和4条地址总线;②40位算术逻辑单元(ALU),包括40位的桶形移位寄存器和2个独立的40位的累加器;③17位乘17位的并行乘法器与一个40位的专用加法器结合在一起,用于单周期乘/累加操作;④比较、选择和存储单元(CSSU),用于Viterbi操作(一种通信的编码方式)中的加/比较选择;⑤指数编码器用于在单周期内计算40位累加器的指数值;⑥2个地址生成器,包括8个辅助寄存器和2个辅助寄存器算术单元[6]。
DSP指令集.doc(精)
C2的指令集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等注:有些指令助记符是增强性指令,对应于几条简单指令(机器码),如:ADD 可完成ADD,ADDH,ADDK和ADLK等功能,这样做可使程序更简洁并易读。
累加器,算术与逻辑指令助记符指令描述指令的中英文指令字周期ABSACC的绝对值Absolute Value of Accumulator(累加器内容取绝对值11ADD 加给ACC,带0~15-bit移位,直接或间接Add to Accumulator(加入累加器)11加给ACC,带0~15-bit移位,长立即数22加给ACC,带16-bit移位,直接或间接1 1加给ACC,短立即数1 1ADDC 加给ACC,带进位,直接或间接Add to Accumulator With Carry(带进位位加至累加器)1 1ADDS加给ACC低段,带符号展开抑制,直接或间接Add to Accumulator With Sign ExtensionSuppressed(抑制符号扩展加至累加器)1 1ADDT加给ACC,由TREG决定移位,直接或间接Add to Accumulator With Shift Specifiedby TREG(按TREG寄存器内容移位后加至累加器)1 1AND ACC与数据值,直接或间接AND With Accumulator(和累加器逻辑“与”)1 1ACC与长立即数,带0~15-bit移位2 2ACC与长立即数,带16-bit移位2 2CMPLACC取补Complement Accumulator(累加器求反(补)1 1LACC 带移位0~15-bit装入ACC,直接或间接Load Accumulator With Shift(数据左移后装入累加器)1 1带移位0~15-bit装入ACC,长立即数2 2带移位16-bit装入ACC,直接或间接1 1LACL 装入ACC的低段,直接或间接Load Low Accumulator and Clear HighAccumulator(装载累加器低位并清累加器高位)1 1装入ACC的低段,短立即数1 1LACT 装入ACC,由TREG低4位(0~3bit)决定移位(0~15bit),直接或间接Load Accumulator With Shift Specifiedby TREG(按TREG规定的移位后装入累加器)1 1NEG ACC取负Negate Accumulator(累加器求负) 1 1NORMACC内容归一化,间接Normalize Contents of Accumulator(规格化累加器)1 1OR ACC或数据值,直接或间接OR With Accumulator(与累加器逻辑“或” )1 1ACC或长立即数,带0~15-bit移位2 2ACC或长立即数,带16-bit移位2 2ROLACC循环左移Rotate Accumulator Left(累加器逻辑循环左移)1 1RORACC循环右移Rotate Accumulator Right(累加器逻辑循环右移)1 1SACH 存高段ACC,带移位0~7-bit,直接或间接Store High Accumulator With Shift(移位并存储累加器高位)1 1SACL 存低段段ACC,带移位0~7-bit,直接或间接Store Low Accumulator With Shift(移位并存储累加器低位)1 1SFLACC左移Shift Accumulator Left(累加器算术左移)1 1SFRACC右移Shift Accumulator Right(累加器算术右移)1 1SUB 从ACC减,带移位0~15 - bit,直接或间接Subtract From Accumulator (从累加器减 1 1从ACC减,带移位 0~15-bit,长立即数2 2从ACC减,带移位 16- bit,1 1直接或间接从ACC减,短立即数1 1SUBB 从ACC带借位减,直接或间接Subtract From Accumulator With Borrow(带借位从累加器减1 1SUBC 条件减,直接或间接Conditional Subtract(条件减法 1 1SUBS从ACC减,抑制符号展开,直接或间接Subtract From Accumulator With SignExtension Suppressed (抑制符号扩展从累加器减1 1SUBT 从ACC减,由 TREG决定的移位( 0~15-bit),直接或间接Subtract From Accumulator With ShiftSpecified by TREG (按TREG指定的值进行移位后从累加器减1 1XOR ACC异或数据值,直接或间接Exclusive OR With Accumulator (与累加器逻辑“异或”1 1ACC异或长立即数,带0~15-bit移位2 2ACC异或长立即数,带16-bit移位2 2ZALR ACC低段置0,舎入后装入ACC高段,直接或间接Zero Low Accumulator and Load HighAccumulator With Rounding(累加器低位清零并四舍五入装载累加器高位1 1辅助寄存器指令助记符指令描述指令的中英文指令字周期ADRK 常数加给AR,短立即数Add Short-Immediate Value toAuxiliary Register(短立即数加至当前辅助寄存器1 1BANZ 当前AR非0转移,间接Branch on Auxiliary RegisterNot Zero(辅助寄存器不等于2 2零转移CMPR 当前AR与AR0比较Compare Auxiliary RegisterWith AR0 (比较当前辅助寄存器和AR0,并把比较结果放在ST1的TC位1 1LAR 从指定的数据位置装入指定的AR,直接或间接Load Auxiliary Register(装载辅助寄存器1 2常数装入指定的AR,短立即数1 2常数装入指定的AR,长立即数2 2MAR 修改当前AR和/或ARP,间接(直接时无操作)Modify Auxiliary Register(修改辅助寄存器1 1SAR 存指定的AR至指定位置,直接或间接Store Auxiliary Register(存储辅助寄存器1 1SBRK 从当前AR减去常数,短立即数Subtract Short-ImmediateValue From AuxiliaryRegister(从当前辅助寄存器减去短立即数1 1暂时寄存器(TREG)、乘积寄存器(PREG)和乘法指令助记符指令描述指令的中英文指令字周期APAC PREG加到ACC Add PREG to Accumulator(P寄存器加至累加器1 1LPH 装入PREG高位Load Product Register HighWord(装载乘积寄存器高位1 1LT 装入TREG,直接或间接Load TREG(装载TREG寄存器1 1LTA 装入TREG,累加前次乘积,直接或间接Load TREG and AccumulatePrevious Product(装载TREG寄存器并累加前次乘积1 1LTD 装入TREG,累加前次乘积,搬移数据,直接或间接Load TREG, AccumulatePrevious Product, and MoveData(装载TREG寄存器、累加前次乘积并移动数据1 1LTP 装入TREG,存PREG入ACC,直接或间接Load TREG and Store PREG inAccumulator(装载TREG寄存器并存储PREG寄存器到累计器1 1LTS 装入TREG,减去前次乘积,直接或间接Load TREG and SubtractPrevious Product(装载TREG寄存器并减去前次乘积1 1MAC 乘且累加,直接或间接Multiply and Accumulate(乘且累加2 3MACD 乘且累加,数据转移,直接或间接Multiply and Accumulate WithData Move(乘且累加并带数据移动2 3MPY TREG乘数据值,直接或间接Multiply(乘 1 1TREG乘13-bit常数,短立即数1 1MPYA 乘且累加前次乘积,直接或间接Multiply and AccumulatePrevious Product(乘且累加前次乘积1 1MPYS 乘且减去前次乘积,直接或间接Multiply and Subtract PreviousProduct(乘且减去前次乘积 1 1MPYU 乘无符号数,直接或间接Multiply Unsigned(无符号乘法 1 1 PAC PREG装入ACC Load Accumulator With ProductRegister(将乘积寄存器装入累加器1 1SPAC 从ACC减去PREG Subtract PREG FromAccumulator(从累加器减去PREG寄存器1 1 SPH 存高段PREG,直接或间接Store High PREG(存储PREG 1 1高位SPL 存高段PREG,直接或间接Store Low PREG(存储PREG低位1 1SPM 设置乘积移位方式Set PREG Output ShiftMode(设置PREG移位方式1 1SQRA 平方且累加前次乘积,直接或间接Square Value and AccumulatePrevious Product(平方并累加前次乘积1 1SQRS 平方且减去前次乘积,直接或间接Square Value and SubtractPrevious Product(平方并减去前次乘积1 1转移指令助记符指令描述指令的中英文指令字周期B 无条件转移,间接Branch Unconditionally(无条件转移 2 4 BACC 转移至ACC指定的地址Branch to Location Specified byAccumulator(按累加器内容转移1 4BANZ 当前AR非0时转移,间接;判断(AR,(AR-1→(ARBranch on Auxiliary Register NotZero(当前辅助寄存器不等于零转移 2 4BCND 条件转移Branch Conditionally(条件转移 2 4CALA 调用ACC指定位置的子程序,间接Call Subroutine at Location Specifiedby Accumulator(调用累加器低16位指定地址处的子程序2 4CALL 调用子程序,间接Call Unconditionally(无条件调用指令2 4 CC 条件调用Call Conditionally(条件转移指令 2 4 INTR 软中断Software Interrupt(软中断 1 4NMI 不可禁止的中断Nonmaskable Interrupt(不可屏蔽中断转移到程序存储器1 4 RET 从子程序返回Return From Subroutine(子程序返回 1 4 RETC 条件返回Return Conditionally(条件返回 1 4 TRAP 软件中断Software Interrupt(软件陷阱中断 1 4 控制指令助记符指令描述指令的中英文指令字周期BIT 位测试,直接或间接Test Bit(位测试 1BITT 由TREG指定的位测试,直接或间接Test Bit Specified byTREG(测试TREG寄存器规定的位1CLRC 清除C位Clear Control Bit(状态位清零1清除INTM位 1 1 清除OVM位 1 1 清除SXM位 1 1 清除TC位 1 1 清除XF位 1 1IDLE 停止执行,直至中断Idle Until Interrupt(空闲直至中断发生1LDP 装入数据页指针,直接或间接Load Data PagePointer(装载数据页指针 1装入数据页指针,短立即数1 2LST 装入状态寄存器ST0,直接或间接Load Status Register(装载状态寄存器1装入状态寄存器ST0,直接或间接1 2NOP 无操作No Operation(空操作 1POP 将堆栈顶弹出至ACC低段Pop Top of Stack to Low Accumulator(栈顶弹出至累加器的低位1POPD 将堆栈顶弹出至数据存储器,直接或间接Pop Top of Stack to DataMemory(栈顶弹出至数据存储器1PSHD 将数据存储器的值压入堆栈,直接或间接Push Data-Memory ValueOnto Stack(数据存储器值进栈1PUSH 将ACC低段压入堆栈Push Low AccumulatorOnto Stack(累加器低位进栈1RPT 重复执行下一条指令,直接或间接Repeat NextInstruction(重复执行下条指令1重复执行下一条指令,短立即数1 1SETC 设置SXM位Set Control Bit(置位 1 设置TC位 1 1设置XF位 1 1设置C位 1 1设置CNF位 1 1设置INTM位 1 1设置OVM位 1 1SPM 设置乘积移位模式Set PREG Output ShiftMode(设置PREG移位输出方式1SST 存状态寄存器ST0,直接或间接Store Status Register(存储状态寄存器1存状态寄存器ST1,直接或间接1 1I/O和存储器指令助记符指令描述指令的中英文指令字周期BLDD 数据块从数据存储器搬移至数据存储器,直接或间接,长立即数作源存储器地址Block Move From Data Memory toData Memory(数据存储器到数据存储器的块传送2 3BLPD 数据块从程序存储器搬移至数据存储器,直接或间接,长立即数作源存储器地址Block Move From Program Memoryto Data Memory(程序存储器到数据存储器的块传2 3DMOV 数据在数据存储器中搬移,直接或间接Data Move in Data Memory(在数据存储器内传送数据1 1IN 从I/O输入数据,直接或间接Input Data From Port(端口地址送数据地址总线2 2OUT 输出数据至口,直接或间接Output Data to Port(端口地址送数据地址总线2 3SPLK 存长立即数至数据存储器,直接或间接Store Long-Immediate Value to DataMemory(存储长立即数值至数据存储器2 2TBLR 读数据表,直接或间接Table Read(读表 1 3TBLW 写数据表,直接或间接 Table Write(写数据表 1 31. 指令格式(即语法)不带进位加法指令格式: ADD dma [,shift] ;直接寻址 ADD dma ,16 ;16位左移直接寻址 ADD ind [,shift [,ARn ] ] ;间接寻址 ADD ind ,16[,ARn ] ;16位左移的间接寻址 ADD #k ;短立即寻址ADD #lk [,shift ] ;长立即寻址2.操作数dma;直接寻址时,数据存储器地址低7位shift:;左移值从0 到 15(默认值为0)n;指示下一个辅助寄存器n= 0~ 7 k: ;8位短立即数值lk: ;16位短立即数值ind;选择下列7种间接寻址方式中的一种* *+ *- *0+ *0- *BR0+ *BR0-3.操作码.执行4(1 (Smem+(src→src(2 (Smem<<(TS)+(src)→src(3 (Smem<<16+(src)→dst(4 (Smem[ <<SHIFT]+(src)→dst(5 (Xmem <<SHIFT+(src)→src(6( (Xmem+ (Ymem <<16→dst(7 lk<<SHFT+(src)→dst(8 lk<<16+(src)→dst(9 (src or[dst]+(src)<<SHIFT→dst(10 (src or[dst]+(src)<<ASM→dst5.状态位指令执行受SXM和OVM的影响,指令执行结果影响C和OV 6.说明把一个16位的数加到选定的累加器中,或一个采用双数据存储器操作数寻址的操作数Xmen。
TI公司三大系列DSP芯片指令系统比较
TI公司三大系列DSP芯片指令系统比较摘要:DSP技术已成为目前电子工业领域发展最迅速的技术,在各行各业的应用越来越广泛。
DSP微处理器是以数字信号来处理大量信息的器件,已成为电子工业领域增长最迅速的产品之一。
TI公司作为最早从事DSP微处理器研究的厂商之一,已经形成了三大系列的DSP芯片,在电子行业各个领域占有很大的市场份额。
本文通过对TI公司三大系列DSP芯片的简要介绍,对这三大系列芯片的指令系统进行了比较。
关键词:TI DSP芯片指令系统比较一、前言在经历整整二十年的市场拓展之后,DSP所树立的高速处理器地位不仅不可动摇,而且业已成为数字信息时代的核心引擎。
与此同时,DSP的市场正在蓬勃发展。
从TI推出业界第一颗商用DSP开始,陆续有公司设计出适合于DSP处理技术的处理器,于是DSP开始成为一种高性能处理器的名称。
TI在1982年发表一款DSP处理器名为TMS32010,其出色的性能和特性倍受业界的关注,当努力使DSP处理器每MIPS成本也降到了适合于商用的低于$10美元范围时,DSP不仅在在军事,而且在工业和商业应用中不断获得成功。
1991年TI推出的DSP批量单价首次低于$5美元而可与16 位的微处理器相媲美,但所能提供的性能却是其5至10倍。
多家公司跻身于DSP领域与TI进行市场竞争。
TI首家提供可定制DSP,称作cDSP。
cDSP 基于内核DSP的设计可使DSP具有更高的系统集成度,大加速了产品的上市时间。
同时TI瞄准DSP 电子市场上成长速度最快的领域,适时地提供各种面向未来发展的解决方案。
到九十年代中期,这种可编程的DSP器件已广泛应用于数据通信、海量存储、语音处理、汽车电子、消费类音频和视频产品等等,其中最为辉煌的成就是在数字蜂窝电话中的成功,逐渐形成了现今TI三大系列主流DSP芯片。
TI通过不断革新,推陈出新,DSP业务也一跃成为TI的最大的业务,并始终处于全球DSP市场的领导地位。
第六章1_C2000寻址方式和指令系统
@@ 当使用C28x语法时,128字的数据页通过“@@‖符号来表示。 loc16 16位寻址方式指定地址单元的内容 loc32 32位寻址方式指定地址单元的内容 #16bitSingned 16位有符号立即数
第6章 寻址方式和汇编指令
6 .2 汇编语言指令集
指令集
▲ 按照字母的顺序对TMS320F2812的指令进行了详细的 介绍 ▲ 分析了各种可用的指令格式以及指令的功能和执行过程、 对状态位的影响等
符不能从源语句的第一列开始。它包括下列操作码之一:
√ 汇编指令(例如ABS, MPY, SPH); √ 伪指令(例如.data, .list, .set); √ 宏指令(例如.macro, .mexit)。 ▲ 操作数域 —— 是跟在助记符域后面的操作数列表,可缺省。如果多于两
个操作数,则用逗号隔开。它可以是常数、符号和表达式。
√ . copy―filename‖ 中的文件名; √ . sect―section name‖ 中的段名; √ . byte―charstring‖ 中数据初始化伪指令; √ . string 伪指令的操作数。 字符常数代表一个单独的整数值,而字符串是字符的列表。 ▲ 符号 —— 符号被用做标号、常数及替代符号。符号名最多可由32个字母和
第6章 寻址方式和汇编指令
6 . 1 寻址方式
间接寻址方式
XAR0到XAR7(辅助寄存器指针):在这种寻址方式下, 32位的XARn寄存器被当作一般性数据指针.可以通过指 令实现对辅助寄存器XARn加1,(操作前/后)减1和变 址操作.
寄存器寻址方式
在该寻址方式下,寄存器可以是访问的源操作数,也 可以是目标操作数,这样在F2812中就能实现寄存器到寄存 器的操作.这一方式包括对32位和16位寄存器的寻址。
精通 C2000 DSP 编程(2)
(C2000 DSP CLUB原创!连载!)精通C2000 DSP编程(2)在编程(1)中主要介绍了编程前的准备工作,在编程(2)中将通过一个经典的循环程序来介绍CCS的操作:CCS配置、建立工程、调试程序、断点、探针、变量观测、图形等等,通过学习这部分,可以掌握CCS操作的绝大部分,对于开发来说,已经够用了,你不需要再买什么CCS操作之类的书了,也不需要花太多的时间用在熟悉CCS操作之上。
一、CCS的配置在使用CCS之前需要针对不同类型的DSP器件进行开发环境的配置,现在以TMS320F2812为例,说明具体的配置方法,其他器件按照这里讲述的一样操作即可。
CCS正常安装完后会在桌面上出现这两个图标:先点击图标进入CCS配置环境,如下图所示:通常情况下安装完CCS后,第1次进入里面,系统已经将CCS配置为F2812 软仿真状态(软仿真和硬件仿真最主要的区别是软仿真不需要硬件仿真器,并且只可以测试与外设无关的程序,而硬件仿真需要仿真器支持,可以测试任何程序,硬件仿真将在后面的章节介绍。
),如上图所示,这里我们就选择系统默认的配置,对F2812做软仿真,这个时候将这两个界面Import Configuration和Code Composer Studio Setup关闭,在关闭的时候会出现以下对话框,点击“否”就好了,以后就可以通过点击进入CCS开发环境。
如果要改变系统的默认配置,比如我们要对F2810做软仿真的话,可以这样来操作:同样按照上面所说进入CCS配置环境,接着将下图关闭掉,然后进入下面的界面:右键点击F2812 Device Simulator-Remove,将其删除,如下图所示;接下来点击File-Import,出现下面的界面:然后在Family一栏中选择器件类型,这里选择F28xx,在Platform下面选择软仿真simulator,在Endianness下面选择all,再在最上面的Available Configurations下面选择F2810 Device Simulator,接着点击上图中的Import按扭和关闭Import Configuration界面,然后点击File-Save退出界面,同样关闭此界面的时候会出现一个“是”和“否”选择对话框,我们选择“否”就可以。
DSP指令集.doc
C2 的指令集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等注:有些指令助记符是增强性指令,对应于几条简单指令(机器码),如:ADD可完成ADD,ADDH,ADDK和ADLK等功能,这样做可使程序更简洁并易读。
1.指令格式(即语法)不带进位加法指令格式:ADD dma [,shift] ;直接寻址ADD dma,16 ;16位左移直接寻址ADD ind [,shift [,ARn ] ] ;间接寻址ADD ind ,16[,ARn ] ;16位左移的间接寻址ADD#k ;短立即寻址ADD#lk [,shift ] ;长立即寻址2.操作数dma ;直接寻址时,数据存储器地址低7位shift: ;左移值从 0 到 15 (默认值为 0)n ;指示下一个辅助寄存器 n= 0~ 7k: ;8位短立即数值lk: ;16位短立即数值ind ;选择下列7种间接寻址方式中的一种* *+ *- *0+ *0- *BR0+ *BR0-3.操作码4.执行(1) (Smem)+(src)→src(2) (Smem)<<(TS)+(src)→src(3) (Smem)<<16+(src)→dst(4) (Smem)[ <<SHIFT]+(src)→dst(5) (Xmem) <<SHIFT+(src)→src(6)( (Xmem)+ (Ymem)) <<16→dst(7) lk<<SHFT+(src)→dst(8) lk<<16+(src)→dst(9) (src or[dst])+(src)<<SHIFT→dst(10) (src or[dst])+(src)<<ASM→dst5.状态位指令执行受SXM和OVM的影响,指令执行结果影响C和OV6.说明把一个16位的数加到选定的累加器中,或一个采用双数据存储器操作数寻址的操作数Xmen。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本节假设条件为芯片工作于 C28x 模式(OBJMODE=1,AMODE=0)。复位后,通过执行指令 C28OBJ 或者 SETC OBJMODE 将 ST1 中的 OBJMODE 位置 1,芯片即可工作于 C28x 模式。
测试标志位
0000 NEQ 不等于
Z=0
0001 EQ
等于
Z-1
0010 GT
大于(有符号减法)
Z=0 且 N=1
0011 GEQ 大于或等于(有符号减法) N=0
0100 LT
小于(有符号减法)
N=1
0101 LEQ 小于或等于(有符号减法) Z=1 或 N=1
0110 HI
高于(无符号减法)
C=1 且 Z=0
BIO=0
1111 UNC 无条件
表 6-2 影响指令的判断条件的说明
在汇编程序当中实现乘法操作时一件非常不简单的事,由于是属于纯寄存器操作,因此, 开发人员需要准备保存乘法结果的地址,在表 6-1 当中讲解操作数符号的时候有一个关于乘 积操作的符号—PM,那么它的结果保存是如何执行的呢?下面通过表 6-3 来说明一下。
6.2 寻址方式
通过 6.1 节当中读者们应当对汇编语言编程有了一定的了解,仅仅了解了汇编语言的操 作符还是不过的,接下来就从汇编语言最根本的开始学习——寻址方式寻址方式就是寻找操 作数或者操作数地址的方式,在存储器中,操作数或指令字写入或读出的方式,有地址指定 方式、相联存储方式或堆栈存取方式。几乎所有的计算机,在内存中都采用地址指定方式。 当采用地址指定方式时,形成操作数或指令地址的方式称为寻址方式。C28x 系列 DSP 的指 令集采用 7 种寻址方式: 1. 直接寻址方式:DP(数据页指针),在此方式中,16 位的 DP 寄存器被当做一个固定的
0111 HIS,C 高于或相同(无符号减法) C=1
1000 LO,NC 低于(无符号减法)
C=0
1001 LOS 低于或相同(无符号减法) C=1 或 Z=0
1010 NOV 无溢出
V=0
1011 OV
溢出
V=1
1100 NTC 测试位为 0
TC=0
1101 TC
测试位为 1
TC=1
1110 NBIO BIO 输入等于零
表 6-3 PM 与结果保存方式的关系
6.1.2 汇编语法指令描述
前一小节提到过,汇编指令一般都由操作符和操作数组成,操作符也被称为指令助记符, 它是指令中的关键字,表示本条指令操作类型,不能省略。操作数可以省略,也可以有很多, 但各操作数之间要用“,”分开。指令助记符与操作数之间要用空格分开。
ARn: n 为数值 0~7,ARn 指定下次的辅助寄存器。 ind: 选择一下 7 种符号之一:*,*+,*-,*0+,*0-,*BR0+,*BR0-(兼容模式使用)。 #:立即寻址方式中常用的前缀。数值前面带“#”,表示该数值为一个立即数。 <<左移。 >>右移。
表示这个单元内的 16/32 位数据。
在寄存寻址方式下, loc16/loc32 表示一个 16 位或 32 位寄存器(如 ACC、P、XT、AH
等), [loc16]/[loc32]表示这些寄存器内的 16/32 位数据。
ARn,ARm 32 位辅助寄存器 XAR0~XAR7 的低 16 位
ARnH ARPn AR(ARP) XAR(ARP) AX # PM PC ~ [loc16] 0:[loc16] S:[loc16] [loc32] 0:[loc32] S:[loc32] 7bit 0:7bit S:7bit 8bit 0:8bit S:8bit 10bit 0:10bit S:10bit 16bit 0:16bit S:16bit 22bit 0:22bit S:22bit LSb LSB LSW MSb MSB MSW OBJ N {} = ==
6.1.1 DSP中的操作数
汇编语言离不开操作符和操作数,操作符可以认为就是 CPU 的指令或者编译器上的伪指
令,操作数是指令执行过程中的参与者,也可以说操作数就是指令所控制的对象。
如表 6-1,表 6-2 和表 6-3 对指令中常用到的一些操作数符号进行说明
符号
描述
XARn
32 位辅助寄存器 XAR0~XAR7
页指针,讲指令中提供 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. 字节寻址方式:该方式能访问到股东地址单元的最低有效位和最高有效位。
PM 保存方式 +4 P(31:4)=相乘结果中低 38 位的(27:0),P(3:0)+0 +1 P(31:1)=相乘结果中低 38 位的(30:0),P(31)+0 0 P(31:0)=相乘结果中低 38 位的(31:0) -1 P(31:0)=相乘结果中低 38 位的(32:1) -2 P(31:0)=相乘结果中低 38 位的(33:2) -3 P(31:0)=相乘结果中低 38 位的(34:3) -4 P(31:0)=相乘结果中低 38 位的(35:4) -5 P(31:0)=相乘结果中低 38 位的(36:5) -6 P(31:0)=相乘结果中低 38 位的(37:6)
@: 当使用 C28x 语法时,64 位字段数据与通过“@”符号来表示,一帮组程序员理解当前正在 使用哪种寻址模式。
@@: 当使用 C28x 语法时,128 位字段数据页通过“@@”符号来表示。 loc16:16 位寻址方式指定地址单元的内容。 loc32:32 位寻址方式指定地址单元的内容。 #16bitsigned:16 位有符号立即数。
第六章 DSP的寻址方式和汇编指令
当硬件执行指令时,寻找指令所指定的参与运算飞操作数的方式——寻址方式。根据 程序的要求采用不同的寻址方式,可以有效地缩短程序的运行时间和提高代码执行效率。汇 编指令是可执行指令,每一条指令对应一条机器码,用来控制处理器仲的执行部分进行各种 操作。在本章节当中将主要以基于 C28x 的 DSP 芯片为例,为读者讲解 DSP 的寻址方式和汇 编指令系统,其中大部分内容也可适用于其他 Ti 公司的 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 的所有有效特性、寻址方式和指令系统,
地址对应的 16/32 位数据。以上 7 种寻址方式都与“loc16/loc32”组合起来使用。
在间接寻址方式下,loc16/loc32 表示放在辅助寄存器(XAR0~XAR7)中的一个地址,
[loc16]/[loc32]表示这个地址对应的 16/32 位数据。
在堆栈寻址方式下,loc16/loc32 表示堆栈指针指向的一个堆栈单元,[loc16]/[loc32]
因此,一般应使 C28x 芯片工作于该种模式。 2. C27x 目标——兼容模式:在复位时,C28x 的 CPU 处于 C27x 目标-兼容模式。在该模式
下,目标码与 C27xCPU 完全兼容,且它的循环—计数也与 C27xCPU 兼容。 3. C2xLP 源——兼容模式:该模式允许用户运行 C2xLP 的源代码,这些源代码是用 C28x
[loc16]表示 loc16 这种寻址方式对应的 16 位数据。
2. loc32:为32位数据访问选择直接/堆栈/间接/寄存器寻址方式。
[loc32]表示 loc32 这种寻址方式对应的 32 位数据。
在直接寻址方式下,loc16/loc32 指的是一个用标号表示的地址和操作码内 8 位字段的 6 位或 7 位偏移量共同决定。[loc16]/[loc32]表示这个
32 位辅助寄存器 XAR0~XAR7 的高 16 位 32 位辅助寄存器指针,ARP0 指向 XAR0,ARP1 指向 XAR1…… ARP 指向的辅助寄存器的低 16 位 ARP 指向的辅助寄存器 累加器的高 16 位寄存器 AH 或者 16 位寄存器 AL 立即数助记符 乘积移位方式(+4 ,1 ,0 ,-1,-2,-3,-4 ,-5 ,-6) 22 位程序计数器 按位求反码 Loc16 寻址方式对应的 16 位数据 将 Loc16 寻址方式对应的 16 位数据进行零扩展 将 Loc16 寻址方式对应的 16 位数据进行符号扩展 Loc32 寻址方式对应的 32 位数据 将 Loc32 寻址方式对应的 32 位数据进行零扩展 将 Loc32 寻址方式对应的 32 位数据进行符号扩展 表示 7 位立即数 7 位立即数,零扩展 7 位立即数,符号扩展 表示 8 位立即数 8 位立即数,零扩展 8 位立即数,符号扩展 表示 10 位立即数 10 位立即数,零扩展 10 位立即数,符号扩展 表示 16 位立即数 16 位立即数,零扩展 16 位立即数,符号扩展 表示 22 位立即数 22 位立即数,零扩展 22 位立即数,符号扩展 最低有效位 最低有效字节 最低有效字 最高有效位 最高有效字节 最高有效字 对于某条指令,位 OBJMODE 的状态 重复次数(N=0,1,2,3,4,5,6…) 可选字段 赋值 等于