DSP原理及应用滤波器的设计文档格式.docx

上传人:b****2 文档编号:3962961 上传时间:2023-05-02 格式:DOCX 页数:56 大小:1.17MB
下载 相关 举报
DSP原理及应用滤波器的设计文档格式.docx_第1页
第1页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第2页
第2页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第3页
第3页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第4页
第4页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第5页
第5页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第6页
第6页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第7页
第7页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第8页
第8页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第9页
第9页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第10页
第10页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第11页
第11页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第12页
第12页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第13页
第13页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第14页
第14页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第15页
第15页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第16页
第16页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第17页
第17页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第18页
第18页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第19页
第19页 / 共56页
DSP原理及应用滤波器的设计文档格式.docx_第20页
第20页 / 共56页
亲,该文档总共56页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

DSP原理及应用滤波器的设计文档格式.docx

《DSP原理及应用滤波器的设计文档格式.docx》由会员分享,可在线阅读,更多相关《DSP原理及应用滤波器的设计文档格式.docx(56页珍藏版)》请在冰点文库上搜索。

DSP原理及应用滤波器的设计文档格式.docx

-mexample1.map/*声明链接产生的存储器映射文件*/

-estart/*声明主程序入口*/

MEMORY/*关键字加一对{},存储器配置*/

{

PAGE0:

/*程序存储区*/

EPROM:

org=00A0Hlen=0F70H/*定义EPROM区,起始地址0090H,长度0F70H*/

VECS:

org=0080Hlen=0010H/*定义VECS区,起始地址0080H,长度0010H*/

PAGE1:

/*数据存储区*/

SPRAM:

org=1010Hlen=1000H/*定义SPRAM区,起始地址1000H,长度1000H*/

DARAM:

org=2010Hlen=2000H/*定义DARAM区,起始地址2000H,长度2000H*/

}

SECTIONS/*关键字加一对{},定位段*/

.text:

EPROMPAGE0/*将.text段映射或定位到PAGE0的EPROM区*/

.data:

.bss:

STACK:

DARAMPAGE1/*将.text段映射或定位到PAGE1的DARAM区*/

.vectors:

VECSPAGE0/*将.vectors段映射或定位到PAGE0的VECS区*/

12.改变主程序example2.asm中x1~x5的值(自定),重新执行9~11①。

记录x1~x5、y的值并验算。

.title"

example1.asm"

;

伪指令。

用于格式化输出清单文件,声明在每页的顶部打印文件标题

.mmregs;

声明CPU寄存器名称

STACK.usect"

STACK"

10H;

自定义未初始化段STACK及大小(10H个字),最左边的STACK是标号

.bssx,5;

声明数组x,5个字

.bssy,1;

声明变量y,1个字

.defstart;

声明本文件中的标号start能被别的文件(程序)引用

.data;

伪指令,指示下面的代码为数据段,通常包含初始化的数据(常数)。

table:

.word1,2,3,4,5;

声明5个16位整数类型的常数。

table是标号。

.text;

伪指令,指示下面的代码为文本段,通常包含可执行的代码。

start:

STM#0,SWWSR;

SWWSR=0,插入0个等待状态。

start是标号。

STM#STACK+10H,sp;

sp=#STACK+10H,设置堆栈指针指向堆栈段的底部

STM#x,AR1;

AR1=#x或AR1指向数组x

RPT#4;

下一条指令重复执行4+1=5次

MVPDtable,*AR1+;

数据传送。

程序存储器中的table数据表→AR1+指向的数据存储器

LD#0,A;

累加器A清零

CALLSUM;

调用求和子程序SUM

end:

Bend;

无条件转移到标号end所在地方执行程序

SUM:

标号,指示求和子程序SUM从这里开始

STM#x,AR3;

AR3指向数组x

STM#4,AR2;

AR2=4

loop:

ADD*AR3+,A;

*AR3+A→A,然后AR3=AR3+1。

loop是标号。

BANZloop,*AR2-;

如果AR2的值不为0,AR2=AR2-1,跳转到loop处执行;

否则执行下一条指令

STLA,*(y);

y=AL

RET;

子程序返回

.end;

指示汇编结束

实验二算术运算与数据操作的汇编语言程序设计实验

6、编制程序,计算y=a1x1+a2x2+…+a10x10,其中数据均为小数(aixi的值自己定义)。

.title"

test.asm"

.mmregs

STACK.usect"

10H

.bssa,10

.bssx,10

.bssy,1

.defstart

.data

.word1*32768/10;

0.1

.word2*32768/10;

0.2

.word-3*32768/10;

-0.3

.word4*32768/10;

0.4

.word8*32768/10;

0.8

.word6*32768/10;

0.6

.word-4*32768/10;

-0.4

.word-2*32768/10;

-0.2

.word1*32768/10;

.text

SSBXFRCT

STM#a,AR1

RPT#19

MVPDtable,*AR1+

STM#x,AR2

STM#a,AR3

RPTZA,#9

MAC*AR2+,*AR3+,A

STHA,*(y)

Bend

.end

8、编写浮点乘法程序,计算x1×

x2×

x3=0.2×

(-0.4)×

0.25。

注:

(1)x1:

被乘数,m1:

被乘数的尾数m2:

乘数的尾数,x2:

乘数,m3:

乘数的尾数,x3:

乘数ep:

乘积的指数,e1:

被乘数的指数

(2)mp:

乘积的尾数,m1:

被乘数的尾数,product:

乘积,e2:

乘数的指数,temp:

暂存单元

.title"

sy27.asm"

100

.bssx1,1

.bssx2,1

.bssx3,1

.bsse1,1

.bssm1,1

.bsse2,1

.bssm2,1

.bsse3,1

.bssm3,1

.bssep,1

.bssmp,1

.bssproduct,1

.bsstemp,1

.word2*32768/10;

.word-4*32768/10;

.word25*32768/100;

0.25

.text

STM#STACK+100,SP;

设置堆栈指针

LD#x1,DP;

设置DP指针为x1所在页

MVPDtable,@x1;

将x1和x2和x3传送到数据存储器

MVPDtable+1,@x2

MVPDtable+2,@x3

LD@x1,16,A;

将x1规格化为浮点数

EXPA

STT,@e1;

保存x1的指数

NORMA

STHA,@m1;

保存x1的尾数

LD@x2,16,A;

将x2规格化为浮点数

STT,@e2;

保存x2的指数

NORMA

STHA,@m2;

保存x2的尾数

LD@x3,16,A;

将x3规格化为浮点数

STT,@e3;

保存x3的指数

STHA,@m3;

保存x3的尾数

CALLMULT;

调用浮点乘法子程序

Bend

MULT:

SSBXFRCT

SSBXSXM

LD@e1,A;

指数相加

ADD@e2,A

ADD@e3,A

STLA,@ep;

乘积指数->

ep

LD@m1,T;

尾数相乘

MPY@m2,A

STLA,@m1

LD@m1,T

MPY@m3,A;

乘积尾数在累加器A中

EXPA;

对尾数乘积规格化

STT,@temp;

规格化时产生的指数->

temp

STHA,@mp;

保存乘积尾数在mp中

LD@temp,A;

修正乘积指数

ADD@ep,A;

(ep)+(temp)->

保存乘积指数在ep中

NEGA;

将浮点乘积转换成定点数

STLA,@temp;

乘积指数反号,并且加载到T寄存器

LD@temp,T;

再将尾数按T移位

LD@mp,16,A

STHA,@product;

保存定点乘积

RET

.end

实验三信号发生器设计

1.设DSP的CPU主时钟频率为100MHz,指令周期为10ns,请说明产生频率为100KHz的周期三角波信号时,应该如何修改主程序。

2.如果在查找表中放置正弦波一个周期内的360个离散值(在MATLAB中产生),请重写产生正弦波的主程序并仿真。

main.asm

.mmregs

.def_c_int00

.includec54.inc

.refc54init

DA_ADDR.set0x0002;

定义符号DA_ADDR表示D/A端口地址

.data

sin_table:

在这里放置一个周期的正弦波的360个离散值

.word0,4,9,13,18,22,27,31

.word35,40,44,49,53,57,62,66

.word70,75,79,83,87,91,96,100

.word104,108,112,116,120,124,128,131

.word135,139,143,146,150,153,157,160

.word164,167,171,174,177,180,183,186

.word190,192,195,198,201,204,206,209

.word211,214,216,219,221,223,225,227

.word229,231,233,235,236,238,240,241

.word243,244,245,246,247,248,249,250

.word251,252,253,253,254,254,254,255

.word255,255,255,255,255,255,254,254

.word254,253,253,252,251,250,249,248

.word247,246,245,244,243,241,240,238

.word236,235,233,231,229,227,225,223

.word221,219,216,214,211,209,206,204

.word201,198,195,192,190,186,183,180

.word177,174,171,167,164,160,157,153

.word150,146,143,139,135,131,127,124

.word120,116,112,108,104,100,96,91

.word87,83,79,75,70,66,62,57

.word53,49,44,40,35,31,27,22

.word18,13,9,4,0,-4,-9,-13

.word-18,-22,-27,-31,-35,-40,-44,-49

.word-53,-57,-62,-66,-70,-75,-79,-83

.word-87,-91,-96,-100,-104,-108,-112,-116

.word-120,-124,-127,-131,-135,-139,-143,-146

.word-150,-153,-157,-160,-164,-167,-171,-174

.word-177,-180,-183,-186,-190,-192,-195,-198

.word-201,-204,-206,-209,-211,-214,-216,-219

.word-221,-223,-225,-227,-229,-231,-233,-235

.word-236,-238,-240,-241,-243,-244,-245,-246

.word-247,-248,-249,-250,-251,-252,-253,-253

.word-254,-254,-254,-255,-255,-255,-255,-255

.word-255,-255,-254,-254,-254,-253,-253,-252

.word-251,-250,-249,-248,-247,-246,-245,-244

.word-243,-241,-240,-238,-236,-235,-233,-231

.word-229,-227,-225,-223,-221,-219,-216,-214

.word-211,-209,-206,-204,-201,-198,-195,-192

.word-190,-186,-183,-180,-177,-174,-171,-167

.word-164,-160,-157,-153,-150,-146,-143,-139

.word-135,-131,-128,-124,-120,-116,-112,-108

.word-104,-100,-96,-91,-87,-83,-79,-75

.word-70,-66,-62,-57,-53,-49,-44,-40

.word-35,-31,-27,-22,-18,-13,-9,-4

.word-0,0,0,0,0,0,0,0

.bssDA_DATA,1;

声明变量DA_DATA作D/A缓冲区

.bssDA_NUM,1;

声明变量DA_NUM作D/A计数器

.sect"

progsys"

自定义初始化段progsys

.align0x10;

调整SPC,下面的程序代码放置在存储器中时,起始地址对准16字的边界

_c_int00:

STM#0x0f80,SP;

设置堆栈指针

CALLc54init;

调整DSP初始化程序,硬件仿真时必须的部分

LD#sin_table,DP;

设置数据页指针,DP指向sin_table所在的数据存储器页

LOOP:

周期循环标号

ST#0,DA_NUM;

计数变量清零

STM#sin_table,AR1;

AR1指向查找表首地址

SINLOOP:

一个周期内的D/A循环标号

MVDK*AR1+,DA_DATA;

读查找表中的值放入到数据缓冲区DA_DATA中,软件仿真时在此处设置断点

PORTWDA_DATA,DA_ADDR;

数据缓冲区DA_DATA中的值写到D/A端口,软件仿真时不起作用

RPT#1000;

下面的一条指令执行1001次

NOP;

空操作,在这里起延时作用

ADDM#1,DA_NUM;

DA_NUM循环计数

CMPMDA_NUM,#359;

DA_NUM与359比较

BCSINLOOP,NTC;

一个周期内的360个点还没D/A完继续

BLOOP;

一个周期内的360个点已经D/A完,进入周期循环

.end

Memory.cmd

/*-e_c_int00*/

-msensor.map

MEMORY

PAGE0:

PROG:

origin=0x2000,len=0x0f80

VECT:

origin=0x2f80,len=0x80/*128word*/

PAGE1:

DRAM:

origin=0x3000,len=0x200

SECTIONS

.progsys:

load=PROGPAGE0

.vectors:

load=VECTPAGE0

.data:

load=DRAMPAGE1align16

.bss:

load=DRAMPAGE1

实验四IIR滤波器的DSP实现

思考题:

对参考程序,编写实现四阶或更高阶数的低通、高通、带通、带阻IIR数字滤波器的DSP程序并仿真。

提示:

滤波器系数一般通过MATLAB仿真得到。

4阶低通:

IIR.asm"

.mmregs

.defstart

x4.usect"

x"

1

x3.usect"

x2.usect"

x1.usect"

x0.usect"

COEF.usect"

COEF"

9

indata.usect"

buffer"

outdata.usect"

*PA0.set10

*PA1.set1

table

.word0;

x(n-1)

x(n-2)

.word0;

x(n-3)

x(n-4)

分子系数B3=0

.word15*32768/10000;

B3=0.0015

.word78*32768/10000;

分子系数B2=0.0078

.word25*32768/10000;

分子系数B1=0.0025

分子系数B0=0

.word3783*32768/10000;

分母系数A4=0.3783

.word-6258*32768/10000;

分母系数A3=-1.8776/3

.word88705*32768/100000;

分母系数A2=3.5482/4

.word-826775*32768/1000000;

分母系数A1=-3.0372/4

SSBXFRCT

STM#x4,AR1

RPT#3

MVPD#table,*AR1+

STM#indata,AR5

STM#outdata,AR2

STM#COEF,AR1

RPT#8

MVPD#table+2,*AR1+

STM#x2,AR3

STM#COEF+9,AR4;

AR4-->

A1

MVMMAR4,AR1;

保存地址值在AR1中

STM#5,BK;

设置循环缓冲区长度

STM#-1,AR0;

设置变址寻址步长

IIR2:

PORTRPA1,*AR3;

从PA1口输入数据x(n)

MVDD*AR5,*AR3;

在这里设置断点与探针

LD*AR3+0%,16,A;

计算反馈通道,A=x(n)

MAC*AR3,*AR4,A;

A=x(n)+A1*x1

A=x(n)+2A1*x1

A=x(n)+3A1*x1

MAC*AR3+0%,*AR4-,A;

A=x(n)+3*A1*x1+A1*x1

A=x(n)+4*A1*x1+A2*x2

A=x(n)+4*A1*x1+2*A2*x2

A=x(n)+4*A1

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2