一个简单的dspC语言例子
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一个简单的dsp C语言例子
开发平台: CCS集成开发环境
通过这个简单的例子, 可以大致了解用C语言开发dsp程序的原理。
程序要求: 用C语言编写产生正弦调幅波信号的源程序;
正弦调幅波的公式在离散域中的表示:
y(n) = (1 + M*sin(2 * PI * fb / fs * n)) * sin(2 * PI * fa / fs * n);
编写文件
1.sin_am.c
#include<stdio.h>
#include<math.h>
#define TRUE 1
#define pi 3.1415926536
int y[500],i;
float M;
void main()
{
puts("amplitude modulation sinewave example started.\n");
M = 50;
for(i = 0; i < 500; i++)
y[i]= 0;
while(TRUE)
{
for(i = 0; i < 500; i++)
y[i]=(int)((1 + M / 100 * sin(i * 2 * pi * 20 / 4000))* sin(i * 2 * pi * 200 / 4000)* 16384);
puts("program end");
}
}
2.sin_am_v.asm (reset vector file)
.title "sin_am_v.asm"
.sect ".vectors"
.ref _c_int00
RESET:
B _c_int00
.end
..3.sin_am.cmd
sin_am.obj
sin_am_v.obj
-m sin_am.map
-o sin_am.out
MEMORY
{
PAGE 0:
EPROG: origin = 0x1400, len = 0x7c00 VECT: origin = 0xff80, len = 0x80
PAGE 1:
USERREGS: origin = 0x60, len = 0x1c IDATA: origin = 0x80, len = 0x3000 }
SECTIONS
{
.vectors:>VECT PAGE 0
.text:>EPROG PAGE 0
.cinit:>EPROG PAGE 0
.bss:>IDATA PAGE 1
.const:>IDATA PAGE 1
.switch:>IDATA PAGE 1
.system:>IDATA PAGE 1
.stack:>IDATA PAGE 1
}
"*.cmd"文件说明:
链接命令文件是实现对段的存储空间位置的定位, C语言程序中常用已初始化和未初始化段如下:
已初始化段包括:
.init 存放C程序中的变量的初值和常量, 放在ROM和RAM 中均可, 一般属于PAGE 0
.const 存放C程序中的字符常量、浮点常量和用const声明的常量, 放在ROM和RAM中均可, 一般属于PAGE 1
.text 存放C程序代码, 放在ROM和RAM中均可, 一般属于PAGE 0
.switch 存放C程序中的语句的跳针表, 放在ROM和RAM中均可, 一般属于PAGE 0
未初始化段包括:
.bss 为C程序中的全局和静态变量保留存储空间, 一般存放于RAM中, 属于PAGE 1
.stack 为C程序系统堆栈保留存储空间, 用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果, 一般存放于RAM中, 属于PAGE 1
.sysmem 用于C程序中malloc、calloc和realloc函数动态分配存储空间, 一般存放于RAM中, 属于PAGE 1
4.vary_M.gel
menuitem "Myfunctions"
slider vary_M(0, 100, 10, 1, Amount_of_modulation)
{
M = Amount_of_modulation;
}
该文件用于调试的时候可随意改变变量M的值, 该文件通过file->load GEL File添加到工程中, 调试的时候可选择GEL->My Functions->vary_M来打开vary_M滑动条组件。
5.rts.lib
此为C语言的标准支持库,添加路径\ti\c5400\cgtools\lib\rts.lib。