17455|10

8

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

CPU定时器的配置 CpuTimer0Regs.TCR.all = 0x4001; 是什么意思?? [复制链接]

请问为什么要在开启定时器的时候使用这样一条语句呢?(我用的是28335的芯片)
CpuTimer0Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0程序在下面:
================================================================// Configure CPU-Timer 0, 1, and 2 to interrupt every second:
// 100MHz CPU Freq, 1 second Period (in uSeconds)

   ConfigCpuTimer(&CpuTimer0, 100, 1000000);
   ConfigCpuTimer(&CpuTimer1, 100, 1000000);
   ConfigCpuTimer(&CpuTimer2, 100, 1000000);
#endif
// To ensure precise timing, use write-only instructions to write to the entire register. Therefore, if any
// of the configuration bits are changed in ConfigCpuTimer and InitCpuTimers (in DSP2833x_CpuTimers.h), the
// below settings must also be updated.

   CpuTimer0Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0
   CpuTimer1Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0
   CpuTimer2Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0

程序中先前已经对TCR寄存器进行了配置
void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)
{
    Uint32  temp;

    // 初始化定时器周期:
    Timer->CPUFreqInMHz = Freq;                        // 配置频率值
    Timer->PeriodInUSec = Period;                // 配置定时周期值
    temp = (long) (Freq * Period);                // 周期*频率=定时器计数值
    Timer->RegsAddr->PRD.all = temp;        // 定时器计数值配置到定时器周期寄存器中

    // 初始化定时器预定标计数器,即定时器周期为SYSCLKOUT同步:
    Timer->RegsAddr->TPR.all  = 0;
    Timer->RegsAddr->TPRH.all  = 0;

    // 配置定时器的控制寄存器:
    Timer->RegsAddr->TCR.bit.TSS = 1;      // 1:停止, 0:启动/继续
    Timer->RegsAddr->TCR.bit.TRB = 1;      // 1:将周期寄存器PRD中的值重新装入计数器寄存器TIM中
    Timer->RegsAddr->TCR.bit.SOFT = 1;           // FREE=1 SOFT=1 (自由运行模式)
    Timer->RegsAddr->TCR.bit.FREE = 1;     // 定时器自由运行状态,在仿真条件下不会因为断点而停止
    Timer->RegsAddr->TCR.bit.TIE = 1;      // 使能定时器中断  0:禁止 1:使能

    // 清空中断次数计数器:
    Timer->InterruptCount = 0;                        
}

那么问题来了,请问为什么还要在开启定时器的时候使用
CpuTimer0Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0
这样一条语句呢?虽然这条语句确实能够将定时器启动,但是它会影响到
FREE=1 SOFT=1 (自由运行模式)这个状态
还有就是0x4001中的最低位为什么是1呢?手册中0~3位是保留的啊?
不太明白0x4001的原因,还请各位大大指教指教,谢谢大家!

最新回复

寄存器配置很重要的。  详情 回复 发表于 2019-5-31 10:07
点赞 关注(1)
 

回复
举报

8

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
各位大大,请指点一下啊,帖子要沉了.......
 
 

回复

6066

帖子

93

TA的资源

裸片初长成(初级)

板凳
 
你用的是什么型号的器件呢?
刚帮你找人问了问,大家说不知道你用的是什么,没法帮你解决问题!
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

4
 
maylove 发表于 2015-1-8 10:27
你用的是什么型号的器件呢?
刚帮你找人问了问,大家说不知道你用的是什么,没法帮你解决问题!

抱歉啊,我没有说清楚,我用的是28335的芯片.谢谢大大的支持啊.


 
 
 

回复

667

帖子

3

TA的资源

版主

5
 
4001中4是tie位,代表中断使能,可以进入timer中断。再有tss写为0,开启定时器。那个1毫无意义,你写4000一样的。
pad回复不方便,楼主先看看,有问题继续。
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

6
 
谢谢版主的大力支持,谢谢 nemo1991  的解答,我想应该是这样的,非常感谢大家!!
 
 
 

回复

141

帖子

2

TA的资源

纯净的硅(高级)

7
 
遇到同样的问题,来坛子里找,果然找到了,感谢分享。
 
 
 

回复

22

帖子

1

TA的资源

一粒金砂(中级)

8
 
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

9
 
同问,感谢。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
David_Huang 发表于 2015-1-8 09:20
各位大大,请指点一下啊,帖子要沉了.......

楼主你好,我有个更棘手的问题,请问你查定时器寄存器看的是哪一位代表什么功能的文档是什么文档,我找不到这个详细的文档,配置都不知道怎么配了
 
 
 

回复

2618

帖子

0

TA的资源

纯净的硅(高级)

11
 
寄存器配置很重要的。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表