北邮DSP实验报告210917丁禹江电子四班.docx
- 文档编号:18035255
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:40
- 大小:2.18MB
北邮DSP实验报告210917丁禹江电子四班.docx
《北邮DSP实验报告210917丁禹江电子四班.docx》由会员分享,可在线阅读,更多相关《北邮DSP实验报告210917丁禹江电子四班.docx(40页珍藏版)》请在冰点文库上搜索。
北邮DSP实验报告210917丁禹江电子四班
数字信号处理实验报告
学院:
电子工程学院
班级:
2012211204
学号:
2012210917
班内序号:
16
姓名:
丁禹江
第三章5402常规实验指导
实验
(一):
简单指令程序运行实验
1.程序代码注释
;FileName:
exp01.asm
;theprogramiscompiledatnoautoinitializationmode
.mmregs
.global_main
_main:
stm#3000h,sp;堆栈指针的首地址设为#3000h
ssbxxf;状态寄存器位置位,灯亮
calldelay;调用delay函数延时
rsbxxf;状态寄存器位复位,灯灭
calldelay;调用delay函数延时
b_main;可选择延迟的无条件转移,循环执行
nop;无任何操作
nop
;delay.5second
delay:
;演示0.5秒
stm270fh,ar3;把地址存放到存储器映射寄存器中
loop1:
stm0f9h,ar4;把地址存放到存储器映射寄存器中
loop2:
banzloop2,*ar4-;AR4不为0时转移,指针地址减一
banzloop1,*ar3-;若不为0,ar3减1,共进行10000*250次跳转
ret;return,返回
nop;nooperation
nop
;stm2cycles
;banzwhenTRUE4cycles
;FALSE2cycles
;0f9h=>249d
;270fh=>9999d
.end
2.实验现象
可以看到实验箱上的XF灯以一定的频率闪烁,当单击“Halt”时程序暂定,XF灯停止闪烁,当再次单击RUN时,XF灯又开始闪烁。
实验
(二):
资料存储实验
3.程序代码注释
*FileName:
exp02.asm
;getsomeknowledgeofthecmdfile
;theprogramiscompiledatnoautoinitializationmode
.mmregs
.global_main
_main:
;主函数
;storedata;存储数据
stm1000h,ar1;ar1映射到内存1000h位
;stm5000h,ar1;addressofexteriormemory
rpt#07h;循环执行下一条指令7次
st0aaaah,*ar1+;data存储寄存器的值
;readdatathenre-store
stm7h,ar3;设置ar3
;stm5000h,ar1;addressofexteriormemory
;stm5008h,ar2;addressofexteriormemory
stm1000h,ar1;设置ar1为1000h
stm1008h,ar2;设置ar2为1008h
loop:
ld*ar1+,t;把单数据存储操作数装入T寄存器中
stt,*ar2+;存储T寄存器的值
banzloop,*ar3-;循环7次
here:
bhere;可选择延迟的无条件转移,循环执行
.end
4.实验现象
在CCS的“View”下拉菜单中的Memory窗口中查找C5410各个区段的数据存储器地址,在可以改变的存储器内容的地方,选定地址随意改变其中内容并观察结果;本实验要查看0x1000H~0x100FH单元的数值变化,输入地址0x1000H;查看0x1000H~0x100FH单元的初始值,单击“Run”运行程序,也可以“单步”运行程序;单击“Halt”暂停程序运行。
实验(三):
I/O实验
5.程序代码及注释
;FileName:
exp03.asm
;learnhowtooperatetheI/Oports
;getsomeknowledgeoftherts.libfile
;intheI/Ospace0x0000=>8switches
;0x0001=>8LEDs
.mmregs
.global_main
.text
_main:
;主函数
stm3100h,sp;堆栈指针的首地址设为#3100h
stm1000h,ar1;definetheaddress,定义ar1的地址
portr00h,*ar1;从端口把数据读到数据存储单元中
nop;nooperation
nop
portw*ar1,01h;ar1里的数据输入到01h,控制等的亮灭
nop
nop
b_main;寻循环执行
nop
nop
.end
.global_c_int00,_timer0
.sect".vecs"
reset:
b_c_int00;RESETVECTORS
nop
nop
nmi:
rete;NMI
nop
nop
nop
;softwareinterrupts
sin17:
.space4*16
sin18:
.space4*16
sin19:
.space4*16
sin20:
.space4*16
sin21:
.space4*16
sin22:
.space4*16
sin23:
.space4*16
sin24:
.space4*16
sin25:
.space4*16
sin26:
.space4*16
sin27:
.space4*16
sin28:
.space4*16
sin29:
.space4*16
sin30:
.space4*16
int0:
rete;EXTERNALINT0
nop
nop
nop
int1:
rete;EXTERNALINT1
nop
nop
nop
int2:
rete;EXTERNALINT2
nop
nop
nop
tint0:
b_timer0;TIMER0INTERRUPT
nop
nop
brint0:
rete;BcBSP0RECEIVEINTERRUPT
nop
nop
nop
bxint0:
rete;BcBSP0TRANSMITINTERRUPT
nop
nop
nop
dmac0:
rete;RESERVEDORDMACHANNEL0INTERRUPT
nop
nop
nop
tint1_dmac1:
rete;TIMER1INTERRUPTORDMACHANNEL1INTERRUPT
nop
nop
nop
int3:
rete;EXTERNALINT3
nop
nop
nop
hpint:
rete;HPIINTERRUPT
nop
nop
nop
brint1_dmac2:
rete;McBSP1RECEIVEINTERRUPTORDMACHANNEL2INTERRUPT
nop
nop
nop
bxint1_dmac3:
rete;McBSP1TRANSMITINTERRUPTORDMACHANNEL3INTERRUPT
nop
nop
nop
dmac4:
rete;DMACHANNEL4INTERRUPT
nop
nop
nop
dmac5:
rete;DMACHANNEL5INTERRUPT
nop
nop
Nop
6.实验现象
任意调整K0—K7开关,可以观察到对应LP0—LP7灯“亮”或“灭”;单击“Halt”,暂停持续运行,开关将对灯失去控制。
实验(四):
定时器实验
定时器实验时要用到C54芯片的定时器控制寄存器,定时器时间常数寄存器,定时器中断响应,寄存器定义详见C54芯片资料。
C54的定时器是一个20位的减法计数器,可以被特定的状态位实现停止、重新启动、重设置或禁止,可以使用该定时器产生周期性的CPU中断,控制定时器中断频率的两个寄存器是定时周期寄存器PRD和定时减法寄存器TDDR。
定时器实验通过LED(LP1~LP7)来显示。
在本系统中,时钟频率为20MHZ,令PRD=0x4e1f,这样得到每1/1000秒中断一次,通过累计1000次,就能定时1秒钟。
7.程序代码注释
【初始化程序】
.mmregs
.global_initial
_initial:
stm300h,ar1;初始化300h数据地址,设置ar1的地址
st#00h,*ar1;辅助寄存器ar1指向#00h
stm302h,ar1;初始化302h数据地址,设置ar2的地址
st#00h,*ar1
stm200h,ar1
st#5555h,*ar1
stm201h,ar1
st#0aaaah,*ar1
stm202h,ar1
st#400h,*ar1
ssbx1,11;将ST1.INTM置为1,停止所有中断
stm0ffffh,ifr;清除所有中断标识ifr:
中断标志寄存器
stm00h,imr;将立即数寄存器置为0,停止所有中断
stm410h,tcr;停止计时器tcr:
发送控制寄存器
stm4e1fh,prd;将初始时间设为4e1fh
stm420h,tcr;开始计时器
stm08h,imr;允许计时器中断
rsbx1,11;将ST1.INTM置为0,开始所有中断
ret
【端口程序】(定义管脚)
.mmregs
.global_porta
.global_portb
_porta:
stm304h,ar1;设置ar1地址
st5555h,*ar1;辅助寄存器ar1指向5555h
portw*ar1,01h;ar1的值做输出控制小灯亮灭
ret
_portb:
stm304h,ar1;设置ar1地址
st0aaaah,*ar1;辅助寄存器ar1指向0aaaah
portw*ar1,01h;ar1的值控制亮灭
ret
【向量程序】
.sect".vectors"
.ref_c_int00;C程序入口
.ref_timer;时间中断点
.align0x80;必须被连结到页边界
RESET:
;重设向量
BD_c_int00;到C入口点的分支
STM#200,SP;堆栈大小为200SP:
堆栈寄存器
nmi:
RETE;启动中断并从一个返回
NOP
NOP
NOP
;软件中断
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;设置实用time中断
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
8.实验现象
单击“Run”运行,可观察到LED灯(LP0—LP7)以一定的间隔时间不停摆动;单击“Halt”,暂停程序运行,LED灯停止闪烁;.单击“Halt”,暂停程序运行,LED灯停止闪烁。
实验(五):
INT2中断实验
本实验是进行C54芯片的INT2中断练习,C54芯片中断INT2是低电平单脉冲触发;实验采用导线一端连接D_Exp—数字量输入扩展接口I0,经PX4的IN3,到PX5的OUT0电平转换,再与另一端连接INT2插孔;拨动开关K0一次,就产生一个低电平单脉冲;运行示范程序,观察LP1~LP7LED灯的输出变化;可观察到每拨动开关K0一次LP1~LP7灯亮灭变化一次。
9.程序代码注释
【初始化程序】
.mmregs
.global_initial
.text
_initial:
stm300h,ar3;初始化数据300har3:
辅助寄存器
st#00h,*ar3
stm302h,ar4;初始化数据300har4:
辅助寄存器
st#00h,*ar4
ssbx1,11;将st1.intm置为1,停止所有中断
stm00h,imr;停止所有中断imr:
立即数寄存器
stm0ffffh,ifr;清除所有中断标志ifr:
中断标志寄存器
stm04h,imr;允许int2中断
rsbx1,11;允许所有中断
ret
.end
【端口程序】与【向量程序】参见实验四。
10.实验现象
单击“Run”运行程序,反复拨动开关K0,观察LP1—LP7LED灯亮灭变化;单击“Halt”暂停程序运行,反复拨动开关K0,LP1—LP7LED灯亮灭不发生变化。
实验(六):
A/D采样实验
11.程序代码注释
【C程序】
externvoidInitC5402(void);/*创建初始化C5402的函数,返回值为空*/
externvoidOpenMcBSP(void);/*创建打开McBSP端口的函数,返回值为空;*/
externvoidCloseMcBSP(void);/*创建关闭McBSP端口函数*/
externvoidREADAD50(void);/*创建从AD50的数据流中读取数据的函数;AD50:
硬件端口*/
voidmain(void)/*主函数开始*/
{
InitC5402();/*初始化C5402DSP*/
OpenMcBSP();/*调用函数,打开McBSP端口*/
while
(1)
{
READAD50();/*从AD50的数据流中读取数据,完成AD转换*/
}
}
【汇编程序】
.global_InitC5402;全局符号定义_InitC5402(初始化C5402)
.global_OpenMcBSP;全局符号定义_OpenMcBSP(打开McBSP)
.global_CloseMcBSP;全局符号定义_CLoseMcBSP(关闭McBSP)
.global_READAD50;全局符号定义_READAD50(读取AD50数据流)
.global_WRITEAD50;全局符号定义_WRITEAD50(向AD50写入数据流)
.includeMMRegs.h;引入头文件MMRegs.h
_InitC5402:
NOP
LD#0,DP;重置数据存储器页指针
STM#0,CLKMD;对DSP时钟进行软件设置
STM#0,CLKMD;(在设置之前转到分线规模式)
STM#0x4007,CLKMD;将C5402DSP时钟设置到40Hz
*******ConfigureC5402SystemRegisters*******;配置C5402系统寄存器
STM#0x2000,SWWSR;为IO空间设置两个等待周期
;SWWSR:
外部总线S/W等待状态寄存器
;为数据和监督空间设置0个等待周期
STM#0x0000,BSCR;为堆栈转换寄存器设置等待状态
;BSCR:
外部总线块转换控制寄存器
;堆栈空间为64k,之间没有多余的循环
;连续的监督/数据读取
STM#0x1800,ST0;为状态寄存器0进行预设值
STM#0x2900,ST1;为状态寄存器1进行预设值(note:
INTX=1)
STM#0x00A0,PMST;PMST:
处理器方式状态寄存器
;OVLY=1,向量指向0080h
*******SetupTimerControlRegisters*******;(设置时钟控制寄存器)
STM#0x0010,TCR;停止on–chip计时TCR定时器控制寄存器
;计时器0用作主循环的计时器
*******InitializeMcBSP2Registers*******;(初始化McBSP2(用来创建设备配置)寄存器)
STMSPCR1,McBSP2_SPSA;设置SPCR1的寄存器地址
STM#0000h,McBSP2_SPSD;McBSP2recv=left–justify
;通过框架同步产生接受中断
STMSPCR2,McBSP2_SPSA;设置SPCR2的寄存器地址
;通过框架同步产生传输中断
STM#0000h,McBSP2_SPSD;McBSP2Tx(异步传输)
;在SW断点之后运行
STMRCR1,McBSP2_SPSA;设置RCR1的寄存器地址
;RCR1:
接收控制寄存器
STM#0040h,McBSP2_SPSD;接收框架1长度=16bits
STMRCR2,McBSP2_SPSA;设置RCR2的寄存器地址
STM#0040h,McBSP2_SPSD;接收相位=1
;设置框架2长度为16bits
STMXCR1,McBSP2_SPSA;设置XCR1的寄存器地址
STM#0040h,McBSP2_SPSD;设置与接收(recv)相同
STMXCR2,McBSP2_SPSA;设置XCR2的寄存器地址
STM#0040h,McBSP2_SPSD;设置与接收(recv)相同
STMPCR,McBSP2_SPSA;设置PCR的寄存器地址
STM#000eh,McBSP2_SPSD;时钟和框架从外部产生(slave)
*******FinishDSPInitialization*******;(结束DSP初始化)
STM#0x0000,IMR;关闭外围中断
STM#0xFFFF,IFR;清除中断的标志
RET;返回主程序
NOP
NOP
*******WaitingforMcBSP0RXFinished*******;(等待McBSP0异步接收结束)
IfRxRDY1:
NOP
STMSPCR1,McBSP2_SPSA;启动McBSP2Rx
LDMMcBSP2_SPSD,A
AND#0002h,A;隐藏已经接受到的bit(可以用来代替系列端口中断)
BCIfRxRDY1,AEQ;继续寄存(checking)
NOP
NOP
RET;返回
NOP
NOP
*******WaitingforMcBSP0TXFinished*******;(等待McBSP0异步传输结束)
IfTxRDY1:
NOP
STMSPCR2,McBSP2_SPSA;启动McBSP2Tx
LDMMcBSP2_SPSD,A
AND#0002h,A;隐藏已经传输的bit
BCIfTxRDY1,AEQ;继续寄存
NOP
NOP
RET;返回
NOP
NOP
******************************************
_OpenMcBSP:
rsbxxf;寄存器xf复位为0
callwait;非条件调用等待状态
NOP
STMSPCR1,McBSP2_SPSA;启动McBSP0RX以读入AD数据
LDMMcBSP2_SPSD,A
OR#0x0001,A
STLMA,McBSP2_SPSD;隐藏已经接受到的bit
STMSPCR2,McBSP2_SPSA;启动McBSP0TX以DTMF输出
LDMMcBSP2_SPSD,A
OR#0x0001,A
STLMA,McBSP2_SPSD;隐藏已经输出的bit
LD#0h,DP;装载数据页0
rpt#23;循环执行
NOP
ssbxxf;寄存器xf置位为1
NOP
NOP
CALLIfTxRDY1;非条件调用IfTxRDY1
STM#0x0001,McBSP2_DXR1;请求二级传送
NOP
CALLIfTxRDY1;非条件调用IfTxRDY1
STM#0100h,McBSP2_DXR1;将00h写入到寄存器1
CALLIfTxRDY1;非条件调用IfTxRDY1
STM#0000h,McBSP2_DXR1;
NOP
NOP
rpt#20h
nop
CALLIfTxRDY1;非条件调用IfTxRDY1
STM#0x0001,McBSP2_DXR1;请求二级传送
CALLIfTxRDY1;非条件调用IfTxRDY1
STM#0200h,McBSP2_DXR1;将00h写入到寄存器2
CALLIfTxRDY1
STM#0000h,McBSP2_DXR1
CALLIfTxRDY1
STM#0x0001,McBSP2_DXR1;请求二级传送
CA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮 DSP 实验 报告 210917 丁禹江 电子
![提示](https://static.bingdoc.com/images/bang_tan.gif)