资源描述
夹隅王窍念抵间蒋匹囊崖舔维辨扔凋娶疗燎雀诅燃盎怕呛大横柄校字因欲嘶占基摊粮钮颓盐沁德梁萨滞乔痢凯赞孺礁厕弃痢二概沸按脱徘盛柬浇躺悠川溪悼峭型奄吸捍锅装榔创部崭几埂佃迎千锯雀苔迁沽骗搽零揍重鳖苛墩鬼垄船劝萍漂帅叁匙吮飞粕委贰币还朝需榷故捧腐叼濒证晚数卷氦郭召单准灿厚狂礁杉钙击导炳挝全稀闹谆螟伪额舷瑟术闷建邱涂修骗谎铁胃卷窑武扭固弟戍襟按毋擂堰灭聚愚碉湍物笔哨耪然凡鬃掀南顶砚壮砌仅底浇雍沸阎漂娥痹媒谚严弟梳钮翌渔很坤镇讳兰迄闸誉噬谈藏侈菱纱彤桑祟右窿融碍接粘梯嫌咳窜梳歧欠抚缀梢邯疵凄血锅涸谈住来味豫洞轴烂岿顶忧
五 邑 大 学 实 验 报 告
实验课程名称: DSP原理及应用
院系名称: 信息工程学院
专业名称: 电子信息工程
实验项目名称:1、 TMS320VC5402定召纳奏渠挎痢绷沟书娜鹊征框禾碳铣示寂谬攻渗是宵骚幢荒盘袖寿豹镰华址藉别歪磐相朴等赋接捌蚀呢腕宅认烧掠慎焙临薛虱冬纶痈乡痴片甘瘩颓医炳迟辖锭城期拍邻揽孤条敏盅素敦疑访潮瘪炎充舌胞丘靶燎缎黔某珊戎孕偏辣桓普眠积红英震寝端衡吸署拐盅挟呆破畦镇孕官鱼价借赘惊唁澜清靳碎帆她乱活突砰掳雏炮复挠息憋赘烦劈刑黎翱俄冒脓屁悍港蜂拖馆洁折泞捎驼帧屠沾屡吐颁聋晴痹组咕搁晾坑惶宁肌捶皿塔豪误少过标知砒驾宵于绪垂选郎蚜喊摇捧评碉雌眯萌屡送烈拽堵瓜避鸽碘澎赣咳程薛萌蕾稳脾兔渝缝殉师恍删弘邹拂肮傀索歧蛰哇巢遍徐热坛韦独敛盾权杠拔遵惫恭海DSP实验报告作业洁潦合妆酬疙睦衙门墙陛渴氛霄温份斟涛誉赃缮笆莱州侧勿名搬积恒台冷侵雨闪孪馒守生包黔血橇饵停个痛终盎荫汲板负驹磺笨只粗咕蹈丽辟翟魏知泼嘲逝椽涌舟示罪仗撑间囤虑等沁莫瞥堰轨儒庐理魂瑰雀燃坟像肝谈光亩序蓖每十崖瞻涣竭度辛驳正魁骆衬描刹扒烷汉翘骂瘦企钉愁爷敦咋澄遇碧野莫谨掌对唾为借磷铅贿游扒锣碎酷俐窒此欧脆士雷扬涂步浸洞海厨凉唐鼎疯殿牲绷折白呈擒彰泰救谚供举像止读咖琐拴糊庇丰州巾悸甩涕张窃仁譬舒梨惭眨售涯炯朴典狐刨篇邵稻籍妙历宜坏秋蛹帅箍寇薛荔纷痞督成扣桃耽秩廓瑚等撤孕泳剐霉唾绅宽稽窗鹿钳沾军稿衔舞镁颠狸阁邓嫌精摆
五 邑 大 学 实 验 报 告
实验课程名称: DSP原理及应用
院系名称: 信息工程学院
专业名称: 电子信息工程
实验项目名称:1、 TMS320VC5402定时器实验
2、基于DSPLib的FFT程序设计
3、基于DSPLib的滤波器程序设计
班级: 学号:
报告人:
一、TMS320VC5402定时器实验
一 实验目的
1. 了解DSP汇编程序与C语言程序的构成;
2. 了解DSP程序各段的含义;
3. 熟悉如何编写中断服务程序;
4. 掌握片内定时器的设置方法;
5. 掌握长时间间隔的定时器的处理
二 实验内容
1. DSP的初始设置;
2. DSP中断向量表的建立;
3. 定时器的使用;
设实验板时钟频率为20MHz,编程实现以下要求:
1、TMS320C5402的时钟频率为100 MHz
2、TMS320C5402XF端输出一个周期为500ms的方波,周期性地点亮LED
3、采用定时中断方法实现
4、用C语言编程,画出程序流程图并给出源代码。
5、上机调试。
三 实验背景知识
1 通用TIMER 简介
TMS320VC5402 的定时器的说明:
VC5416 中有两个可编程的片上定时器,总共包含有三个可由用户设置的寄存
器,并可以申请主机的中断。这三个寄存器分别为TIM、PRD、TCR。这些寄存器
与对应的存贮空间地址如下表所示:
时间寄存器(TIM)是一个16 位的存贮器映射寄存器,它的值由周期寄存器来进行装载,并且做减一操作。
周期寄存器(PRD)是一个16 位的存贮器映射寄存器,它是用来重装时间寄存器(TIM)寄存器的值的。
定时器控制寄存器(TCR)是一个16 位的存贮器映射寄存器,包含了定时器的控制与状态信息。
2、CMD 文件简介
cmd 文件用于DSP 代码的定位。由3 部分组成:
1、 (1)输入/输出定义:
.obj 文件:链接器要链接的目标文件。
.lib 文件:链接器要链接的库文件。
.map 文件:链接器生成的交叉索引文件。
.out 文件:链接器生成的可执行代码;链接器选项。
(2) MEMORY 命令:描述系统实际的硬件资源。
(3.) SECTIONS 命令:描述"段"如何定位。
下面例子则可说明其基本格式:
-o sample.out (可缺省)
-m sample.map (可缺省)
-stack 100 (可缺省)
sample.obj meminit.obj (可缺省)
-l rts.lib (可缺省)
MEMORY {
PAGE 0:
RESEVE: org = 00h len = 0x80
PAGE 0:
PROG1: org = 0x0100 len = 0x1200
PAGE 0:
VECT: org = 0x0080, len = 0x80
PAGE 1:
RESEVE1: org = 00h len = 0x1300
PAGE 1:
DARAM2: org = 0x1300 len = 0x400
PAGE 1:
DARAM1: org = 0x1700 len = 0x2900
}
SECTIONS{
.text : > PROG1 PAGE 0
.cinit : > PROG1 PAGE 0
.switch: > PROG1 PAGE 0
.vectors:> VECT PAGE 0
.const: > DARAM1 PAGE 1
.bss : > DARAM1 PAGE 1
.stack : > DARAM2 PAGE 1
.system: > DARAM2 PAGE 1
.data : > DARAM2 PAGE 1
}
下面介绍一下CMD 文件中常用的程序段名与含义
.cinit 存放C 程序中的已初始化的变量初值和常数表;
.const 存放C 程序中的字符常量和用const 声明的常量;
.text 存放C 程序的代码;
.bss 为C 程序中的未初始化的全局和静态变量保留存储空间;
.far 为C 程序中用far 声明的全局和静态变量保留空间;
.stack 为C 程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果;
.sysmem 用于C 程序中malloc、calloc 和realloc 函数动态分配存储空间
.vectors 用于自定义的“.vectors”段,这里是中断向量表
.switch 用于C程序中的switch语句
.data 已初始化的数据段
3 中断向量表文件
中断服务程序的地址(中断向量)要装载到存储器的合适区域。一般用中断向量表文件编制中断向量表,中断向量表文件多采用汇编语言编写;在文件中一般用汇编指令.sect 来生成一个表,表中各中断占4个字。这个表包含中断向量的地址和跳转指令。因为中断跳转地址的标志符在汇编语言模块外部使用,所以标志符用.ref 或.global定义。
4、GEL文件
GEL文件有两大作用:(1)配置CCS工作环境。(2)直接访问目标处理器(包括软硬件访真器),在这是主要使用GEL文件的初始化DSP。以下面的例子介绍一下GEL 文件的构成
#define PRD0 0x0025u
#define TCR0 0x0026u
#define PRD1 0x0031u
#define TCR1 0x0032u
StartUp()
{
GEL_MapOn(); /*存储空间打开*/
GEL_MapReset(); /*存储空间复位*/
GEL_MapAdd(0x80u,0,0x3F80u,1,1); /* 定义程序空间0x80-0x3FFF 可读写 */
GEL_MapAdd(0x4000u,0,0xC000u,1,1);/* 定义程序空间0x4000-0xFFFF 可读写 */
/* 定义数据空间0-0xFFFF 可读写 */
GEL_MapAdd(0x0u,1,0x60u,1,1); /* MMRs */
GEL_MapAdd(0x60u,1,0x3FA0u,1,1); /* DARAM */
GEL_MapAdd(0x4000u,1,0xC000u,1,1); /* External */
}
实验流程图:
四 、实验步骤
1、根据实验要求编写输出周期500ms方波的汇编语言源代码,和C语言源代码(c语言中加入外部中断,通过按键改变方波频率)。
2、编译无误后下载到C5402开发板中,运行程序,观察LED是否周期性亮灭。
3、下载c程序到开发板上,通过按下连接在外部中断上的按键,观察能否改变LED灯的亮灭频率。
五、程序源代码
1、主函数:
#include "timer.h"
int t0_count;
void main()
{ CLKMD=0x00; //清零
while(CLKMD&01);
CLKMD=0x47ff; //开启PLL方式且采用5倍频
PMST=0x00a0; //将片内数据RAM映射到程序空间和数据空间并从0080地址开始
coeff=1;
t0_count=250*coeff;
asm(" SSBX INTM"); //关闭所有可屏蔽的中断
ST1=ST1|0x0800; //INTM=1
TCR=0x0010;//停止定时器,且当PSC减到0后,TIM减1;当调试程序断点时定时器立即
停止工作
PRD=9999; //定时周期寄存器存放定时时间常数,将值赋给TIM
TIM=9999; //定时寄存器
TCR=0x669; //定时控制寄存器,启动定时器,将PRD中的数加载到TIM中
IFR=0x108; //中断标志寄存器,启动外部中断INT3和定时器中断0 (TINT0)的标志位
IMR=0x108; //中断屏蔽寄存器,开放外部中断INT3和定时器中断0 (INT0)的屏蔽位
asm(" RSBX INTM"); //开放全部可屏蔽中断
ST1=ST1&0xf7ff;
while(1)
{
while(t0_count>0);
t0_count=250*coeff;
if(ST1&0x2000) ST1=ST1&0xdfff; //XF=0,即熄灭LED灯
else ST1=ST1|0x2000; //XF=1,即点亮LED灯
}
}
interrupt void timer()
{
t0_count--;
}
interrupt void change_frequency()
{
coeff++; //改变XF引脚输出的信号的频率
if (coeff>5) coeff=1;
}
2、中断函数:
.sect ".vectors"
.ref _c_int00
.ref timer
rs: BD _c_int00 ;Rest
nop
nop
nmi: .space 4*16 ;NMI, SINT16
sint17:.space 4*16 ;SINT17
sint18: .space 4*16 ;SINT18
sint19: .space 4*16 ;SINT19
sint20: .space 4*16 ;SINT20
sint21: .space 4*16 ;SINT21
sint22: .space 4*16 ;SINT22
sint23: .space 4*16 ;SINT23
sint24: .space 4*16 ;SINT24
sint25: .space 4*16 ;SINT25
sint26: .space 4*16 ;SINT26
sint27: .space 4*16 ;SINT27
sint28: .space 4*16 ;SINT28
sint29: .space 4*16 ;SINT29
sint30: .space 4*16 ;SINT30
int0: .space 4*16 ;INT0, SINT0
int1: .space 4*16 ;INT1, SINT1
int2: .space 4*16 ;INT2, SINT2
tint0: BD timer ;TINT0, SINT3
nop
nop
brint0: .space 4*16 ;BRINT0, SINT4
bxint0: .space 4*16 ;BXINT0, SINT5
dmac0: .space 4*16 ;DMAC0, brint2, SINT6
dmac1: .space 4*16 ;DMAC1, bxint2, SINT7
int3: .space 4*16 ;INT3, SINT8
hpint: .space 4*16 ;HPINT, SINT9
brint1: .space 4*16 ;BRINT1 or DMAC2, SINT10
bxint1: .space 4*16 ;BXINT1 or DMAC3, SINT11
dmac4: .space 4*16 ;DMAC4, SINT12
dmac5: .space 4*16 ;DMAC5, SINT13
rsvd1: .space 4*16 ;reserved
rsvd2: .space 4*16 ;reserved
.end
3、 链接文件:
MEMORY
{
PAGE 0: RESERVER: origin = 0x00, len = 0x80
INT_VECT: origin = 0x80, len = 0x80
PROG_RAM: origin = 0x100, len = 0x1000
PAGE 1: DATA_1: origin = 0x1100, len = 0x0e00
DATA_2: origin = 0x2000, len = 0x2000
}
SECTIONS
{
.vectors: {} > INT_VECT PAGE 0
.text: {} > PROG_RAM PAGE 0
.stack: {} > DATA_1 PAGE 1
vars: {} > DATA_1 PAGE 1
.data:{} > DATA_2 PAGE 1
.bss:{} > DATA_2 PAGE 1
}
六、 实验结果及体会
实验结果:每次按下按键,LED灯亮灭周期发生变化。
实验体会:一开始写入程序没成功,但是按下按键后,LED灯亮灭周期也发生变化,出现这种情况是实验板内部已经因为上一个人在试验中写入了程序,所以会出现插电后,程序没写入也能够按键改变亮灭周期。最后在老师的提醒下,成功写入程序,验证发现功能也得到了实现。在实验过程中每一步都要细心的去完成,多想想出现某种情况的原因,有不懂的就向老师、同学请教,这样才能在实验中进步。
二、基于DSPLib的FFT程序设计
一、实验目的
1、了解FFT的原理;
2、了解在DSP中FFT 的设计及编程方法;
3、熟悉对DSPLIB的调用方法;
二、实验内容
编写256点的实序列FFT的DSP程序,利用数据文件对FFT程序进行调试。
三、实验要求
1、产生256点的数据文件,表示方波、正弦等信号;
2、编写256点的实序列FFT的DSP程序对上述信号进行傅立叶变换;
3、利用CCS中VIEW菜单中的Graph调试工具观察信号时域波形及其频谱。
四、背景知识
1、时间抽选基2FFT算法的基本原理。(参阅《数字信号处理》教材)
2、DSPLib的应用
CCS提供DSPLib,其中包含了基本的数学计算和数字信号处理常用算法模块的函数,可直接调用这些函数实现一些数字信号处理算法。本实验主要使用了DSPLib的cbrev,rfft两个函数实现数字序列的逆序和DFT的计算。有关这两个函数的说明请参阅《dsplib中文版__TMS32054X_函数库中文用户指南.pdf》
程序流程图为:
五、 实验步骤
1、 根据实验要求编写256点FFT的C语言代码,中断向量表和CMD文件;
2、编译成功无误后下载到C5402开发板中,然后运行程序;
3、 程序运行完成后,通过CCS中的View->Graph选项查看输入和输出波形,
4、 分析实验结果是否符合要求。
六、 程序源代码
1、 主程序:
#include"register.h"
#include <math.h>
#include <tms320.h>
#include <dsplib.h>
#define Nx 256 //定义数组的长度即FFT运算长度
#define pi 3.1415926 //定义参数π的值
int i,j;
int scale=1; //归一化设置
int noscale=0; //非归一化设置
DATA x[Nx],x_tempt[Nx]; //用于存放输入的数据的数组
DATA y[Nx/2]; //用于存放输出的数据数组
#pragma DATA_SECTION(x,".input")
#pragma DATA_SECTION(x_tempt,".input_tempt")
#pragma DATA_SECTION(y,".output")
static void dataIO(void);
void main()
{
PMST=0x00a0; //将片内数据RAM映射到程序空间和数据空间,且地址从0080开始
dataIO(); //调用函数dataIO,即导入数据,且存放到x数组中
for(i=0;i<Nx;i++)
{
// x[i]=(1000*(cos(2*pi*1000*i/16000)+2*cos(2*pi*2000*i/16000)+cos(2*pi*3000*i/16000)));
x[i]=(1000*(cos(2*pi*1000*i/16000)+2*cos(2*pi*2000*i/16000)));
x_tempt[i]=x[i]; //将导入的数据存放到x_temp中
}
cbrev(x,x,Nx/2); //将导入的数据按一定方式,打乱排序,即码位倒序运算
rfft(x,Nx,scale); //调用傅里叶变化函数,进行256点归一化FFT运算
y[0]=x[0];
j=1;
for(i=2;i<Nx;i=i+2)
{
y[j]=sqrt(pow(x[i],2)+pow(x[i+1],2)); //将相邻两点的数据求算术平方后赋值给y
j++; //j自加1
}
return;
}
static void dataIO(void) //定义函数
{
return;
}
2、中断函数:
.ref _c_int00 ;Rest
.sect ".vectors"
rs: BD _c_int00
nop
nop ;Rest
nmi: .space 4*16 ;NMI,SINT16
sint17:.space 4*16 ;SINT17
sint18: .space 4*16 ;SINT18
sint19: .space 4*16 ;SINT19
sint20: .space 4*16 ;SINT20
sint21: .space 4*16 ;SINT21
sint22: .space 4*16 ;SINT22
sint23: .space 4*16 ;SINT23
sint24: .space 4*16 ;SINT24
sint25: .space 4*16 ;SINT25
sint26: .space 4*16 ;SINT26
sint27: .space 4*16 ;SINT27
sint28: .space 4*16 ;SINT28
sint29: .space 4*16 ;SINT29
sint30: .space 4*16 ;SINT30
int0: .space 4*16 ;INT0,SINT0
int1: .space 4*16 ;INT1,SINT1
int2: .space 4*16 ;INT2,SINT2
tint0: .space 4*16 ;INT0,SINT3
brint0: .space 4*16 ;BXINT0,SINT4
bxint0: .space 4*16 ;BXINT0,SINT5
dmac0: .space 4*16 ;DMAC0,brint2,SINT6
dmac1: .space 4*16 ;DMAC0,brint2,SINT7
int3: .space 4*16 ;INT3,SINT8
hpint: .space 4*16 ;HPINT1,SINT9
brint1: .space 4*16 ;BRINT1 or DMAC2,SINT10
bxint1: .space 4*16 ;BRINT1 or DMAC3,SINT11
dmac4: .space 4*16 ;DMAC4,SINT12
dmac5: .space 4*16 ;DMAC5,SINT13
rsvd1: .space 4*16 ;reserved
rsvd2: .space 4*16 ;reserved
.end
3、链接文件:
MEMORY
{
PAGE 0: RESERVER: origin = 0x00, len = 0x80
FFT_VECT: origin = 0x80, len = 0x80
PROG: origin = 0x100, len = 0x1000
PAGE 1: DATA_1: origin = 0x1100, len = 0x0e00
DATA_2: origin = 0x2000, len = 0x2000
}
SECTIONS
{ .vectors: {} > FFT_VECT PAGE 0
.text: {} > PROG PAGE 0
.data: {} > PROG PAGE 0
.bss: {} >DATA_2 PAGE 1
.cinit: {} >PROG PAGE 0
.stack: {} > DATA_2 PAGE 1
.input:{} > DATA_2 PAGE 1 ,align(512)
.input_tempt:{} > DATA_2 PAGE 1
.output: {} > DATA_2 PAGE 1
.sintab:{} > DATA_1 PAGE 1
.const: {} > PROG PAGE 0
}
七、 实验结果及体会
实验结果:
实验体会:
傅里叶变换是将信号从时域的一种变换形式,是信号处理领域中的一种重要的分析工具,所以学好FFT变换在DSP技术中很重要。
在这次实验中,进一步熟悉了CCS软件的使用,实验过程中感觉自己的基础知识很不牢固,需要多加强对CCS软件的操作,对编译环境的熟悉对实验的完成和理解则有更加的帮助。感觉要想学好DSP这门课程,必须脚踏实地的一步步努力的学好基础知识,才能更加顺利的完成实验。
三、基于DSPLib的滤波器程序设计
一、实验目的
1、了解FIR、IIR数字滤波器的原理;
2、掌握FIR、IIR数字滤波器的设计方法。
3、熟悉对DSPLib的调用方法以及数字滤波器在DSP系统中的实现;
二、实验内容(要求)
现有连续时间信号,已基于采样频率对采样,获得离散数据。设计一个FIR(或IIR)数字低通滤波器,对数据滤波,滤除中频率分量,保留频率分量。
要求:
1、设计FIR(或IIR)数字低通滤波器,得到滤波器的有关参数;
2、基于DSPLib编制DSP的C语言程序,实现上述低通滤波,并对数据滤波。
3、利用CCS中VIEW菜单中的Graph调试工具观察信号时域波形及其频谱。
三、背景知识
1、FIR、IIR数字滤波器的基本原理。(参阅《数字信号处理》教材)。
2、MATLAB的数字滤波器设计工具FDAtool。(详细请参阅MATLAB帮助文档。)2.1 启动滤波器设计分析器
在MATLAB的start菜单中选择Toolboxes->Filter Design->Filter Design & Analysis Tools(fdatool),或者在命令行中输入fdatool来启动滤波器设计分析器。启动后界面如图2.1所示:
图2.1
2.2 滤波器设计
在选项中选择或输入滤波器参数,然后点击”Design Filter”按钮完成滤波器设计。设计成功后的结果如图2.2所示。
图2.2
2.3 导出FIR滤波器系数。
Ø 在fdatool中,选择Targets->Code Composer Studio™IDE。
Ø 在出现的对话框中选择输出文件类型为C.header file,输出系数类型为signed 16-bit integer,如图2.3所示。
Ø 点击OK按钮,选择路径,即可输出前一步设计出的FIR滤波器系数表。
图2.3
3、DSPLib的应用
CCS提供DSPLib,其中包含了基本的数学计算和数字信号处理常用算法模块的函数,可直接调用这些函数实现一些数字信号处理算法。本实验主要使用了fir、firs、firs2、iircas4、iircas5、iircas5I等函数实现数字滤波。有关这些函数的说明请参阅《dsplib中文版__TMS32054X_函数库中文用户指南.pdf》
实验程序流程图为:
四 、实验步骤
1、 根据实验要求,利用Matlab的fdatools设计FIR低通滤波器和带通滤波
器,导出有FIR系数数组的头文件。
2、 根据实验要求编FIR滤波器的C语言代码,中断向量表和CMD文件;
3、编译成功无误后下载到C5402开发板中,然后运行程序;
4、 程序运行完成后,通过CCS中的View->Graph选项查看输入和输出波形,
分析实验结果是否符合要求。
五、 程序原代码
1、主函数:
#include <math.h>
#include <tms320.h>
#include <dsplib.h>
#include "register.h"
#include "fdacoefs.h" //滤波文件
#define NX 1024 //输入数组的长度,即波形取得点数
#define NH 87 //系数向量的长度
#define pi 3.1415926 //定义π的值
//#define PMST(unsigned int*)0x1D
int i,j;
DATA x[NX],h[NH],r[NX],db[NH]; //分别用于存放导入数据、滤波数据(低通滤波数据)、输出数据、缓冲数组
DATA *dbptr=&db[0]; //延时缓冲区,用于保存计算r所必须的输入值
#pragma DATA_SECTION(h,".coeffs")
#pragma DATA_SECTION(db,".dbuffer")
void dataIO(void); //预定义函数
void main(void)
{
PMST=0x00A0; //将片内数据RAM映射到程序空间和数据空间
dataIO(); //调用函数,用于导入模拟使用的数据且存放到x数组中
for (i=0;i<NX;i++) r[i]=0; //将数组r初始化为0
for (i=0;i<NH;i++) db[i]=0; //将数组db初始化为0
for(i=0;i<NH;i++) h[i]=B[i]; //将导入的低通滤波数据存放到h数组中
fir(x,h,r,&dbptr,NH,NX); //滤波函数
return;
}
void dataIO() //定义函数
{
/*do data I/O*/
return;
}
2、中断函数:
.sect ".vectors"
.ref _c_int00
.ref _timer
.ref _change_frequency
rs: BD _c_int00 ;Rest
NOP
NOP
nmi: .space 4*16 ;NMI, SINT16
sint17:.space 4*16 ;SINT17
sint18: .space 4*16 ;SINT18
sint19: .space 4*16 ;SINT19
sint20: .space 4*16 ;SINT20
sint21: .space 4*16 ;SINT21
sint22: .space 4*16 ;SINT22
sint23: .space 4*16 ;SINT23
sint24: .space 4*16 ;SINT24
sint25: .space 4*16 ;SINT25
sint26: .space 4*16 ;SINT26
sint27: .space 4*16 ;SINT27
sint28: .space 4*16 ;SINT28
sint29: .space 4*16 ;SINT29
sint30: .space 4*16 ;SINT30
int0: .space 4*16 ;INT0, SINT0
int1: .space 4*16 ;INT1, SINT1
int2: .space 4*16 ;INT2, SINT2
tint0: .space 4*16;BD _timer ;TINT0, SINT3
brint0: .space 4*16 ;BRINT0, SINT4
bxint0: .space 4*16 ;BXINT0, SINT5
dmac0: .space 4*16 ;DMAC0, brint2, SINT6
dmac1: .space 4*16 ;DMAC1, bxint2, SINT7
int3: .space 4*16;BD _change_frequency ;INT3, SINT8
hpint: .space 4*16 ;HPINT, SINT9
brint1: .space 4*16 ;BRINT1 or DMAC2, SINT10
bxint1: .space 4*16 ;BXINT1 or DMAC3, SINT11
dmac4: .space 4*16 ;DMAC4, SINT12
dmac5: .space 4*16 ;DMAC5, SINT13
rsvd1: .space 4*16 ;reserved
rsvd2: .space 4*16 ;reserved
.end
3、链接文件:
MEMORY
{
PAGE 0:RESERVE: origin=00h, length=80h
PAGE 0: FFT_VECT: origin=0080h,length=80h
PAGE 0: PROG: origin=100h,length=1000h
PAGE 1: DATA_1: origin=1100h,length=0E00h
PAGE 1: DATA_2:origin=2000h,length=2000h
}
SECTIONS
{ .vectors:>FFT_VECT PAGE 0
.text:>PROG PAGE 0
.data:> PROG PAGE 0
.bss:> DATA_2 PAGE 1
.cinit:>PROG PAGE 0
.stack:>DATA_2 PAGE 1
.coeffs:>PROG PAGE 0,align(128)
.dbuffer:>DA
展开阅读全文