DSP之时钟与定时器之二通用定时器

C55x DSP 片内有两个 2通用 定时器,利用定时器可向 CPU 产生周期性中断或向 DSP 片外的器件提供周期信号。其中TMS320VC5503/5507/5509/5510 DSP提供的是2个20位通用定时器.
1 结构框图
20 位的定时器由两部分组成:一个 4 位的预定标器( PSC )和一个 16 位的主计数器( TIM )。
定时器有两个计数寄存器( PSC TIM )和两个周期寄存器( TDDR PRD ),在定时器初始化过程中,周期寄存器的内容拷 贝到计数寄存器中。
2 工作原理
定时器的工作时钟可以来自 DSP 内部的 CPU 时钟,也可以来自引 TIN/TOUT
定时器控制寄存器( TCR )中的字段 FUNC 可以确 定时钟源和 TIN/TOUT 引脚的功能,这样定时器的工作模式包括 以下几种:
FUNC=00b 时, TIN/TOUT 为高阻态,时钟源是内部时钟( CPU 时钟)。
FUNC=01b 时, TIN/TOUT 为定时器输出,时钟源是内部时钟 CPU 时钟)。
FUNC=10b 时, TIN/TOUT 为通用输出,时钟源是内部时钟( CPU 时钟)。
FUNC=11b 时, TIN/TOUT 为定时器输入,时钟源是外部时钟
在定时器中,预定标器由输入时钟驱动, PSC 在每个输入时钟周 期减 1 ,当其减到 0 时, TIM 1 ,当 TIM 减到 0 ,定时器向 CPU 送一个中断请求( TINT )或向 DMA 控制器发送同步事件。定时 器发送中断信号或同步事件信号的频率可用下式计算:
TINT频率 = 输入时钟频率 / (TDDR + 1) * (PRD+1)
通过设置 TCR 中的自动重装控制位 ARB ,可使定时器工作于自动 重装模式,当 TIM 减到 0 ,重新将周期寄存器( TDDR PRD )的 内容拷贝到计数寄存器( PSC TIM )中,继续定时。
每个定时器包括 4 个寄存器,即定时器预定标寄存器 PRSC 、主计 数寄存器 TIM 、主周期寄存器 PRD 和定时器控制寄存器 TCR
3 使用方法
在定时器的工作过程中,要注意以下因素对定时器的影响。
1 .初始化定时器
通用定时器的初始化过程如下:
1 )停止计时( TSS=1 ),定时器装载使能( TLB=1 ),   并将 周期寄存器( TIM PSC )的内容拷贝到计数寄存器( PRD TDDR );
2 )将预定标计数周期数写入 TDDR
3 )将主计数器周期数装入 PRD
4 )关闭定时器装载( TLB=0 ),启动计时( TSS=0 )。
2 .停止 / 启动定时器
利用时钟控制寄存器中的 TSS 位可以停止或启动定时器。
TSS=1 ,停止计时
TSS=0 ,启动计时
3 DSP 复位
DSP 复位后定时器的寄存器将按照如下规则复位:
l 停止定时( TSS=1 );
预定标计数器值为 0
主计数器值为 FFFFh
定时器不进行自动重装( ARB=0 );
idle 指令不能使定时器进入省电模式;
仿真时遇到软件断点定时器立即停止工作;
TIN/TOUT 为高阻态,时钟源是内部时钟( FUNC=00b )。
4 通用定时器的应用
如果使用芯片支持库函数对通用定时器进行编程,则必须包含头 文件 csl_timer.h
首先定义通用定时器句柄和配置结构:
TIMER_Handle hTimer;
TIMER_Config Config_TIMER = {
0X0310,
/*;  载入  TCR0t:
; IDLE_EN = 0 ( 不允许空闲状态 )
; FUNC = 00b ( 引脚为高阻态 )
; TLB = 0 (TLB  被清除 )
; FREE = 1 ( 遇到断点时时钟不停止 )
; PWID = 00b ( 脉冲延迟一个  CPU  时钟周期 )
; ARB = 1 ( TIM 计数到 0 时重新载入 TIM
; PSC)
; TSS = 1 (停止计数器)
; C/P = 0 ( 引脚输出为脉冲模式 )
; POLAR = 0 ( 引脚信号开始为 )
其他为 0
*/
0X197,
/* prd = 407 */
0X0007
/* prsc = 7 TDDR=7 */
//;  计数器每  3264(408*8)  个时钟周期输出 :
};
接下来打开句柄:
hTimer = TIMER_open(TIMER_DEV0,0);//设置计数器0,中断20K/s
调用定时器配置函数对计数器初始化:
TIMER_config(hTimer,&Config_TIMER);
调用定时器开始函数使定时器开始工作:
TIMER_start(hTimer);
如果在程序中需要暂时停止定时器计数可以调用定时器停止函数:
TIMER_stop(hTimer);
当使能定时器中断时,则当定时中断发生时将运行定时中断服务程序:
interrupt void Timer0_Isr()
{
……
}
5 通用定时器的调试
通用定时器可以产生定时中断,或者作为 DMA 同步事件来同步 DMA 传送,如 果将通用定时器的输出从通用定时器引脚引出,也可以为系统的其他部分 提供定时。
通用定时器的调试步骤如下:
设定通用定时器的时钟源,通用定时器的时钟源可以是 CPU 时钟,也可由 外部信号提供,如果选择外部时钟,则需要将这个信号从 TIN/TOUT 引脚 引入,应当注意此时 TIN/TOUT 引脚将不能够作为定时器输出使用;
正确设置定时器寄存器值,使定时器开始工作;
在定时器中断服务程序中设置断点,看能否进入定时中断,如果定时器的 时钟源是 CPU 时钟,这时也可以将定时器信号从 TIN/TOUT 引脚输出,通 过示波器检测定时器输出是否正常。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
DSP28335是一种广泛使用的数字信号处理器,它被广泛应用在各种领域,如电力电子、驱动控制、通讯等。其中,定时器DSP28335中非常关键的一部分,它可以用来产生各种不同类型的定时信号,在各种应用场景中具有非常重要的作用。 在DSP28335中,定时器主要包括三种类型:基于时钟定时器、基于捕获/比较的定时器和基于PWM的定时器。这些定时器可以用来实现不同的功能,比如产生周期性的信号、捕获和比较外部信号、控制PWM输出等。 其中,基于时钟定时器是最基本的一种,它通过配置定时器时钟源和计数器的初始值来产生定时信号。在DSP28335中,每个定时器都有多个计数模式和计数范围可以选择,可以根据具体需求来配置。 基于捕获/比较的定时器可以用来捕获和比较外部信号,它可以在定时器计数过程中,根据外部信号的到来时间来记录相应的计数值。同时,它也可以将定时器的计数值和设定的比较值进行比较,用来产生各种不同的控制信号。 基于PWM的定时器则可以用来产生PWM输出信号,它可以通过配置计数周期、计数范围和PWM占空比等参数,来产生各种不同类型的PWM信号。 总之,DSP28335中的定时器功能非常强大,可以用来实现各种不同的功能。使用者可以根据具体的应用需求,选择不同类型的定时器,并根据手册提供的配置参数进行配置,来满足不同的控制需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值