
DSP硬件实验报告-北邮(共24页).doc
24页精选优质文档-----倾情为你奉上北京邮电大学DSP硬件实验报告 学 院: 电子工程学院 专 业: 姓 名: 学 号: 班 级:实验一 常用指令实验一、 实验目的熟悉DSP开发系统的连接了解DSP开发系统的组成和结构和应用系统构成熟悉常用C54X系列指令的用法(程序寻址,寄存器,I/O口,定时器,中断控制)二、实验步骤与内容(一)简单指令程序运行实验源程序:;File Name:exp01.asm;the program is compiled at no autoinitialization mode --程序在非自动初始化模式下编译 .mmregs --(enter memory-mapped registers into the symbol table) --进入记忆映射注册进入符号表 .global _main --(identify one or more global(external)symbols) --定义一个或多个全局变量_main: stm(累加器的低端存放到存储器映射寄存器中) #3000h,sp(堆栈指针寄存器) ;堆栈指针的首地址设为#3000h ssbx(状态寄存器位置位) xf ;状态寄存器位置位,灯亮 call (非条件调用,可选择延迟) delay(存储器延时) ;调用delay函数延时 rsbx(状态寄存器复位) xf ;状态寄存器位复位,灯灭 call delay ;调用delay函数延时 b (累加器) _main ;可选择延迟的无条件转移,循环执行 nop(无操作) nop ;delay .5 second delay: ;延迟0.5秒 stm 270fh,ar3 (辅助寄存器3) ;把地址存放到存储器映射寄存器中loop1: stm 0f9h,ar4 (辅助寄存器4) ;把地址存放到存储器映射寄存器中loop2: banz loop2,*ar4- ;AR4不为0时转移,指针地址减一 banz loop1,*ar3- ; 若不为0,ar3减1,共进行10000*250次跳转 ret (可选择延迟的返回 pc=sp++) ;return,返回 nop nop;stm 2 cycles;banz when TRUE 4 cycles; FALSE 2 cycles;0f9h=>249d;270fh=>9999d .end 实验现象XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁;(二)资料存储实验源程序:*File Name:exp02.asm ;get some knowledge of the cmd file;the program is compiled at no autoinitialization mode.mmregs .global _main _main: ;store data stm 1000h,ar1 ;ar1映射到内存1000h位; stm 5000h,ar1 ;address of exterior memory rpt(循环执行下一条指令,计数为短立即数) #07h ;循环执行下一条指令8次 st(存储T寄存器的值) 0aaaah,*ar1+ ;data 存储寄存器的值 ;read data then re-store stm 7h,ar3 ;设置ar3; stm 5000h,ar1 ;address of exterior memory; stm 5008h,ar2 ;address of exterior memory stm 1000h,ar1 ;设置ar1为1000h stm 1008h,ar2 ;设置ar2为1008hloop: ld *ar1+,t ;把单数据存储操作数装入T寄存器中st t,*ar2+ ;存储T寄存器的值 banz loop,*ar3- ;循环7次here: b here ;可选择延迟的无条件转移,循环执行 .end实验目的:;本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的数值,然后读出,并存储到0X1008开始的8个地址空间。
在CCS中可以观察DATA内存空间地址0X1000~0X100F值的变化实验现象: 在CCS的“View”下拉菜单中的Memory窗口中查找C5410各个区段的数据存储器地址,在可以改变的存储器内容的地方,选定地址随意改变其中内容并观察结果;本实验要查看0x1000H~0x100FH单元的数值变化,输入地址0x1000H;查看0x1000H~0x100FH单元的初始值,单击“Run”运行程序,也可以“单步”运行程序;单击“Halt”暂停程序运行三):I/O实验源程序:;File Name :exp03.asm;learn how to operate the I/O ports;get some knowledge of the rts.lib file;in the I/O space 0x0000=>8 switches; 0x0001=>8 LEDs .mmregs .global _main .text_main: stm 3100h,sp ;堆栈指针的首地址设为#3100h stm 1000h,ar1 ;define the address,定义ar1的地址 ;define the address portr 00h,*ar1 ;从端口00h读出开关状态,存入ar1中。
ar1=port(00h) nop nop portw *ar1,01h ;将ar1的内容(开关状态)写入到led灯上(输入到 01h),控制灯的亮灭 nop nop b _main ;寻循环执行 nop nop .end;实验现象;任意调整K0—K7开关,可以观察到对应LP0—LP7灯“亮”或“灭”(四):定时器实验源程序【初始化程序】 .mmregs .global _initial_initial: stm 300h,ar1 ;初始化300h 数据地址,设置ar1的地址 st #00h,*ar1 ;辅助寄存器ar1指向#00h stm 302h,ar1 ;初始化 302h 数据地址,设置ar2的地址 st #00h,*ar1 ;辅助寄存器ar1指向#00h stm 200h,ar1 st #5555h,*ar1 stm 201h,ar1 st #0aaaah,*ar1 stm 202h,ar1 st #400h,*ar1 ssbx 1,11 ;将ST1.INTM置为1,停止所有中断 stm 0ffffh,ifr ;清除所有中断标识 ifr:中断标志寄存器 stm 00h,imr ;将立即数寄存器(imr)置为0,停止所有中断 stm 410h,tcr ;停止计时器 tcr:发送控制寄存器 stm 4e1fh,prd ;将初始时间设为4e1fh stm 420h,tcr ;开始计时器 stm 08h,imr ;允许计时器中断 rsbx 1,11 ;将ST1.INTM置为0,开始所有中断 ret【端口程序】(定义管脚) .mmregs .global _porta .global _portb _porta: stm 304h,ar1 ;设置ar1地址 st 5555h,*ar1 ;辅助寄存器ar1指向5555h portw *ar1,01h ;ar1的值做输出控制小灯亮灭 ret _portb: stm 304h,ar1 ;设置ar1地址 st 0aaaah,*ar1 ;辅助寄存器ar1指向0aaaah portw *ar1,01h ;ar1的值控制亮灭 ret 【向量程序】 .sect ".vectors" .ref _c_int00 ;C程序入口 .ref _timer ;时间中断点 .align 0x80 ; 必须被连结到页边界RESET: ; 重设向量 BD _c_int00 ;到C入口点的分支 STM #200,SP ;堆栈大小为200 SP:堆栈寄存器nmi: RETE ;启动中断并从一个返回 NOP NOP NOP ; 软件中断sint17 .space 4*16sint18 .space 4*16sint19 .space 4*16sint20 .space 4*16sint21 .space 4*16sint22 .space 4*16sint23 .space 4*16sint24 .space 4*16sint25 .space 4*16sint26 .space 4*16sint27 .space 4*16sint28 .space 4*16sint29 .space 4*16sint30 .space 4*16int0: RETE NOP NOP NOPint1: RETE NOP NOP NOPint2: RETE NOP NOP NOPtint: b _timer ;设置实用time中断 NOP NOPrint0: RETE NOP NOP NOPxint0: RETE NOP NOP NOP。












