DSP计数器DSP定时器 计数器原理及设计举例Word格式文档下载.docx
- 文档编号:20245649
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:15
- 大小:503.34KB
DSP计数器DSP定时器 计数器原理及设计举例Word格式文档下载.docx
《DSP计数器DSP定时器 计数器原理及设计举例Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《DSP计数器DSP定时器 计数器原理及设计举例Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
②指定定时器预先定标计数器的当前计数值;
③重新加载定时器;
④启动、停止定时器;
⑤定义定时器的分频系数。
TDDR(TimerDivide-DownRatio):
复位时,TDDR各位清零;
PSC(TimerPrescalerCounter):
PSC可被TCR读取,但不能直接写入)
1.3定时器初始化步骤:
(1)将TCR中的TSS位(停止状态位)置1,关闭定时器。
STM#0010H,TCR
(2)加载PRD。
STM#0100H,PRD;
(3)重新加载TCR(使TDDR初始化;
令TSS位为0,以接通CLKOUT;
重新加载位TRB位置1,以使TIM减到0后重新加载PRD),启动定时器。
STM#0C20H,TCR;
Soft=1,Free=1,定时器遇到断点后继续进行
TINT周期=CLKOUT×
(TDDR+1)×
(PRD+1)
2、时钟发生器
时钟发生器:
内部振荡器和锁相环电路PLL。
由内部振荡电路或外部时钟源驱动。
3、中断系统
3.1中断结构
3.1.1中断类型:
硬件中断:
外部硬件中断和内部硬件中断
软件中断:
由程序指令引起,INTR、TRAP或RESET。
软件中断不分优先级,硬件中断有优先级。
还可以分为:
1)可屏蔽中断:
用软件可以屏蔽或开放的中断。
通过对中断屏蔽寄存器(IMR)中的相应位;
状态寄存器(ST1)中的中断允许控制位INTM;
C54x最多可以支持16个用户可屏蔽中断(SINT15~SINT0)
2)非可屏蔽中断:
不能用软件来屏蔽的中断,不受IMR和INTM位的影响。
TMS320C54x对这一类中断总是响应的,并从主程序转移到中断服务程序。
3.1.2中断管理有关的寄存器
1)中断标志寄存器(IFR,InterruptFlagRegister):
16位存储器映像的CPU寄存器;
数据存储器空间,地址为0001H;
当一个中断出现的时候,DSP收到了一个相应的中断请求(中断挂起),IFR中相应的中断标志位为1。
2)中断屏蔽寄存器(IMR,InterruptMaskRegister)
INTM:
可屏蔽中断的总允许控制位,ST1中第11位。
INTM=0时,开放全部可屏蔽中断;
INTM=1时,禁止所有可屏蔽中断。
IMR:
1:
开放对应位的中断
0:
禁止对应位的中断
3.1.3中断向量
中断源服务程序的入口地址:
图5中断向量地址的形成
3.2中断流程
3.2.1有关指令
(1)INTRK:
该指令可启动TMS320C54x的任何中断,INTM=1。
(2)TRAPK:
TRAP与INTR的不同之处是TRAP中断时,不需要设置INTM位。
(3)RESET:
复位操作,INTM=1,PC=0080H。
3.2.2中断的响应
对于软件中断和非可屏蔽中断,CPU立即响应。
如果是可屏蔽中断,只有满足以下条件才能响应:
(1)优先级别最高。
(2)ST1中的INTM位为0,允许可屏蔽中断。
(3)IMR中的相应位为1,允许可屏蔽中断。
3.2.3执行中断服务程序
响应中断之后,CPU将执行下列操作:
(1)将PC值(即返回地址)压入堆栈。
(2)将中断向量的地址装入PC;
将程序引导至中断服务程序ISR。
(3)现场保护,将某些要保护的寄存器和变量压入堆栈。
(4)执行中断服务程序ISR。
(5)恢复现场,以逆序将所保护的寄存器和变量弹出堆栈。
(6)中断返回,从堆栈弹出返回地址加载到PC。
(7)继续执行被中断的程序。
3.3中断过程:
图6中断过程
图7中断操作流程图
3.4汇编源程序如下:
.mmregs
.def_c_int00
STACK.usect"
STACK"
100h
t0_cout.usect"
vars"
1;
计数器
t0_flag.usect“vars”,1;
当前XF输出电平标志。
t0_flag=1,则XF=1;
;
t0_flag=0,则XF=0
TVAL.set1639;
16401061=1ms因中断程序中计数器初值
;
t0_cout=1000,所以定时时间:
1ms1000=1s
TIM0.set0024H;
定时器0寄存器地址
PRD0.set0025H
TCR0.set0026H
.data
TIMES.intTVAL;
定时器时间常数
.text
**********************************
中断矢量表程序段
_c_int00
bstart
nop
NMIrete;
非屏蔽中断
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
INT0rsbxintm;
外中断0中断
rete
nop
INT1rsbxintm;
外中断1中断
INT2rsbxintm;
外中断2中断
rete
nop
TINT:
bdtimer;
定时器中断向量
RINT0:
rete;
串口0接收中断
XINT0:
rete;
串口0发送中断
nop
SINT6.space4*16;
软件中断
SINT7.space4*16;
INT3:
rete;
外中断3中断
nop
HPINT:
主机中断
RINT1:
串口1接收中断
XINT1:
串口1发送中断
******************************************
start:
LD#0,DP
STM#STACK+100h,SP
STM#07FFFh,SWWSR
STM#1020h,PMST
ST#1000,*(t0_cout);
计数器设置为1000(1s)
SSBXINTM;
关全部中断
LD#TIMES,A
READATIM0;
初始化TIM,PRD
READAPRD0
STM#669h,TCR0;
初始化TCR0
STM#8,IMR;
初始化IMR,使能timer0中断
RSBXINTM;
开放全部中断
WAIT:
BWAIT
**************************************
定时器0中断服务子程序
timer:
ADDM#-1,*(t0_cout);
计数器减1
CMPM*(t0_cout),#0;
判断是否为0
BCnext,NTC;
不是0,退出循环
ST#1000,*(t0_cout);
为0,设置计数器,并将XF取反
BITFt0_flag,#1
BCxf_out,NTC
SSBXXF
ST#0,t0_flag
Bnext
xf_out:
RSBXXF
ST#1,t0_flag
next:
RSBXINTM
RETE
.end
5.链接命令文件times.cmd如下:
times.obj
-otimes.out
-mtimes.map
MEMORY
{PAGE0:
RAM1:
origin=1000h,length=500h
PAGE1:
SPRAM1:
origin=0060h,length=20h
SPRAM2:
origin=0100h,length=200h
}
SECTIONS
{
.text:
>
RAM1PAGE0
.data:
RAM1PAGE0
vars:
SPRAM1PAGE1
STACK:
SPRAM2PAGE1
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP计数器 DSP定时器 计数器原理及设计举例 DSP 计数器 定时器 原理 设计 举例