- 139
- 0
- 约2.1千字
- 约 3页
- 2017-06-08 发布于重庆
- 举报
DSP实验定时器实验
DSP实验二 定时器实验
一、实验目的
1、熟悉C54X定时器的基本结构;
2、掌握定时器的控制方法;
3、掌握使用定时器中断方式控制程序的流程。
二、实验设备
计算机、CCS2.0版软件,DSP仿真器、实验箱。
三、实验系统相关资源
1、通过对I/0口8001H发送数据来控制LED灯(LED6-LED13)
2、系统时钟频率设定为20MHz。
STM #0xF7FF, CLKMD ; set C5402 DSP clock to 10MHz
3、定时器中断周期 TCLK*(TDDR+1)*(PRD+1)
其中TCLK是时钟周期,在本系统中,TCLK 1/10MHz 100ns,TDDR 和PRD 分别表示定时器初始化时TCR相应位(0-3)和PDR的值。
4、定时器的初始化
1 将TCR中的TSS位置1,停止定时器。
2 加载PRD。
3 重新加载TCR以初始化TDDR。
4 重新启动定时器。TSS位为0,TRB位为l, 以重载定时器周期值,使能定时器。
5、定时器中断的设置
(1)初始化PMST中的中断向量指针,在本实验中设IPTR 001111111B,即中断向量表为3F80H起始的128个存储单元。
(2)intt中断号为19,在中断向量表中对应的位置设置一条跳转指令,转向定时器中断服务程序。
6、中断服务程序的设计
包括保护现场、执行中断服务程序和恢复现场三个步骤,在本实验中,使用C 函数编写定时器中断子程序,保护现场和恢复现场有C函数自动实现。
四、实验步骤
1、用仿真机将计算机与数字信号处理实验箱连接好,并依次打开实验箱电源、仿真机电源,然后运行CCS软件。
2、打开工程文件Exp2.pjt,编译、链接生成可执行代码,装载到目标板,运行程序并记录实验结果。
3、查看工程源程序,分析C语言各函数以及汇编语言子程序之间的调用关系。
4、查看initial.asm的源代码,求出定时器初始化时PDR和TDDR的取值,计算定时器中断周期。
答:由stm 410h,tcr ;stop timer和stm 420h,tcr ;start timer这两行代码可知PDR的取值:TDDR 0
由代码stm 4e1fh,prd ;set prd 4e1fh 知:PDR 19999
所以,定时器中断周期为:
5、查看exp2.c的源代码,分析timer子程序,求出LED灯状态改变的理论时间间隔,并与实验执行结果相比较。
答:理论时间间隔:2ms*1000 2s
实际时间间隔:约2s
6、修改initial.asm的initial子程序,使得LED灯状态改变的时间间隔为原来的2倍。(要求:不改变PRD的值)
答:把stm 420h,tcr ;start timer改为:stm 421h,tcr ;start timer
五、思考题
1、分析该工程各函数和子程序之间的调用关系。
提示:main、timer in exp2.c; initial in initial.asm; porta, portb in port.asm 分析timer在何时被调用。
答:(1)程序开始,进入main,接着调用initial; (2)进入initial.asm;
(3)返回main函数,进入while死循环等待中断发出;
(4)计数溢出引发中断,程序转到main中的interrupt void timer ,当累加中断次数满1000时,判断flag是否为0,若是,则执行porta;若flag不为0,则执行portb。
当执行initail中的ssbx 1,11;set ST1.INTM 1,stop all interrupt时,timer被调用。
2、本实验如何设置,使得定时器中断服务程序入口指向timer子程序,计数器何时被清零。
答:在initial.asm中,由x3FA0, PMST; vectors at 3F80h ,使定时器中断服务程序入口指向timer子程序,由timer函数中的if counter 1000 知,当累加中断次数满1000时,counter被清零。
3、若定时时间不变,要使得定时更为准确,程序应该如何修改?为什么?(提示:修改PRD,TDDR以及题目timer子程序计数值)。
答:把initial.asm中
stm 410h,tcr ;stop timer stm 4e1fh,prd ;set prd 4e1fh
stm 420h,tcr ;start timer
改为:
stm 410h,tcr ;stop timer stm 9c3fh,prd ;set prd 9c3fh
stm 424h,tcr ;start
原创力文档

文档评论(0)