智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 7816|回复: 10
打印 上一主题 下一主题

K60的lptmr低功耗定时计数器为什么读取不了LPTMR0_CNR计数寄存器的值?

[复制链接]

18

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1240
威望
566
贡献
288
兑换币
335
注册时间
2013-8-4
在线时间
193 小时
毕业学校
桂林理工大学
跳转到指定楼层
1#
发表于 2013-12-19 14:18:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是野火的库,
void main(void)
{
    uint16 count;
   
    DisableInterrupts;                                   //禁止总中断
   
    FTM_PWM_init(FTM1,CH0,300,50);
  
    lptmr_counter_init(LPT0_ALT1, INT_COUNT, 2, LPT_Rising); //初始化脉冲计数器,用LPT0_ALT2,即PTA19输入,每隔INT_COUNT产生中断,延时2个时钟滤波,上升沿触发

   
    pit_init_ms(PIT0,1000);
   
    EnableInterrupts;
   
    while(1)
    {
         if(pit_flag > 0)
         {
              printf("CNR=%d   ",LPTMR0_CNR);      //这里读到的都是 0 ,为什么???
           
              count = LPTMR0_CNR;                         //保存脉冲计数器计算值, LPTMR0_CNR是计数寄存器
            
              printf("count=%d\n",count);
              lptmr_counter_clean();                                  //清空脉冲计数器计算值(马上清空,这样才能保证计数值准确)
              printf("LPT_INT_count=%d, INT_COUNT=%d, count=%d\n",LPT_INT_count,INT_COUNT,count);
              printf("1秒钟LPT读取脉冲:%d个\n", LPT_INT_count * INT_COUNT +  count); //打印计数值
              LPT_INT_count   =   0;                                  //清空LPT中断次数
              pit_flag = 0;
         }
    }
      
}


下面是中断程序
void  LPT_Handler(void)
{
    LPTMR0_CSR |= LPTMR_CSR_TCF_MASK;   //清除LPTMR比较标志
    LPT_INT_count++;                    //中断溢出加1
}

void PIT0_IRQHandler()
{
    pit_flag = 1;               //标记进入PIT中断
    PIT_Flag_Clear(PIT0);       //清中断标志位
}



为什么每次读取LPTMR0_CNR计数寄存器的值都是0?
求大神指导!~

0

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
53
威望
27
贡献
16
兑换币
15
注册时间
2015-1-25
在线时间
5 小时
推荐
发表于 2015-1-26 13:26:54 | 只看该作者
while(1)
    {
         if(pit_flag > 0)
         {
              printf("CNR=%d   ",LPTMR0_CNR);      //这里读到的都是 0 ,为什么???
           
              count = LPTMR0_CNR;                         //保存脉冲计数器计算值, LPTMR0_CNR是计数寄存器
            
              printf("count=%d\n",count);
              lptmr_counter_clean();                                  //清空脉冲计数器计算值(马上清空,这样才能保证计数值准确)
              printf("LPT_INT_count=%d, INT_COUNT=%d, count=%d\n",LPT_INT_count,INT_COUNT,count);
              printf("1秒钟LPT读取脉冲:%d个\n", LPT_INT_count * INT_COUNT +  count); //打印计数值
              LPT_INT_count   =   0;                                  //清空LPT中断次数
              pit_flag = 0;
         }         LPTMR0_CNR=0;     在这里加上这句或许可以
    }

回复 支持 1 反对 0

使用道具 举报

14

主题

84

帖子

0

精华

高级会员

Rank: 4

积分
798
威望
495
贡献
127
兑换币
294
注册时间
2013-9-18
在线时间
88 小时
毕业学校
哈尔滨工业大学
2#
发表于 2014-2-9 15:46:54 | 只看该作者
求同,我的也全是零。。
回复 支持 反对

使用道具 举报

68

主题

439

帖子

2

精华

版主

Rank: 9Rank: 9Rank: 9

积分
4618
QQ
威望
2342
贡献
1290
兑换币
1175
注册时间
2009-12-24
在线时间
493 小时
3#
发表于 2014-2-15 10:57:57 | 只看该作者
回复 支持 反对

使用道具 举报

3

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
417
QQ
威望
222
贡献
113
兑换币
131
注册时间
2014-10-29
在线时间
41 小时
5#
发表于 2015-1-29 09:40:26 | 只看该作者
fewhy123 发表于 2015-1-26 13:26
while(1)
    {
         if(pit_flag > 0)

你说的给CNR值才能读取对吧,但是在底层库内不是要修改CNR的状态为可读可写吗?这个怎么设置啊?
回复 支持 反对

使用道具 举报

22

主题

77

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1261
威望
556
贡献
299
兑换币
320
注册时间
2013-11-5
在线时间
203 小时
6#
发表于 2015-4-13 21:26:08 | 只看该作者
楼主问题解决了吗?我的也全是0
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
威望
154
贡献
76
兑换币
91
注册时间
2015-2-22
在线时间
24 小时
毕业学校
a
7#
发表于 2015-4-24 20:41:20 | 只看该作者
__I  uint32_t CNR;
改为:
__IO  uint32_t CNR;
回复 支持 反对

使用道具 举报

22

主题

77

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1261
威望
556
贡献
299
兑换币
320
注册时间
2013-11-5
在线时间
203 小时
8#
发表于 2015-4-27 22:20:32 | 只看该作者
根瘤君 发表于 2015-4-24 20:41
__I  uint32_t CNR;
改为:
__IO  uint32_t CNR;

在哪个文件呢?
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
威望
154
贡献
76
兑换币
91
注册时间
2015-2-22
在线时间
24 小时
毕业学校
a
9#
发表于 2015-5-11 16:48:32 | 只看该作者

lptmr.h 文件
回复 支持 反对

使用道具 举报

13

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
威望
259
贡献
127
兑换币
140
注册时间
2015-8-12
在线时间
38 小时
毕业学校
滁大
10#
发表于 2016-3-1 13:33:20 | 只看该作者
printf("1秒钟LPT读取脉冲:%d个\n", LPT_INT_count * INT_COUNT +  count); //打印计数值
为什么1秒钟LPT读取脉冲数量是LPT_INT_count * INT_COUNT +  count???
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-5 18:40 , Processed in 0.492979 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表