“DSP技术”第6章 混合编程
DSP原理与应用---第6章 McASP
PSAcM 1.3.5
PSAcM置配来骤步的面下照按
。迟延的间之始开元单和沿边号信步同帧指是这。期周钟时 行串个2或1�0为定指被以可迟延号信步同帧�下式模号信步同帧发突在 。息信制控输传 间片芯PSD个两在如例�输传的据数频音非于用要主。的动驱据数是而 �性期周是不生产的号信步同帧下式模种这�式模输传发突持支PSAcM
�作操下如行进要�1到变0从脚 引个一将。脚引的心关所响影仅仅作操写的器存寄TESDP对为 因是这。器存寄TUODP用使是不而器存寄TESDP用使荐推�1 为变0从出输将若�0出输并�脚引出输用通为置配被脚引果如
。]n[TUODP的应相位置将�]n[TESDP位置
1到变0从据数将TESDP用使——脚引出输用通�3-5例
�
子例的理处行进性活灵的帧和钟时PSAcM用利
。了据数取读元单化式格经�)名别的FUBRX收接(器存寄FUBR过 通以可就PSD在现。中FUBRX存缓据数到制复被就据数些这着接�后之RSRX了 到集收被都元单据数个整在。RSRX器存寄位移入移脚引]n[RXA过通据数�收接 � 。)LTCRS( 器存寄制控�)FUBRX(器存缓据数�)RSRX(器存寄位移个一括包器行串个一每 。PSAcM出移或入移据数行串将责负器行串。制控来]n[LTCRS器存寄由器行串 �
�
� �
介简 PSAcM
1. 5
tiB tnacifingiS tsaeL 。充填来)BSL或BSM是般一(位一的中字者或1、0用以可位加附的字于属不 。)尾末(边右的元单在排以可也)始开(边左的元单到列排以可字�时度长元单于小度长 的字当。位低最是以可也�PSAcM出先或进先位高最是以可位些这�内元单个一在 。位加附的字充填来用些那括包也元单�数位的适合说来口接件 器部外和PSD 于对到充填字将了为时有。位些那的字成组括包元单个一�)tolS(元单� 。据数的输传间之件器部外和PSD在了成组它�位组一是字�)droW(字� 。志标为作沿边的钟时 行串个一用是都束结和始开的位个每。分部成组小最的中流据数行串是位�)tiB(位� tiB tnacifingiS tsoM
DSP集成开发环境中的混合编程及FFT算法的实现(精)
DSP集成开发环境中的混合编程及FFT算法的实现摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTA—C)连续时间型滤波器的结构、设计和具体实现,使用外部可编程电路对所设计滤波器带宽进行控制,并利用ADS软件进行电路设计和仿真验证。
仿真结果表明,该滤波器带宽的可调范围为1~26 MHz,阻带抑制率大于35 dB,带内波纹小于0.5 dB,采用1.8 V电源,TSMC 0.18μm CMOS工艺库仿真,功耗小于21 mW,频响曲线接近理想状态。
关键词:Butte1 引言CCS(Code Composer Studio)是TI公司的DSP集成开发环境。
它提供了环境配置、源文件编辑、程序调试、跟踪和分析等工具,帮助用户在一个软件环境下完成编辑、编译链接、调试和数据分析等工作。
与TI提供的早期软件开发工具相比,利用CCS能够加快软件开发进程,提高工作效率。
CCS一般工作在两种模式下:软件仿真器和与硬件开发板相结合的在线编程。
前者可以脱离DSP芯片,在PC机上模拟DSP指令集与工作机制,主要用于前期算法实现和调试。
后者实时运行在DSP芯片上,可以在线编制和调试应用程序。
2 C语言和汇编语言的混合编程TMS320 C5000系列的软件设计通常有三种方法:(1) 用C语言开发;(2) 用汇编语言开发;(3) C和汇编的混合开发。
其中用C语言开发具有兼容性和可移植的优点,有利于缩短开发周期和减少开发难度,但是在运算量较大的情况下,C代码的效率还是无法和手工编写的汇编代码的效率相比,比如FFT运算,用汇编语言开发的效率高,程序执行速度快,而且可以合理利用芯片的硬件资源,但是开发难度较大,开发周期长,而且可读性和可移植性差。
C和汇编的混合编程则可以充分利用前两者的优点,以达到最佳利用DSP资源的目的。
但是,采用C和汇编语言混合编程必须遵循相关函数调用规则和寄存器调用规则,否则会给程序的开发带来意想不到的问题。
DSP原理与应用——汇编语言程序开发工具
*******************************
,8
*******************************
** 仍然在 段中
**
*******************************
0456h
行号 目标代码 段名
100d f010 0001 f842 0001 110a f166 000a F868 0006
●
——定义已初始化段
第6章 汇编语言程序开发工具
6.3.2 汇编器对段的处理 1. 未初始化段
未初始化段就是在’C54x存储器中保留空间, 通常它们被定位在区。在目标文件中,这些段中没 有确切的内容。
由这些段定义的空间仅作为临时存储空间,在 程序运行时,可以利用这些存储空间存放变量。
未初始化段分为默认的和命名的两种,分别由 汇编器伪指令和产生。
段——是存储器中占据相邻空间的代码或数据块。 一个目标文件中的每个段都是分开的和各不相同的。
目标文件都包含以下3种形式的段: 段(文本段) 段Байду номын сангаас数据段) 段(保留空间段)
第6章 汇编语言程序开发工具
6.3.1 文件的基本单元
2. 段的基本类型 目标文件中的段有两种基本类型。
(1) 初始化段 初始化段
软件仿真器:是一种模拟芯片各种功能并在 非实时条件下进行软件调试的调试工具,它不需目 标硬件支持,只需在计算机上运行。
初学者工具:是公司提供给初学者进行编程 练习的一套廉价的实时软件调试工具。
第6章 汇编语言程序开发工具
()
第6章 汇编语言程序开发工具
C5402 实物图
第6章 汇编语言程序开发工具
HEX代码 转换工具
DSP原理及应用第6章
● 6.1 ●6.2 ● 6.3 ●6.4 ●6.5
汇编语言格式 伪指令 宏指令 通用目标文件格式 程序举例
由汇编语言编写的程序称为汇编语言源程序 由汇编语言编写的程序称为汇编语言源程序
源程序经过汇编器汇编生成机器语言目标程序 源程序经过汇编器汇编生成机器语言目标程序
由链接器将多个目标文件链接成一个可执行程序 由链接器将多个目标文件链接成一个可执行程序
若有就连续分配, 若有就连续分配, 若无则从下一页开始分配。 若无则从下一页开始分配。
8.存储8位值伪指令 .存储 位值伪指令 位值伪指令.byte 句法: 标号 标号] 数值1[,数值2, ,数值n] 句法 [标号 .byte 数值 ,数值 ,…,数值 说明: 指令将一个或多个8位的值置入当前段 说明:.byte指令将一个或多个 位的值置入当前段 指令将一个或多个 的连续字中。 的连续字中。 数值可以是常数、表达式、字符串( ① 数值可以是常数、表达式、字符串(用双 引号括起来)。 引号括起来)。 使用标号时, ② 使用标号时,汇编器将标号指向第一个 .byte的位置。 的位置。 的位置
40.赋值伪指令.set和.equ .赋值伪指令 和
句法: 句法: 符号 .set 数值 符号 .equ 数值 说明: 或 伪指令为一个符号定义一个常数值, 说明:.set或.equ伪指令为一个符号定义一个常数值, 伪指令为一个符号定义一个常数值 两条指令功能相同,可以换用。 两条指令功能相同,可以换用。 该符号存在符号表中,不能重复定义。 该符号存在符号表中,不能重复定义。 在源程序中符号必须写在标号域内, ① 在源程序中符号必须写在标号域内,一经定义即可 以代替该数值。 以代替该数值。 ② 在数值表达式中的符号必须事先定义。 在数值表达式中的符号必须事先定义。 伪指令可以使由.set定义的符号被其 ③ 用.def或.global伪指令可以使由 定义的符号被其 或 伪指令可以使由 他的模块调用。 他的模块调用。
DSP原理与应用---第6章-McASP教学内容
引脚方向寄存器(PDIR):选择引脚是输入还是输出
引脚数据输入寄存器(PDIN):显示引脚的输入数据
引脚数据输出寄存器(PDOUT):如果引脚被配置为通用(GPIO)输出口 (PFUNC[n] = 1 and PDIR[n] = 1),那么数据就会由此引脚输出。在引脚被配置为 McASP引脚时(PFUNC[n] = 0)此寄存器不可用。
5.3.3 数据发送和接收
1. 数据就绪状态和事件/中断的产生
(1) 发送数据就绪
发送数据就绪标志即XSTAT寄存器中的XDATA位反映了XBUF寄存器的状态。当 从XRBUF[n]缓冲器向XRSR[n] 移位寄存器传输数据时,XDATA标志位被置位, 表示XBUF是空的并准备好接收从DSP来的新数据了。当XDATA位被写入1或者 所有被配置为发送器的串行器都被DSP写入数据,标志位就会被清零。
5.3.2 传输模式
2. TDM传输模式
TDM 格式可以用于DSP芯片与一个或多个模-数转换器(ADC),数-模转换 器(DAC)之间的数据传输。
TDM格式包括三部分:时钟、数据和帧同步信号。在TDM的术语中,“ 单元”通常也被称为“通道”,一帧包括多个通道。每一个TDM帧是由 帧同步信号来定义的(AFSX或AFSR)。数据传输是连续的,因为TDM格 式主要用于跟工作在固定采样频率下的数据转换器进行通信,在单元之 间没有延迟。
单元内位序和字对齐方式
帧定义及帧同步宽度
帧(Frame):一帧可以包括一个或多个单元,这由具体协 议确定
McASP结构框图
McASP包括以下引脚: 串行数据引脚AXR[n]:每个McASP达到
dsp原理及应用-第6章-C语言和汇编语言混合编程
C语言和汇编语言的结合方式
内联汇编
将汇编语言代码与C语言代 码混编。
汇编语言函数
将汇编语言封装为函数, 用C语言调用。
C语言函数
将C语言封装为函数,在函 数中调用汇编语言子程序。
实例演示:C语言和汇编语言混合编程
1
C语言部分
通过C语言编写程序框架,并进行数据处理等高级任务。
2
汇编语言部分
通过汇编语言实现一些需要底层控制或高性能的部分。
3
代码整合
将C语言和汇编语言的代码整合到一起。
总结和要点
混合编程优点
• 可读性高 • 可维护性高 • 可扩展性强
结合方式
• 内联汇编 • 汇编语言函数 • C语言函数
基本原则
• 注释清晰 • 适当使用内联ห้องสมุดไป่ตู้编 • 预先规划好程序结构
汇编语言是一种低级计算机语言,是计算机指令的助记符。它可以直接操作硬件,能够完成 一些高级语言所不能完成的功能。
混合编程
把C语言和汇编语言结合起来,可以充分利用C语言的高级语言特性,同时也能利用汇编语 言的底层控制能力来处理一些需要精细控制的任务。
为什么需要混合编程
1 提高性能
当C语言性能不能满足需求时,可以使用汇编语言来进行优化,提高程序性能。
2 底层控制
在一些需要底层控制的任务中,汇编语言更为方便和直接。
3 扩展C语言能力
使用汇编语言,可以扩展C语言的能力,实现一些高级语言所不能实现的功能。
混合编程的优点
1
可读性
使用C语言编写程序的可读性很高,而且汇编语言部分可以通过注释来解释各个 部分的作用。
2
可维护性
大多数程序员都能够读懂C语言,并根据需要做出修改,这样也更容易实现程序 的维护。
DSP系统中C语言和汇编语言的混合编程
2
C语言和汇编语言的混合编程 C语言的存储器模型
1 C语言的存储器模型
C编译器产生的段
段名称 .text 已初 始化 段 .cinit .switch .const .bss 未初 始化 段 .stack .system 段内容 可执行代码和浮点常数 已初始化的全局变量和静态变量 的列表 用于多开关语句的跳转列表 已初始化的字符串、全局常量和 静态常量 全局和静态变量 软件堆栈 动态存储空间 存储器类型 ROM或RAM ROM或RAM ROM或RAM ROM或RAM RAM RAM RAM 页 0 0 0 1 1 1 1
独立的C和汇编模块接口
在编写汇编语言时必须遵循有关的寄存器规则和调用规 则,否则可能会破坏C的运行环境 在编写独立的汇编程序时,必须注意以下几点:
无论是C函数还是汇编函数,都必须遵循寄存器使用规则 必须保护函数要用到的几个专用寄存器,专用寄存器包括: AR0(FP)、AR1(SP)、AR6和AR7;其中,如果SP正 常使用的话,则不必明确加以保护,即只要汇编函数在返回 时弹出压入的对象,实际上就已经保护了SP 其它寄存器可以自由使用
18
C语言和汇编语言的混合编程 C语言与汇编语言的接口
2
19
C语言和汇编语言的混合编程 C语言与汇编语言的接口
在汇编语言中访问C程序变量
在C程序中定义全局变量 在汇编语言中使用.global声明为外部变量,变量名前加 下划线“_” 在汇编程序中正常地对变量访问
20
C语言和汇编语言的混合编程 C语言与汇编语言的接口
寄存器 AR0 AR1 AR2 AR2~AR5 AR6~AR7 ACC累加器 P T 结构指针 堆栈指针 局部变量指针 表达式分析 寄存器变量 表达式分析/返回值 表达式分析 表达式分析 用处 被调函数保护 Yes Yes No No Yes No No No
dsp第6章 应用程序设计PPT课件
8
第6章 应用程序设计
6.1.1 FIR滤波器的基本结构
在数字滤波器中,FIR滤波器具有如下几个主 要特点:
① FIR滤波器无反馈回路,是一种无条件稳定 系统;
② FIR滤波器可以设计成具有线性相位特性。
2020/7/30
DSP原理及应用
9
2. fir2函数
第6章 应用程序设计
例6.1.1 带通滤波器的特性
设计一个FIR低通滤波器,其设计参数:
滤波器阶数:N=40; 截止频率:wp=0.35,
ws=0.4。
2020/7/30
DSP原理及应用
13
第6章 应用程序设计
6.1.5 FIR滤波器的设计实例
1.由给定的设计参数确定滤波器的系数
根据给定的设计参数,滤波器系数可由MATLAB 中的fir2函数产生,函数调用格式:
若h(n)为实数,且满足偶对称或奇对称的条件, 则FIR滤波器具有线性相位特性。
偶对称:h(n)= h(N-1-n);
奇对称:h(n)= -h(N-1-n)。 偶对称线性相位FIR滤波器的差分方程:
N1 2
y(n)bi[x(ni)x(nN1i)] i0
N——偶数
(6.1.4)
2020/7/30
DSP原理及应用
DSP原理及应用
6
第6章 应用程序设计
6.1.1 FIR滤波器的基本结构
FIR滤波器的结构 :
x(n-1)
x(n)
z-1
z-1
x(n-N+1)
z-1
+
y(n)
bN-1
bN-2
b1
b0
2020/7/30
DSP原理及应用
第6章__C语言和汇编语言混合编程(C55x_DSP)
第6章 C语言和汇编语言混合编程
混合编程中参数传递和寄存器使用
第6章 C语言和汇编语言混合编程
6.1 混合编程中参数传递和寄存器使用
在很多DSP应用中都使用C语言和汇编语言进行混合编 程。C语言具有可读性高、便于维护和可移植性好等优点, 然而汇编语言具有实时运行效率高和代码效率高的优点。使 用汇编语言可以更充分地利用DSP的硬件资源,例如乘累加 单元、单指令重复、块重复和块移动等。
int MessageLength()
{ int Length = 0; char *pMessage; //定义字符指针变量
pMessage = Message;
{
//指针指向Message 内存块的首地址
while(*pMessage != '$') //$为字符串的结束符 Length++; pMessage++; } return(Length); //返回字符串的长度 }
MRS tmp, CPSR
//把状态寄存器加载给tmp
ORR tmp, tmp, #80 //将IRQ控制位置1 MSR CPSR_c, tmp //加载程序状态寄存器 } }
第6章 C语言和汇编语言混合编程
EXPORT Message extern char* Message; @声明全局标号 Message DCB "HELLO$" @定义5个有效字符,$为结束符
3. 应用实例 以下是几个参数传递和返回值使用寄存器的例子。
【例6-1】 返回值存放于T0,参数传递时,16位数据i
使用T0,16位数据指针*k使用AR0,32位数据p使用AC0。 函数定义及使用寄存器关系表示如下:
DSP第6章
2.块程序重复操作
块程序重复操作RPTB将重复操作的范围扩大到任意长度的循环回 路。由于块程序重复指令RPTB的操作数是循环回路的结束地址,而 且,其下条指令就是重复操作的内容,因此必须先用STM指令将所 规定的迭代次数加载到块重复计数器(BRC)中。 RPTB指令的特点是:对任意长度的程序段的循环开销为0,其本 身是一条2字4周期指令;循环开始地址(RSA)是RPTB指令的下一 行,结束地址(REA)由RPTB指令的操作数规定。 【例6-10】对数组x[5]中的每个元素加1。 .bss x,5 start: LD #1,16,B STM #4,BRC STM #x,AR4 RPTB next-1 ADD *AR4,16,B,A STH A,*AR4+ next: LD #0,B
2.循环操作BANZ
在程序设计时,经常需要重复执行某段程序,利用 BANZ(当辅助寄存器不为0时转移)指令执行循环计数 和操作是十分方便的。 SUM: STM STM loop: ADD BANZ STL #x,AR3 #4,AR2 *AR3+,A loop,*AR2A,@y
;程序存储器
3.比较操作CMPR
【例6-7】计算 y =
a x
i 1
4
i i
程序: ******************************************** * example.asm * ******************************************** .title “example.asm” .mmregs ;为堆栈指定空间 stack .usect “STACK”,10h .bss a,4 ;为变量分配9个字的空间 .bss x,4 .bss y,1 .def start .data ; 变量初始化 table: .word 1,2,3,4 .word 8,6,4,2 .text
dsp原理及应用 第6章 C语言和汇编语言混合编程
第6章 汇编语言和C语言程序设计
《DSP原理及应用》
5
北京理工大学珠海学院信息学院
汇编伪指令
第6章 汇编语言和C语言程序设计
说明
技术汇编命令 包含一个已经写好的汇编文件 打印一个文件标题
举例
一般用于一个汇编文件的结尾 .include “240x.h” .title “vectors.asm”
.end .include .title
《DSP原理及应用》
15
北京理工大学珠海学院信息学院
第6章 汇编语言和C语言程序设计 MEMORY { PAGE0:/*程序存储器*/ name1[(attr)]: origin=constant,length=constant; …… namen[(attr)]: origin=constant,length=constant; PAGE1:/*数据存储器*/ name1[(attr)]: origin=constant,length=constant; …… namen[(attr)]: origin=constant,length=constant; PAGE2:/*I/O空间*/ name1[(attr)]: origin=constant,length=constant; …… namen[(attr)]: origin=constant,length=constant; }
.endif
(2) 第二种情况: .loop .endloop
DSP应用技术第6章 DSP应用技术实训
SEGPORT .set 1h
;数码管数据口地址
第6章 DSP应用技术实训
.bss SEG_DATA,10 .bss x,3
;用于存放从SEG_VALUE装载进来的数码管编码数据 ;用于存放从table0装载进来的输入数据
.bss y,3
;用于存放从table1装载进来的输入数据
.bss z,1
;用于存放输出数据(计算结果)
.data
table0: .word 1,1,2
;待计算的输入数据
table1: .word 1,1,3
;以下用于存放数码管编码数据,分别控制数码管显示0~9
SEG_VALUE .word 077h,014h,0b3h,0b6h,0d4h,0e6h,0e7h,034h,0f7h,0f6h
.text
start: stm #stack+SIZE, SP
第6章 DSP应用技术实训
6) 实验现象与结果 运行程序后, 用CCS观察相应的存储单元(见参考程序中 的变量z), 该单元存储了所给的一组数的累加值, 且与数码管 显示结果一致。
第6章 DSP应用技术实训
7) 思考题
修改参考程序, 实现所给的一组数的连乘, 并将结果送数码 管显示。
参考程序如下。
stm #2b40h,ST1;STM #2B40H,ST1;
stm #1e00h,ST0;
stm #02024h,PMST
;IPTR=0010,0000,0 ->RESET=2000H
stm #0h,SWWSR
stm #04007h,CLKMD
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
第6章 DSP应用技术实训
DSP混合编程
实验五混合编程一、实验目的1. 学习使用实时运行库;2. 熟悉用C和汇编混合编程的方法;3. 掌握混合编程的调试方法。
二、实验环境1. 集成开发环境Code Composer Studio2.0(简称CCS)2. 实验程序mix.c,mix.h(由程序自动加载,可不加,后同),mix.cmd,addfun.s54,rts.lib(有C的混合编程需要有库文件),c5402.gel(要有,有C的混合编程要用gel 初始设置。
选芯片时设置已自带,可不添加;如无则加)三、实验步骤1. 改设置:Build option子菜单linker中Basic项Autoinit Model 改为load-time Initialization或Run-time Initialization(不同的设置,SP初始值将不同。
No Initialization也可以,但效果不如前两个好)。
2. 为使效果更明显,屏蔽前两条printf( )语句(可与第三条对比,编译后将出现警告,可忽略),编译项目文件得到.out程序。
另外装载程序前,在Edit->Memory->Fill 中,对Data Memory从0x0000到0xFFFF用全0x1111或0x2222等填充(注意:填充后必须对Gel文件重新Load一次)。
然后装载程序,了解在混合编程环境下变量、函数的定义方法以及项目文件的编译方法。
3. 打开View Memory,用SP值(Debug_>Go main后的值)作为开始察看地址,从主程序main开始用Single Step方式调试程序,观察程序的执行过程。
尤其是在C 程序中调用汇编子函数以及返回的过程,注意当前SP和PC的变化。
四、实验结果分析1. 实时运行库实时运行库提供了标准C中的大部分函数,帮助建立C语言的环境,同时也提供一些基本的调试手段,如printf( )等。
2. 程序接口参数传递是混合编程中非常重要的一部分:第一个参数放置在寄存器A中,其他参数按照逆序压入堆栈;返回的数据放置在寄存器A中。
dsp第六章汇编程序
§6.3 宏指令
• 为了简化汇编语言程序的书写,常把一些频繁出现的程序段定义为宏指令
• 当程序需要执行这一段程序段时只要一条宏调用语句 ,减少汇编语言程序的重复书写
• TMS320系列DSP汇编器支持宏例指1 令
(1)宏定义
宏定义:
(2)宏调用 举例
parms
.macro x, y, z
LACC
x
• 这类伪指令使汇编器根据表达式 求值结果的真或假来汇编代码的某 些段。
• 伪指令分为8类。 1)段定义伪指令 2)初始化常数伪指令 3)段程序计数器排列伪指令 4)输出列表格式伪指令 5)引用其他文件伪指令 6)条件汇编伪指令 7)汇编时的符号伪指令 8)其他伪指令
• 该类伪指令使定义的符号名等同于 常数值或字符串
例 .set .equ .struct .endstruct
• 常用的伪指令
• 定义标题伪指令 .title 句法: .title “字符串” 例: .title “example
• 终止源程序汇编伪指令 .end
• 赋值伪指令 .set 和 .equ 句法: 符号 .set 数值 符号 .equ 数值 例: DAC0 .set 0001h
• 伪指令分为8类。 1)段定义伪指令 2)初始化常数伪指令 3)段程序计数器排列伪指令 4)输出列表格式伪指令 5)引用其他文件伪指令 6)条件汇编伪指令 7)汇编时的符号伪指令 8)其他伪指令
•该类伪指令为文件提供信息或提供这 些文件的信息。
• 伪指令分为8类。 1)段定义伪指令 2)初始化常数伪指令 3)段程序计数器排列伪指令 4)输出列表格式伪指令 5)引用其他文件伪指令 6)条件汇编伪指令 7)汇编时的符号伪指令 8)其他伪指令
DSP课件第六章汇编语言
;符号SYM1等于2
BEGIN: LDP SYM1 ;将2装入DP
.word 016h ;初始化一个字为16h
2021/3/5
2
1、标号域
标号包含1~32个字母、数字、字符(A~Z,a~2,0~9,—及$),可识别符号的大 小写,且规定第一个字符不能是数字。
标号可以后随冒号(:),冒号并不作为标号的一部分被处理。
如果不使用标号,则第一个字必须是空格或分号或星号。
当选用标号时,其值是段程序计数器(SPC)的当前值,标号指向与它们相关联的语句。 例如,如果用.word伪指令初始化几个字,那么标号将指向第一个字。
行号 SPC 目标代码 源语句
10 0040 000A START:.word 0Ah,3,7
0041 0003
2021/3/5
14
6.3 通用目标文件格式
CCS开发环境可以看成是一个大的软件包,里面包含了源代码编 辑器,以及工程文件组织、编译和调试等一切功能模块。该软件包 里,shell程序可以完成3个功能:编译、汇编和链接。shell程序缺省 在C盘安装时,被安装在C:\ti\c2400\cgtool子目录下,对应的文件名 为dspcl.exe。
0042 0007
标号也可以单独出现在行中,此时它指向下一行中的指令。如:
3 0050 HERE:
4 02002510/3/5 0003 .word 3 ;此行SPC无增量
3
2、助记符域
助记符是源语句中的关键部分,不能缺省,它表示本指令的操作 类型。助记符不能从源语句的第一列开始,如果从第一列开始,将被 解释为标号。
8
3、符号
符号被用做标号、常数及替代符号。符号名最多可由32个字母和数 字混合组成(A~Z,a~z,0~9,$和_)。符号的第一个字符不能是数字,符 号内不能有空格。用户定义的符号分大小写,例如汇编时ABC,Abc及 abc被识别为3个不同的符号。
DSP中C及汇编的混合编程的实现
重庆大学研究生专业实验教学实验报告书重庆大学研究生院实验课程名称: DSP 技术专业实验实验指导教师: 曾浩老师 学 院: 通信工程学院 专业及类别: 电子与通信工程 学 号: 20131213087姓 名: 叶俊实验日期: 2014年6月15、16日成 绩:实验一CCS基本使用一、实验目的1.理解DSP的过程。
2.掌握一个DSP软件开发流程。
3.掌握汇编的书写规范,学会汇编指令的运用。
4.掌握编译器和链接器的使用,能够合理了分配存储空间。
5.学习定点数的运算方法。
6.学会CCS的各种调试技巧,如:CPU寄存器、数据和程序存储器的观察、断点的设置,反汇编窗口的使用。
二、实验仪器设备计算机一台、CCS3.3三、实验原理a)软件开发流程。
要正常启动软件并使它能够在DSP上面正常运行,需要用户完成以下的流程:1)在用户的工程里面,必须包含至少两个文件。
2)两个文件编辑完成以后,可调用编译、汇编和链接命令。
3)通过CCS的加载功能,把.OUT文件加载到DSP内部,其地址由链接文件规定。
b)汇编源文件书写。
在CCS中,新建一个文件,在这个文件中,如果使用汇编语言,那就命名时使用ASM的后缀名,如果使用C语言,那命名时就使用C的后缀名。
同时应该把文件加载到相应的工程当中去。
c)启动方式。
我们采用通过CCS从JTAG直接加载的方式。
d)CCS的调试工具。
在本次实验中,CCS的调试工具将要使用到一些基本的操作。
主要包括如何观察CPU的各个寄存器,如何观察数据区和程序区的数据;单步执行的方法和断点执行。
四、实验内容1、在用户的工程里面,编写程序指令的源文件和链接文件,在CCS中将这两个文件编译,转化成COFF格式的文件,生成.OUT的文件。
通过CCS的加载功能,对程序进行调试。
2、用.set定义四个立即数。
3、在.bss段建立几个存储空间。
4、把立即数相加和相乘,结果放在.bss分配的存储空间。
5、合理分配各个段的存储地址,并使用CCS观察。
DSP原理与应用——汇编语言程序开发工具
12
** 仍然在.data 段中
**
13
**********************************
14 0003 0456 prt
.word 0456h
32
DSP原理及应用
第6章 汇编语言程序开发工具
15
**********************************
16
**
汇编代码到.text段
...... Section Header n Section Data Relocation Directives Line Numbers Symbol Table String Table
14 DSP原理及应用
第6章 汇编语言程序开发工具
6.3 COFF的一般概念
6.3.1 COFF文件的基本单元 COFF文件有3种类型:COFF0、COFF1、COFF2。
COFF目标文件都包含以下3种形式的段:
.text 段(文本段) .data 段(数据段) .bss 段(保留空间段)
16 DSP原理及应用
第6章 汇编语言程序开发工具
6.3.1 COFF文件的基本单元
2. 段的基本类型
COFF目标文件中的段有两种基本类型。
(1) 初始化段 初始化段
初始化段中包含有数据或程序代码。主要有:
.data
;初始化数据段
coeff .word 044h,055h,066h
;3组数据放入.data段
.bss buffer,8
;在.bss段保留8个单元
prt .word 0456h
;0456h放入.data段
.text
;初始化文本段
add: LD
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.1.7 中断处理 (1)中断处理方法 查询法
程序通过查询中断标志位来判断是否有中断发生,并 进行相应的处理。 优点:流程易于控制,不会发生中断嵌套的问题,一 般也不会发生丢失中断的问题。 缺点:中断实时性差。
湖南文理学院电信学院 《DSP技术》 叶华
DATA_SECTION和FUNC_EXT_CALLED。 和 。 6.1.2 数据类型 所有整数类型( 所有整数类型(char,short,int以及对应的无符号 以及对应的无符号
类型)都是相同的,都是由 位的二进制数来表示 位的二进制数来表示。 类型)都是相同的,都是由16位的二进制数来表示。
湖南文理学院电信学院 《DSP技术》 叶华
声明 寄存器变量(register)声明对 声明对short,integer,pointer 寄存器变量 声明对
等所有类型的变量都有效。 等所有类型的变量都有效。 预处理指令( 预处理指令(#pragma) ) 预处理器会忽略所有不支持的预处理指令。 预处理器会忽略所有不支持的预处理指令。 支持下列预处理指令:CODE_SECTION, 支持下列预处理指令:
湖南文理学院电信学院 《DSP技术》 叶华
I/O端口变量的使用不仅仅局限于赋值,和其他变 端口变量的使用不仅仅局限于赋值, 端口变量的使用不仅仅局限于赋值 量同样也可以应用于其它的表达式。 量同样也可以应用于其它的表达式。 /******************************************************** ***/ call (port10); /* read port 10h and pass to call */ a = port10 + b; /* read port 10h, add b, assign to a */ port10 += a; /* read port 10h, add a, write to port 10h */ /******************************************************** ***/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 程序中访问的任何一个IO地址都必须在 语言程序 程序中访问的任何一个 地址都必须在C语言程序 地址都必须在 起始处用ioport关键字声明! 关键字声明! 起始处用 关键字声明 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
湖南文理学院电信学院 《DSP技术》 叶华
标识符和常量 所有标识符的前100个字符是有效的,区分大小写。 不允许多字节字符。 多字符的字符常数按序列中的最后一个字符来编码。
例如:’abc’ == ’c’。 ’ 数据类型 整型、双精度型等数据类型长度与常见编译器中数据
类型不同,所有的浮点型都是由MS320C2x/C2xx/C5x的 32位的二进制浮点格式来表示。 size_t(sizeof操作符的结果)定义为unsigned int。 ptrdiff_t(指针加减的结果)定义为int。 湖南文理学院电信学院 《DSP技术》 叶华
重点: 重点: C语言和汇编语言程序混合编程方法原理、特 原理、 原理 点;用C语言处理DSP中断实现方法 实现方法 难点: 难点: TMS320LF240x DSP用C语言处理DSP中断实 实 现工作特点的理解
湖南文理学院电信学院 《DSP技术》 叶华
6.1 DSP C语言程序设计 DSP支持使用ANCI C进行程序设计,并提供了相应的 编译器和C优化编译工具,利用这些优化编译工具可以 产生可与手工编写相比的汇编语言程序。 6.1.1 DSP C语言的特征 DSP C语言以ANSI C为基础,并对ANSI C进行了相应 的限定和扩展。 以下是LF2407 C语言的一些不同于一般标准C的特征:
湖南文理学院电信学院 《DSP技术》 叶华
变量的地址放在指定的寄存器中,访问起来更加容易。 变量的地址放在指定的寄存器中,访问起来更加容易。 16位的字节变量 位的字节变量(char,short,int和pointer)可以用作寄存 位的字节变量 和 可以用作寄存 器变量。 器变量。 在运行时,设置每一个寄存器变量需要四条指令。 在运行时,设置每一个寄存器变量需要四条指令。 为了有效地利用这种方式, 为了有效地利用这种方式,只有在一个变量被多次访 问时,才使用寄存器变量。 问时,才使用寄存器变量。 程序优化编译器也会定义寄存器变量, 程序优化编译器也会定义寄存器变量,但使用方式不 同。编译器会自己决定哪些变量作为寄存器变量,程 编译器会自己决定哪些变量作为寄存器变量, 序中声明的寄存器变量会全部被忽略。 序中声明的寄存器变量会全部被忽略。
湖南文理学院电信学院 《DSP技术》 叶华
长整型(long)和无符号长整型(unsignedlong)都是由32 位的二进制数来表示。 有符号类型都是由基2的补码来表示。 字符型是有符号类型,等同于整型。 枚举(enum)类型的对象用16位数来表示;在表达上
与整型相似。 所有浮点型(float,double和long double)相似,在
湖南文理学院电信学院 《DSP技术》 叶华
I/O空间地址访问 访问用ioport关键字声明的I/O端口变量和访问一般变量没有区别。 /***********************************************************/ ioport unsigned int port10; /* 访问I/O端口10h的变量*/ int func () { ... port10 = a; /* 写a到端口10h */ a 10h ... b = port10; /* 读取端口10h的值到b */ ... } /***********************************************************/
第6章: C语言和汇编语言程序混合编 章 语言和汇编语言程序混合编
程方法及中断处理方法
6.1 C语言和汇编语言程序混合编程方法 语言和汇编语言程序混合编程方法 6.2 用C语言处理 语言处理DSP中断 语言处理 中断 6.3 DSP程序烧写 程序烧写
湖南文理学院电信学院 《DSP技术》 叶华
第6章: C语言和汇编语言程序混合编程方 章 语言和汇编语言程序混合编程方 法及中断处理方法
TMS320C2x/C2xx/C5x中都是用32位浮点格式来表示。 long和float类型以低有效字存储在低端的存储地址。
湖南文理学院电信学院 《DSP技术》 叶华
语言中, 注:在TMS320C2x/C2xx/C5x C语言中,字节长度为 位, 语言中 字节长度为16位 sizeof操作符返回的对象长度是以 位为字节长度的字节数。 操作符返回的对象长度是以16位为字节长度的字节数 操作符返回的对象长度是以 位为字节长度的字节数。 例如sizeof(int) = 1。 例如 。
湖南文理学院电信学院 《DSP技术》 叶华
6.1.4 asm语句 TMS320C2x/C2xx/C5x的C编译器可以在编译器输出的 汇编语言中直接嵌入汇编语言指令。这种能力是C语言 的扩展——asm语句。asm语句能够实现一些C无法实 现的功能。 /********************************************** *********/ asm(" clrc INTM"); /********************************************** ********/
尽管优化器不能删除asm指令,但它可以重新安排asm 指令附近的代码顺序,这样就可能会引起不期望的结 果。
湖南文理学院电信学院 《DSP技术》 叶华
6.1.5 访问I/O空间 I/O空间地址声明
要在程序中访问io空间地址,必须首先用关键 字“ioport”对要访问的地址进行定义。 “ 语法:ioport type porthex_num ioport 声明io空间端口变量的关键字; type 变量类型,可以为char, short, int或unsigned int;
湖南文理学院电信学院 《DSP技术在一个函数中最多只能用两个寄存器变 编译器在一个函数中最多只能用两个寄存器变 量,而且必须在参数表或函数的开始处声明。在 而且必须在参数表或函数的开始处声明。 嵌套块中的寄存器变量定义被认为是一般的变量。 嵌套块中的寄存器变量定义被认为是一般的变量。 编译器用AR6和AR7作寄存器变量: 编译器用 和 作寄存器变量: 作寄存器变量 被指定为第一个寄存器变量。 □ AR6被指定为第一个寄存器变量。 被指定为第一个寄存器变量 被指定为第二个寄存器变量。 □ AR7被指定为第二个寄存器变量。 被指定为第二个寄存器变量
湖南文理学院电信学院 《DSP技术》 叶华
6.1.6 访问数据空间 访问数据空间不需要对要访问的单元预先声明,访问是通过指针的方法 实现的。 /***********************************************************/ unsigned int org,cnt,block,offset,tmp,i; org = *(unsigned int *) 0x8000; cnt = *(unsigned int *) 0x8001; block = *(unsigned int *) 0x8002; offset = *(unsigned int *) 0x8003; for (i=0; i<cnt; i++) { tmp = *(unsigned int *) (org + i); *(unsigned int *) (org + offset +i) = tmp; } /***********************************************************/