DSP硬件实验报告.docx
- 文档编号:9820130
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:36
- 大小:24.03KB
DSP硬件实验报告.docx
《DSP硬件实验报告.docx》由会员分享,可在线阅读,更多相关《DSP硬件实验报告.docx(36页珍藏版)》请在冰点文库上搜索。
DSP硬件实验报告
Exp1
;FileName:
exp01.asm
;theprogramiscompiledatnoautoinitializationmode
.mmregs
.global_main
_main:
stm#3000h,sp;为sp堆栈指针寄存器赋予初值
ssbxxf;重新置位为xf,灯
calldelay;调用延迟函数
rsbxxf;重置
calldelay;调用延迟函数
b_main
nop
nop
;delay.5second延迟函数
delay:
stm270fh,ar3指定ar3寄存器地址
loop1:
stm0f9h,ar4指定矮人寄存器地址
loop2:
banzloop2,*ar4-条件转移,每次转移ar4地址减一
banzloop1,*ar3-条件转移,每次转移ar3地址减一
ret
nop
nop
;stm2cycles
;banzwhenTRUE4cycles
;FALSE2cycles
;0f9h=>249d
;270fh=>9999d
.end
EXP2
*FileName:
exp02.asm
;getsomeknowledgeofthecmdfile
;theprogramiscompiledatnoautoinitializationmode
.mmregs
.global_main
_main:
;storedata
stm1000h,ar1;addressofinternalmemory指定内部寄存器ar1的地址为1000h
;stm5000h,ar1;addressofexteriormemory指定外部寄存器ar1的地址为5000h
rpt#07h;循环执行下一条指令,循环次数07h
st0aaaah,*ar1+;将ar1所指的内存赋予0aaaah,然后ar1所指地址加1
;readdatathenre-store
stm7h,ar3指定ar3地址7h
;stm5000h,ar1;addressofexteriormemory指定外部存储地址为5000h
;stm5008h,ar2;addressofexteriormemory指定外部存储地址为5008h
stm1000h,ar1寻址找到要读取的数据地址1000h~1008h
stm1008h,ar2
loop:
ld*ar1+,t循环读取1000h~1008h
stt,*ar2+赋予5000h~5008h
banzloop,*ar3-
here:
bhere
.end
EXP3
;FileName:
exp03.asm
;learnhowtooperatetheI/Oports
;getsomeknowledgeoftherts.libfile
;intheI/Ospace0x0000=>8switches
;0x0001=>8LEDs
.mmregs
.global_main
.text
_main:
stm3100h,sp;将3100h赋予sp
stm1000h,ar1;definetheaddress
portr00h,*ar1;将0x0000的值赋予*ar1,即8个开关状态
nop
nop
portw*ar1,01h;将*ar1的值赋予0x0001的值。
即8个led的状态
nop
nop
b_main
nop
nop
.end
EXP4
#include
interruptvoidtimer();
/*externvoidtime();*/
externvoidinitial();
externvoidporta();
externvoidportb();
intflag=0;
interruptvoidtimer()定时器中断函数
{
*(int*)0x300=*(int*)0x300+1;定时不断加1
if(*(int*)0x300==0x3e8);当定时器数值达到0x3e8,开始定时器中断
{
*(int*)0x300=0;为定时器重新赋予初值
*(int*)0x302=*(int*)0x302+1;
if(flag==0);如果flag为0,则将其变为1,执行porta()
{flag=1;
porta();
}
else;如果flag为1,则将其变为1,执行portb()
{flag=0;
portb();
}
}
return;
}
main()主函数
{
initial();初始化
while
(1){;};无限循环
}
INITIAL.ASM
.mmregs
.global_initial
_initial:
stm300h,ar1;initial300hdataaddress
st#00h,*ar1;为内存300h的内容赋予00h
stm302h,ar1;initial302hdataaddress
st#00h,*ar1;为内存302h的内容赋予00h
stm200h,ar1
st#5555h,*ar1;为内存200h的内容赋予5555h(010*********)
stm201h,ar1
st#0aaaah,*ar1为内存201h的内容赋予0aaaah(1010101010101010)
stm202h,ar1
st#400h,*ar1为内存202h的内容赋予400h(0000010000000000)
ssbx1,11;setST1.INTM=1,stopallinterrrupt停止所有的中断
stm0ffffh,ifr;clearallinterruptindicate清除所有中断的标志位,中断标志寄存器(IFR)用来指明各个中断的目前状态。
stm00h,imr;setimr=0,stopallinterrrupt停止所有的中断中断屏蔽寄存器(IMR)在需要的时候独立地屏蔽特定的中断
stm410h,tcr;stoptimer停止定时器
stm4e1fh,prd;setprd=4e1fh设置定时器,定时器周期计数器
stm420h,tcr;starttimer打开定时器定时器控制寄存器
stm08h,imr;allowtimerinterrupt允许定时器中断
rsbx1,11;setST1.INTM=0,startallinterrrupt打开所有中断
ret
PORT.ASM
.mmregs
.global_porta
.global_portb
_porta:
stm304h,ar1
st5555h,*ar1;将内存304h的内容赋予5555h(010*********)
portw*ar1,01h;将内存304h的值写入01h端口
ret
_portb:
stm304h,ar1
st0aaaah,*ar1;将内存304h的内容赋予0aaaah(1010101010101010)
portw*ar1,01h;将内存304h的值写入01端口
ret
VECTOR.ASM中断向量函数
.sect".vectors"
.ref_c_int00;Centrypoint
.ref_timer;timeinterruptpoint
.align0x80;mustbealignedonpageboundary
RESET:
;resetvector
BD_c_int00;branchtoCentrypoint
STM#200,SP;stacksizeof200
nmi:
RETE;enableinterruptsandreturnfromone
NOP
NOP
NOP;NMI~
;softwareinterrupts
sint17.space4*16
sint18.space4*16中断向量表
sint19.space4*16
sint20.space4*16
sint21.space4*16
sint22.space4*16
sint23.space4*16
sint24.space4*16
sint25.space4*16
sint26.space4*16
sint27.space4*16
sint28.space4*16
sint29.space4*16
sint30.space4*16
int0:
RETE
NOP
NOP
NOP
int1:
RETE
NOP
NOP
NOP
int2:
RETE
NOP
NOP
NOP
tint:
b_timer启动定时器中断
NOP
NOP
rint0:
RETE
NOP
NOP
NOP
xint0:
RETE
NOP
NOP
NOP
rint1:
RETE
NOP
NOP
NOP
xint1:
RETE
NOP
NOP
NOP
int3:
RETE
NOP
NOP
NOP
.end
EXP5
interruptvoidint2c();
externvoidinitial();
externvoidporta();
externvoidportb();
intflag=0;
main()
{
initial();初始化
while
(1){;}无限循环
}
interruptvoidint2c()外部中断函数
{
asm("nop");不采取任何函数
*(int*)0x300=*(int*)0x300+2;/*breakheretoshowifinterrupthappened*/这是一个记录外部中断的标志,通过记录0x300h中的值来记录
if(flag==0)
{
flag=1;如果flag为0,则将其变为1,执行porta()
porta();
}
else
{
flag=0;如果flag为1,则将其变为1,执行portb()
portb();
}
}
INITIAL.ASM
.mmregs
.global_initial
.text
_initial:
stm300h,ar3;initialdata300h
st#00h,*ar3为内存300h赋予00h
stm302h,ar4
st#00h,*ar4为内存302h赋予00h
ssbx1,11;setst1.intm=1stopallinterrupt启动st1,停止所有中断
stm00h,imr;stopallinterrupt为imr寄存器赋予00h,停止所有中断
stm0ffffh,ifr;clearallinterruptsign为ifr寄存器赋予0ffffh,清除所有中断
stm04h,imr;allowint2interrupt开启int2的外部中断
rsbx1,11;allowallinterrupt打开所有中断总开关
ret
.end
PORT.ASM端口函数
.mmregs
.global_porta
.global_portb
_porta:
stm304h,ar1
st5555h,*ar1为内存304h赋予5555h(010*********)
portw*ar1,01h将5555h赋予端口01h
ret
_portb:
stm304h,ar1
st0aaaah,*ar1为内存304h赋予0aaaah(1010101010101010)
portw*ar1,01h将aaaah赋予端口01h
ret
VECTOR.ASM中断向量表
.sect".vectors"
.ref_c_int00;Centrypoint
.ref_int2c
.align0x80;mustbealignedonpageboundary
RESET:
;resetvector
BD_c_int00;branchtoCentrypoint
STM#200,SP;stacksizeof200
nmi:
RETE;enableinterruptsandreturnfromone
NOP
NOP
NOP;NMI~
;softwareinterrupts
sint17.space4*16
sint18.space4*16
sint19.space4*16中断向量表
sint20.space4*16
sint21.space4*16
sint22.space4*16
sint23.space4*16
sint24.space4*16
sint25.space4*16
sint26.space4*16
sint27.space4*16
sint28.space4*16
sint29.space4*16
sint30.space4*16
int0:
RETE
NOP
NOP
NOP
int1:
RETE
NOP
NOP
NOP
int2:
启动int2外部中断
b_int2c
NOP
NOP
tint:
RETE
NOP
NOP
NOP
rint0:
RETE
NOP
NOP
NOP
xint0:
RETE
NOP
NOP
NOP
rint1:
RETE
NOP
NOP
NOP
xint1:
RETE
NOP
NOP
NOP
int3:
RETE
NOP
NOP
NOP
EXP6AD采样实验
externvoidInitC5402(void);
externvoidOpenMcBSP(void);
externvoidCloseMcBSP(void);
externvoidREADAD50(void);
/***********************************************************************
**MainFunctionProgram
***********************************************************************/
voidmain(void)主函数
{
InitC5402();/*initializeC5402DSP*/初始化c5402
OpenMcBSP();打开McBSP()
while
(1)无限循环
{
READAD50();/*main–loop*/采样读取函数
}
}
/***********************************************************************
**EndofFile––exp06.c
***********************************************************************/
.global_InitC5402
.global_OpenMcBSP
.global_CloseMcBSP
.global_READAD50
.global_WRITEAD50
.includeMMRegs.h
_InitC5402:
NOP
LD#0,DP;resetdata–pagepointe
STM#0,CLKMD;softwaresettingofDSPclock软件设置DSP时钟
STM#0,CLKMD;(todividermodebeforesetting)
STM#0x4007,CLKMD;setC5402DSPclockto40MHz
*STM#0x4007,CLKMD;setC5402DSPclockto100MHz设置时钟频率
;(basedonDSKcrystalat20MHz)
*******ConfigureC5402SystemRegisters*******
STM#0x2000,SWWSR;2waitcycleforIOspace&
;0waitcyclefordata&progspaces(swwsr外部总线S/W等待状态寄存器)
STM#0x0000,BSCR;setwaitstatesforbankswitch:
;64kmembank,extra0cyclebetween(bscr外部总线块转换控制寄存器)
;consecutiveprog/dataread
STM#0x1800,ST0;ST0atdefaultsetting设置状态寄存器ST0,ST1
STM#0x2900,ST1;ST1atdefaultsetting(note:
INTX=1)
STM#0x00A0,PMST;MCmode&OVLY=1,vectorsat0080h(PMST包括了存储器配置状态和控制信息)
*******SetupTimerControlRegisters*******
STM#0x0010,TCR;stopon–chiptimer0设置timer0为主要的时钟寄存器
;STM#0x0010,TCR1;stopon–chiptimer1
;Timer0isusedasmainlooptimer
;STM#2499,PRD;timer0rate=CPUCLK/1/(PRD+1)定时器周期计数器
;=40M/2500=16KHz
*STM#6249,PRD;ifCPUat100M/6250=16KHz
*******InitializeMcBSP2Registers*******
STMSPCR1,McBSP2_SPSA;registersubaddrofSPCR1串口控制寄存器1置位0000h
STM#0000h,McBSP2_SPSD;McBSP2recv=left–justify
;RINTgeneratedbyframesync
STMSPCR2,McBSP2_SPSA;registersubaddrforSPCR2串口控制寄存器2置位0000h
;XINTgeneratedbyframesync
STM#0000h,McBSP2_SPSD;McBSP2Tx=FREE(clockstops
;torunafterSWbreakpoint
STMRCR1,McBSP2_SPSA;registersubaddrofRCR1接收控制寄存器1置位0040h
STM#0040h,McBSP2_SPSD;recvframe1Dlength=16bits
STMRCR2,McBSP2_SPSA;registersubaddrofRCR2接收控制寄存器2置位0040h
STM#0040h,McBSP2_SPSD;recvPhase=1
;retframe2Dlength=16bits
STMXCR1,McBSP2_SPSA;registersubaddrofXCR1发送控制寄存器1置位0040h
STM#0040h,McBSP2_SPSD;setthesameasrecv
STMXCR2,McBSP2_SPSA;registersubaddrofXCR2发送控制寄存器2置位0040h
STM#0040h,McBSP2_SPSD;setthesameasrecv
STMPCR,McBSP2_SPSA;registersubaddressofPCR引脚控制寄存器置位000eh
STM#000eh,McBSP2_SPSD;clkandframefromexternal(slave)
;FSatpulse–mode(00)
*******FinishDSPInitialization*******完成初始化dsp
STM#0x0000,IMR;disableperipheralinterrupts禁止外部中断
STM#0xFFFF,IFR;cleartheintrupts’flags重置中断标志位
RET;returntomain返回主函数
NOP
NOP
*******WaitingforMcBSP0RXFinished*******等待mcbsp0接收采样数据完成
IfRxRDY1:
NOP
STMSPCR1,McBSP2_SPSA;enableMcBSP2Rx使能MCBSP2的接收
LDMMcBSP2_SPSD,A
AND#0002h,A;maskRRDYbit标明RRDY的接收器的准备状态复位
BCIfRxRDY1,AEQ;keepchecking如果RRDY为1,接收器准备就绪,可以采样接收数据
NOP
NOP
RET;retu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 硬件 实验 报告