DSP之时钟与定时器之一时钟发生器

DSP之时钟与定时器之一时钟发生器时钟与定时器包括时钟产生器 通用定时器 实时时钟以及看门狗定时器等

大家好,欢迎来到IT知识分享网。

时钟与定时器包括
时钟产生器、通用定时器、实时时钟以及看门狗定时器等。
    时钟产生器的功能是产生CPU的工作时钟,并提供CLKOUT时钟输出;通用定时器、实时时钟及看门狗定时器的功能是通过计数器为系统提供定时时钟和年、月、日、时、分、秒等时钟信号,以及监控系统正常运行的看门狗时钟,并能发出相应中断。

    
1 . 时钟发生器
     
1.1 时钟模式寄存器 CLKMD
           时钟发生器可以从CLKIN引脚接收输入的时钟,将其变换为CPU及其外设所需要的工作时钟,工作时钟经过分频也能够通过引脚CLKOUT输出,供其他器件使用,如图1所示。时钟发生器内有一个数字锁相环(Digital Phase Lock LoopDPLL)和一个时钟模式寄存器(CLKMD)。时钟模式寄存器用于控制时钟发生器的工作状态

DSP之时钟与定时器之一时钟发生器

在时钟模式寄存器中的
PLL ENABLE
位控制
PLL
的两种工作模式


1
.旁路模式(
BYPASS
如果
PLL ENABLE=0

PLL
工作于旁路模式,
PLL
对输入时钟信号进行分频,分频值由
BYPASS DIV
确定:       

        如果
BYPASS DIV=00
,输出时钟信号的频率与输入信号的频率
相同,即一分频。
        如果
BYPASS DIV=01
,输出时钟信号的频率是输入信号频率一
半,即二分频。
        如果
BYPASS DIV=1x
,输出时钟信号的频率是输入信号频率
1/4
,即四分频。
2
.锁定模式(
LOCK
如果
PLL ENABLE=1

PLL
工作于锁定模式,输出的时钟频率由
下面公式确定:
         输入时钟即可乘以或者除以一个系数来获得期望的输出频率,并且输出时钟相位与输入信号锁定。
 
为了降低功耗,时钟发生器也有Idle模式,可以通过关闭CLKGEN Idle模块,使时钟发生器工作在Idle模式。
1.2 CLKOUT引脚
CPU
时钟也可以通过一个时钟分频器提供
CLKOUT
信号,
CLKOUT
的频率由系统寄存器(
SYSR
)中的
CLKDIV
确定:

如果
CLKDIV=000b

 CLKOUT
的频率等于
CPU
时钟的频率。
如果
CLKDIV=001b

 CLKOUT
的频率等于
CPU
时钟的频率的
1/2
如果
CLKDIV=010b

 CLKOUT
的频率等于
CPU
时钟的频率的
1/3
如果
CLKDIV=011b

 CLKOUT
的频率等于
CPU
时钟的频率的
1/4
如果
CLKDIV=100b

 CLKOUT
的频率等于
CPU
时钟的频率的
1/5
如果
CLKDIV=101b

 CLKOUT
的频率等于
CPU
时钟的频率的
1/6
如果
CLKDIV=110b

 CLKOUT
的频率等于
CPU
时钟的频率的
1/7
如果
CLKDIV=111b

 CLKOUT
的频率等于
CPU
时钟的频率的
1/8

 
1.3 使用方法:

通过对时钟模式寄存器的操作,可以根据需要设定时钟发生器的
工作模式和输出频率,在设置过程中除了工作模式、分频值和倍
频值以外,还要注意其他因素对
PLL
的影响。
1
.省电(
IDLE
为了节省功耗,可以使时钟发生器处于省电状态,当时钟发生器退出省电状态时,
PLL
自动切换到旁路模式,进行跟踪锁定,锁定后返回
到锁定模式,
时钟模式寄存器中与省电有关的位是
IAI

2

DSP
复位

        

DSP
复位期间和复位之后,
PLL
工作于旁路模式,输出的
时钟频率由
CLKMD
引脚上的电平确定。

如果
CLKMD
引脚为低电平,输出频率等于输入频率;
如果
CLKMD
引脚为高电平,输出频率等于输入频率的一半。

3
.失锁

        
锁相环对输入时钟跟踪锁定之后,由于其他原因使其输出时
钟发生偏移,即失锁。出现失锁现象后,
PLL
的动作由时钟模式
寄存器中的
IOB
确定
 
调用时钟发生器库函数首先要在头文件中包含
csl_pll.h
文件,接下来介绍利用库
函数配置时钟发生器的方法。
        
首先要声明
PLL
配置结构,具体声明如下:
PLL_Config Config_PLL = {
1, /*iai 
休眠后重新锁相
 */
1, /*iob 
失锁后进入旁路模式并重新锁相
 */
6, /*pllmult   CLKIN * pllmult = DSP
主时钟
*/
0   /*div   CLKOUT= DSP
主时钟
/

div+1

 */
};
        
之后运行配置函数:
PLL_config

&Config_PLL

;
        
也可以通过函数设置
PLL
频率:
       PLL_setFreq

6, 1

;
         
通过
PLL_setFreq
函数可以复位
PLL
锁相环,并改变倍频和分频数从而得
到所需的频率。
 
1.4 时钟发生器的调试
时钟发生器所产生的
DSP
工作时钟,如果时钟产生器没有正常工作,
DSP
将无
法正常运行,而调试
DSP
也是不可能的。
        
调试时钟发生器应遵循以下步骤:
      

1
)检查
DSP
的时钟输入引脚
CLKIN
、时钟输出引脚
CLKOUT
和时钟模式
引脚
CLKMD
连接是否正确,正常情况下
CLKIN
应接时钟源,而
CLKMD
应拉
高或降低,
CLKOUT
应是信号输出引脚。
 
     

2
)系统加电后测量
CLKIN
引脚时钟输入是否正常,信号的高低电平及占
空比是否满足需要。
 
     

3
)在没有进行软件设置的情况下,
DSP
在复位后
CLKOUT
的输出直接受
CLKMD
控制,当
CLKMD
为高,
CLKOUT
的输出频率将等于
CLKIN
的频率,
CLKMD
为低,

CLKOUT
输出将等于
CLKIN
的频率的
1/2
 
     

4
)如果以上步骤运行正常,则利用软件设置
CLKMD
寄存器,使时钟产
生器工作于
PLL
锁相环模式下,此


C55x DSP
片内有两个
2通用
定时器,利用定时器可向
CPU
产生周期性中断或向
DSP
片外的器件提供周期信号。其中TMS320VC5503/5507/5509/5510 DSP提供的是2个20位通用定时器.
1 结构框图
20
位的定时器由两部分组成:一个
4
位的预定标器(
PSC
)和一个
16
位的主计数器(
TIM
)。
定时器有两个计数寄存器(
PSC

TIM
)和两个周期寄存器(
TDDR

PRD
),在定时器初始化过程中,周期寄存器的内容拷
贝到计数寄存器中。

DSP之时钟与定时器之一时钟发生器
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
引脚输出,通
过示波器检测定时器输出是否正常。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/153297.html

(0)
上一篇 2025-03-04 19:15
下一篇 2025-03-04 19:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信