TI中文支持网
TI专业的中文技术问题搜集分享网站

Timer实验中TCR的配置

在CCS3.3自带的Timer例程中,配置TCR寄存器中域值,采用的是如下的方式

#define TIMER_CTRL    TIMER_TCR_RMK(\
                      TIMER_TCR_IDLEEN_DEFAULT,    /* IDLEEN == 0 */ \
                      TIMER_TCR_FUNC_OF(0),        /* FUNC   == 0 */ \
                      TIMER_TCR_TLB_RESET,         /* TLB    == 1,timer loading is enabled*/ \
                      TIMER_TCR_SOFT_BRKPTNOW,     /* SOFT   == 0 */ \
                      TIMER_TCR_FREE_WITHSOFT,     /* FREE   == 0 */ \
                      TIMER_TCR_PWID_OF(0),        /* PWID   == 0 */ \
                      TIMER_TCR_ARB_RESET,         /* ARB    == 1 */ \
                      TIMER_TCR_TSS_START,         /* TSS    == 0 */ \
                      TIMER_TCR_CP_PULSE,          /* CP     == 0 */ \
                      TIMER_TCR_POLAR_LOW,         /* POLAR  == 0 */ \
                      TIMER_TCR_DATOUT_0           /* DATOUT == 0 */ \
)  

/* Create a TIMER configuration structure that can be passed */
/* to TIMER_config CSL function for initialization of Timer  */
/* control registers.                                        */
TIMER_Config timCfg0 = {
   TIMER_CTRL,               /* TCR0 */
//   0x0420,
   0x3400u,                  /* PRD0 */
   0x0000                    /* PRSC */
};

问题:

1、上述为Timer实验中TCR寄存器的配置,上述配置的值代表的应该是初始化Timer时,各寄存器中的状态吧?
2、文档中在说明初始化寄存器时,第一步是确保定时器停止,即TSS=1。那为什么上述TCR寄存器配置中TSS=0?

3、文档中初始化Timer的步骤中:

第一步:TSS=1,TLB=1时,PRD与TDDR中的值被加载到TIM和PSC中

第二步:PSC被写入到TDDR

第三步:TIM装入到PRD

第四步:TSS=0,TLB=0,TIM保持PDR的值,PSC保持TDDR的值

在这个步骤的过程中,第二步、第三步是什么意思,PSC与TIM中的值怎么又被装到了TDDR与PRD里面?

Shine:

请问你用的是哪款器件?

具体配置步骤可以到CSL源代码中去查看。

meng yang2:

回复 Shine:

TMS320VC5509   

TINT表达式中为什么TDDR与PRD分别加1,并且timer period(TDDR+1)(PRD+1)必须大于等于4个周期?

Shine:

1.是的,表示要初始化的值。

Shine:

如果你看一下csl源代码的话,在TIMER_config函数里最后有对TSS位置1,所以和文档不矛盾。

PREG16(((TIMER_PrivateObj*)hTimer)->TcrAddr) = 0x0010;

Shine:

3. 可以看一下timer文档的方框图Figure 1−1. Conceptual Block Diagram of the General-Purpose Timerhttp://www.ti.com/lit/ug/spru595c/spru595c.pdf初始化是配置TDDR, PRD, 启动后,TDDR,PRD的值会load到TIM, PSC, TIM, PSC开始减一计数

meng yang2:

回复 Shine:

 启动后,TDDR,PRD的值会load到TIM, PSC, TIM, PSC开始减一计数。这句话的意思不是每次来一个时钟,TDDR进行减一操作,直到值为0,然后PRD开始减一操作,直到值为0。比如TDDR=5,PRD=4,那这样的话,在每个周期内,来5个时钟之后,TDDR减为0,总共4个周期,总的定时器减为0所需的时钟应该为5*4=20,但是按照上面的式子,应该是(5+1)*(4+1)=30,这是为什么?

Shine:

回复 meng yang2:

前面说过了,加1是因为TDDR, PRD都是从0开始算的。所以您要实现5*4=20的话,TDDR=4, PRD=3.

meng yang2:

回复 Shine:

我的意思是这个公式代表的是定时器发送中断信号的频率。PSC在每个输入时钟周期减1,当其减到0时,TIM减1;当TIM减到0时,定时器向CPU发送一个中断请求。

那这样的话CPU发送一个中断请求所需的时钟个数不就是PSC*TIM吗?比如PSC为5的话,需5个时钟周期减为0;TIM为4的话,需4个时钟减为0?

难道不是在第一个时钟来之后,就开始减1了吗?还是在第一个时钟来之后没有减1?

赞(0)
未经允许不得转载:TI中文支持网 » Timer实验中TCR的配置
分享到: 更多 (0)