编写一个以c语言或汇编为基础的DSP程序(千一)
DSPC语言编程基础

8.3.2 创建main( )函数
在C语言应用软件中,用户必须定义一个main( )函数作为自己应用程序 的开始。因为系统完成C语言环境设置后,boot.obj会自动调用main( )函数 作为程序的开始。因此,程序员在程序中编写main( )函数是一种预定,也 是一种强制。
第12页/共53页
第8页/共53页
8.2.2 指定初始化类型
用C语言编程时,会根据需要定义全局变量和静态变量。有些全局变量 和静态变量具有初始值,有些全局变量和静态变量没有初始值。C编译器对 C程序编译后,为具有初始值的全局变量和静态变量建立了一个专门的数据 块.cinit。该块在程序运行后调入到RAM的.bss中。 .cinit调入到RAM中有 两种方法: (1)在运行时,自动初始化全局变量和静态变量; (2)在加载时,自动初始化全局变量和静态变量。
第22页/共53页
1、C编译器生成的块
C汇编器对C语言程序编译生成7个可以进行重定位的代码和数据 块:.text、.cinit、.const、.switch、.bss、.stack、.sysmem。 (1).text块包含所有可执行代码和浮点常量。 (2).text块包含初始化变量和常量的表。 (3).const块包含字符串变量、明显初始化的全局和静态变量的定义和初 始化。 (4).switch块包含switch语句表。 (5).bss块为全局和静态变量保留空间。 (6).stack块为C系统堆栈。 (7).sysmem块为动态存储器分配保留空间。
为了使用一个库函数,用户必须首先使用#include来包含声明函数的 头文件。
第20页/共53页
8.5 TMS320C24x C语言程序开发
TMS320C24x C语言具有特定的运行环境,为了确保C语言程序正 确运行,C语言程序开发必须维护这个环境。
DSP汇编语言编程基础

实验二 DSP汇编语言编程基础一、 实验目的1、了解DSP的寻址方式;2、了解DSP的汇编语言与C语言混合编程。
二、 实验器材1、安装有CCS的PC机一台;三、 实验内容1、建立一个工程;2、用汇编语言编程实现一个可被C程序调用的例程。
四、 实验步骤1、汇编语言和C语言混合编程:(1) 运行CCS,建立一个工程,取名exp2a,并保存到c:\ti\myprojects\xxx\Experiment2\目录下。
(2) 编辑如下C文件,取名exp2a.c并保存到c:\ti\myprojects\xxx\Experiment2\exp2a\目录。
/* Assembly routine */extern int sum(int *);/* define x[] as global array */int x[2]={0x1234,0x4321};/* define result s as global variable */int s;void main(){s = sum (x); /* return sum product */}(3) 编辑如下汇编文件,取名exp2_sum.asm并保存到c:\ti\myprojects\xxx\Experiment2\exp2a\目录。
* * * * * * * * * * * * * * * * * * * * * * * * * * * * ** exp2_sum.asm SUM subroutine* called by exp2a.c* Input: Array pointer* Output: Return sum result in T0* * * * * * * * * * * * * * * * * * * * * * * * * * * * *.global _sum_summov *AR0+,AC0 ; AC0 = x[1]add *AR0+,AC0 ; AC0 = x[1]+x[2]mov AC0,T0ret ; Return T0.end(4) 编辑如下链接命令文件,取名link.cmd并保存到c:\ti\myprojects\xxx\Experiment2\exp2a\目录。
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 是一个可被修改的无符号整型指针变量。
11313121颜伟DSP大作业

序言DSP是Digital Signal Processing的缩写,表示数字信号处理器。
是以数字信号来处理大量信息的器件。
其工作原理是接收模拟信号,转换为0或1的数字信号。
再对数字信号进行修改、删除、强化,并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。
信息化的基础是数字化,数字化的核心技术之一是数字信号处理,数字信号处理的任务在很大程度上需要由DSP器件来完成,DSP技术已成为人们日益关注的并得到迅速发展的前沿技术。
数字信号处理是围绕着数字信号处理的理论、实现和应用等几个方面发展起来的。
数字信号处理在理论上的发展推动了数字信号处理应用的发展。
反过来,数字信号处理的应用又促进了数字信号处理理论的提高。
而数字信号处理的实现则是理论和应用之间的桥梁。
DSP(digital signal processor)是一种独特的微处理器,是以数字信号来处理大量信息的器件。
它的强大数据处理能力和高运行速度,是最值得称道的两大特色。
DSP微处理器(芯片)一般具有如下主要特点:(1)在一个指令周期内可完成一次乘法和一次加法;(2)程序和数据空间分开,可以同时访问指令和数据;(3)片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问;(4)具有低开销或无开销循环及跳转的硬件支持;(5)快速的中断处理和硬件I/O支持;(6)具有在单周期内操作的多个硬件地址产生器;(7)可以并行执行多个操作;(8)支持流水线操作,使取指、译码和执行等操作可以重叠执行。
当然,与通用微处理器相比,DSP微处理器(芯片)的其他通用功能相对较弱些。
主要有以下六个优点:(1)对元件值的容限不敏感,受温度、环境等外部参与影响小;(2)容易实现集成;(3)可以分时复用,共享处理器;(4)方便调整处理器的系数实现自适应滤波;(5)可实现模拟处理不能实现的功能:线性相位、多抽样率处理、级联、易于存储等;(6)可用于频率非常低的信号。
但是也存在一些缺点:(1)需要模数转换;(2)受采样频率的限制,处理频率范围有限;(3)数字系统由耗电的有源器件构成,没有无源设备可靠。
DSP的C语言编程

72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37
DG ND B C L KX 1 DG ND HD 1 C V DD IN T3 IN T2 IN T1 IN T0 NM I HB IL IA C K B D X2 B D X0 HD 0 DG ND 3 .3 V HR DY B F SX2 B F SX0 C V DD HP INT DG ND B C LKX 2 B C LKX 0 BD R2 HC T1 BD R0 B F SR 2 B F SR 0 B C LKR 2 B C LKR 0 DG ND HC T0 B C L KR 1 DG ND
DSP的C语言程序入门
• 1、以最小系统板的LED灯闪烁程 序为例: 分别利用汇编语言、C语言、C语 言和汇编语言混合编程三种方法 实现DSP最小系统板LED灯D1闪烁。
C L KOU T TO UT
1 2
J1 C O N2 R2 4 .7 K DG ND
C LK OU T X1 H D3
D2 R ES ET D1 C LD 0IN K
H D7 A 11
A 10
A 12
A 13
A 14
A 15
NC
NC 36
1
2
3
4
5
6
7
8
9 10
11
12 13
14 15
16
17
18
19
20
21
22 23
24 25
26
27
28
29
编写一个以C 语言为基础的DSP程序

实验1.2 : 编写一个以C 语言为基础的DSP程序一.实验目的1.学习用标准C语言编制程序;了解常用的C语言程序设计方法和组成部分。
2.学习编制连接命令文件,并用来控制代码的连接。
3.学会建立和改变map文件,以及利用它观察DSP内存使用情况的方法。
4.熟悉使用软件仿真方式调试程序。
二.实验设备PC兼容机一台,操作系统为Windows2000(或Windows98,WindowsXP,以下默认为Windows2000),安装Code Composer Studio 2.0软件。
三.实验原理1.标准C语言程序CCS支持使用标准C语言开发DSP应用程序。
当使用标准C语言编制的程序时,其源程序文件名的后缀应为.c(如:volume.c)。
CCS在编译标准C语言程序时,首先将其编译成相应汇编语言程序,再进一步编译成目标DSP的可执行代码。
最后生成的是coff格式的可下载到DSP中运行的文件,其文件名后缀为.out。
由于使用C语言编制程序,其中调用的标准C的库函数由专门的库提供,在编译连接时编译系统还负责构建C运行环境。
所以用户工程中需要注明使用C的支持库。
2.命令文件的作用命令文件(文件名后缀为cmd)为链接程序提供程序和数据在具体DSP硬件中的位置分配信息。
通过编制命令文件,我们可以将某些特定的数据或程序按照我们的意图放置在DSP 所管理的内存中。
命令文件也为链接程序提供了DSP外扩存储器的描述。
在程序中使用CMD文件描述硬件存储区,可以只说明使用部分,但只要是说明的,必须和硬件匹配,也就是只要说明的存储区必须是存在的和可用的。
3.内存映射(map)文件的作用一般地,我们设计、开发的DSP程序在调试好后,要固化到系统的ROM中。
为了更精确地使用ROM空间,我们就需要知道程序的大小和位置,通过建立目标程序的map文件可以了解DSP代码的确切信息。
当需要更改程序和数据的大小和位置时,就要适当修改cmd文件和源程序,再重新生成map文件来观察结果。
DSP实验编写一个以C 语言为基础的DSP 程序

编写一个以C 语言为基础的DSP 程序
实验结果:
通过实验可以发现,修改cmd文件可以安排程序和数据在DSP内存资源中的分配和位置;map文件中描述了程序和数据所占用的实际尺寸和地址。
C语言编制的程序,在经过编译器编译后,需要连接若干C 标准程序辅助运行。
以下是运行流程:
1.程序入口为_c_int00,执行标准C库中的程序,负责初始化C环境、申请堆栈、初始化有初始值的变量
2.程序最终转到用户编制的主函数运行。
3.程序在主函数中的无限循环中持续运行。
编写一个汇编和C 混合的DSP 程序。
DSP应用程序中C代码和汇编代码的结合

DSP应用程序中C代码和汇编代码的结合◆ CEVA公司高级编译器项目经理Eran Balaish随着DSP处理器的功能日益强大,加上编译器的优化技术不断提高,以往只利用汇编语言编写DSP应用程序的普遍做法已逐渐被淘汰。
今天,几乎所有的DSP应用程序都是由C代码和汇编代码共同构成。
对于性能是核心的关键性功能,DSP工程师继续使用高度优化的汇编代码,而其它功能则采用C语言编写,以便于维护和移植。
C代码和汇编代码的结合需要DSP工程师在工具箱中备有专用工具和方法。
众所周知,汇编代码编程的性能更好,而C代码编程的优势在于编写更为方便、快捷。
为了解释清楚原因,让我们仔细对比一下汇编代码和C代码编程的优缺点。
汇编代码编程的优势● 汇编代码能够利用处理器独有的指令和各种专用硬件资源。
另一方面,C代码则是通用性的,必须支持不同的硬件平台,因此,对C代码来说,支持专用平台代码十分困难。
● 汇编代码的编程人员通常对应用非常熟悉,并可能做出编译器难以企及的设想。
● 汇编代码编程人员可以发挥人们的创造力;而编译器再先进也只是一个自动程序而已。
汇编代码编程的缺点:● 汇编代码编程人员不得不处理耗时的机器级问题,比如寄存器分配和指令调度。
而对C代码,这些问题都可交给编译器去做。
● 汇编代码编程需要拥有关于DSP架构及其指令集的专业知识,而C编码只需要掌握广为流行的C语言即可。
● 采用汇编代码,平台之间的应用移植极其困难和耗时。
而C应用程序的移植要简单得多。
图1显示了如何利用专用硬件机制来高度优化汇编代码。
左边的C代码实现方案利用模数运算创建了循环缓冲器。
右边的是高度优化的汇编代码,利用CEVA-TeakLite-III DSP核的模数机制来创建相同的缓冲器。
只要缓冲器指针(这里是r0)更新,该模数机制就自动执行模数算法。
这种运算和指针更新发生在同一个周期内,故汇编代码比C代码有效得多,其可为模数运算产生单独的指令。
在DSP应用中选择适当的C和汇编代码混合问题在于C 代码和汇编代码之间的界限究竟在哪里,答案由分析器提供的性能分析给出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广州大学学生实验报告
开课学院及实验室:物理与电子工程学院 2015年3月22日
班级光信121 姓名学号指导老师
实验课程名称数字信号处理实验Ⅰ成绩
实验项目名称编写一个以c语言或汇编为基础的DSP程序
一、实验目的
二、使用仪器、材料
三、实验原理
四、实验步骤
五、实验过程原始记录(数据、图案、计算等)
六、实验结果及分析
一. 实验目的
1.学习用汇编语言编制程序;了解汇编语言程序与C 语言程序的区别和在设置上的不同。
2.了解TMS320C55x 汇编语言程序结果和一些简单的汇编语句用法。
3.学习在CCS 环境中调试汇编代码
二. 实验设备
PC 兼容机一台,操作系统为Windows2000(或Windows98,WindowsXP,以下默认为Windows2000),安装Code Composer Studio 2.2 软件。
三. 实验原理
1.汇编语言程序:
汇编语言程序除了程序中必须使用汇编语句之外,其编译选项的设置与C 语言编制的程序也稍有不同。
其区别为:
⑴汇编语言程序在执行时直接从用户指定入口开始,常见的入口标号为“start”,而C 语
言程序在执行时,先要调用 C 标准库中的初始化程序(入口标号为“_c_init00”),完成设置之后,才转入用户的主程序main()运行。
⑵由于CCS 的代码链接器默认支持C 语言,在编制汇编语言程序时,需要设置链接参数,
选择非自动初始化,注明汇编程序的入口地址。
2.程序设计要求:
程序框图:
四.实验步骤
1.实验准备:
设置软件仿真模式,参看:第三部分、四、1。
2.建立新的工程文件:(1)启动Code Composer Studio 2.21。
⑵进行以下设置:建立TASM.pjt。
3.设置工程文件:
4.编辑输入源程序:
⑴汇编语言程序:
-先新建源程序窗口:
输入源程序:
.mmregs sect “.text”
.model call=c55_std .align 4
.model mem=large .global start
.global x .sym start,start, 36, 2, 0
.bss x,1,0,0 start:
.sym x,x, 4, 2, 16 MOV #2, *(#y)
.global y MOV #1, *(#x)
.bss y,1,0,0 L1:
.sym y,y, 4, 2, 16 MOV *(#y), AR1
.global z ADD *(#x), AR1, AR1
.sym z,z, 4, 2, 16 MOV AR1, *(#z)
B L1
C语言
main()
{
int x,y,z;
x=1; y=2;
while ( 1 )
{
z=x+y;
} }
注意:在输入汇编语言源程序时,除了标号以外的程序行必须以一个空格或退格字符开始。
-保存源程序为TASM.asm。
⑵连接命令文件:如同第⑴步操作,建立空的源程序窗口。
-输入连接命令文件内容:
MEMORY
{
DARAM: o=0x100, l=0x7f00
DARAM2: o=0x8000, l=0x8000
}
SECTIONS
{
.text: {} > DARAM
.bss: {} > DARAM
.stack :{} > DARAM
}
注意:第3、4 行中等号前边字母是小写的“L”。
-将文件存为C:\ICETEK-VC5509-EDULab\Lab0103-ASM\TASM.cmd
⑶将上述编译的源程序加入工程TASM.pjt,具体操作可请参考实验一、四、4、⑵。
5.编译源文件、下载可执行程序:
⑴选择菜单Project->Rebuild All。
⑵执行File?Load Program,在随后打开的对话框中选择刚刚建立的C:\ICETEK-
VC5509-EDULab\Lab0103-TASM\debug\TASM.out 文件。
完成后,系统自动打开TASM.asm 源程序窗口,并在其中指示程序的入口地址为标号“start”后的语句。
6.打开观察窗口:
⑴选择菜单View->Disassembly。
注意程序运行指针停留的位置。
⑵开启CPU 寄存器观察窗口:单击菜单View->Registers->CPU Registers。
请看PC 指针取值与当前程序运行地址对应。
⑶将变量x、y、z 分别加入观察窗口:
在源程序中双击变量名,再单击鼠标右键,选择“Add to Watch Window”。
这时,这 3 个变量还未作初始化。
⑷开启内存观察窗口:
选择“View”菜单中“Memory…”项,在“Memroy Window Options”窗口中的“Adress”项中输入&x,单击“OK”完成设置;“Memory”窗口中x 的当前取值显示在第 1 个地址的后。
而且y 和z 的存储单元跟在其后。
7.观察程序运行结果:
⑴单步运行2 次,在观察窗中观察到变量x、y 被赋值。
变化的值被显示成红色。
同时在“Memory”窗口中也能观察到x 和y 值的改变。
⑵单步运行,观察CPU 寄存器窗口中“XAR1”寄存器存储值的变化。
程序利用XAR1 进行运算。
⑶再单步运行,可观察到z 的值被计算出来。
双击“Memory”窗口中变量x、y 相应的存储单元,将其修改成其他取值,单步运行后观察结果。
8.对照观察map 文件和cmd 文件的内容:
⑴选择菜单File->Open…,将找到C:\ICETEK-VC5509-EDULab\Lab0103-ASM\Debug 目录,将文件类型改为“Memory Map Files”,选择TASM.map 文件、打开。
⑵打开TASM.cmd 文件。
⑶程序的入口地址:map 文件中“ENTRY POINT SYMBOL”中说明了程序入口地址(start)。
⑷内存使用情况:
-map 文件中“MEMORY CONFIGURA TION”标明了程序占用DARAM 的使用情况,共占用25H 个存储单元。
比较一下,这比用C 编制的程序占用的要小得多。
-观察map 文件中的“SECTION ALLOCATION MAP”段,可以看出TASM.obj 的入口地址为100H,这也是程序的入口地址。
-用户定义的变量从120H 开始,共占用了3 个单元(Word)。
9.退出CCS
五、实验数据记录
六、数据结果及分析
图1 图2
数据分析
图1中,可以从“MEMORY CONFIGURATION”中可以看到used为000025H,程序占用了DARAM的25H个存储单位。
这比起C语言占用的单位少很多。
从“SECTION ALLOCATION”中,看到TASM.obj地址为0000100H,。
而我们定义的变量的地址从120H,总共占用了3个单位。
图2是修改程序后,对0f000h+0e000h的相加运算,结果是0x1D00.
总结
经过这次的实验课程,我学会了和更熟悉了以C语言或为汇编为基础的DSP程序的运用,只要多加练习便可容易操作,但还是要注意一步一步的来,不可图快。