智能车制作

标题: K60的lptmr低功耗定时计数器为什么读取不了LPTMR0_CNR计数寄存器的值? [打印本页]

作者: Tancw    时间: 2013-12-19 14:18
标题: K60的lptmr低功耗定时计数器为什么读取不了LPTMR0_CNR计数寄存器的值?
我用的是野火的库,
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?
求大神指导!~
作者: 无声的音乐    时间: 2014-2-9 15:46
求同,我的也全是零。。
作者: yandld    时间: 2014-2-15 10:57
试试我的库 :
http://www.znczz.com/thread-202246-1-1.html
作者: fewhy123    时间: 2015-1-26 13:26
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;     在这里加上这句或许可以
    }


作者: 鞋托以外的世界    时间: 2015-1-29 09:40
fewhy123 发表于 2015-1-26 13:26
while(1)
    {
         if(pit_flag > 0)

你说的给CNR值才能读取对吧,但是在底层库内不是要修改CNR的状态为可读可写吗?这个怎么设置啊?
作者: 灰帽子理工男    时间: 2015-4-13 21:26
楼主问题解决了吗?我的也全是0
作者: 根瘤君    时间: 2015-4-24 20:41
__I  uint32_t CNR;
改为:
__IO  uint32_t CNR;
作者: 灰帽子理工男    时间: 2015-4-27 22:20
根瘤君 发表于 2015-4-24 20:41
__I  uint32_t CNR;
改为:
__IO  uint32_t CNR;

在哪个文件呢?

作者: 根瘤君    时间: 2015-5-11 16:48
灰帽子理工男 发表于 2015-4-27 22:20
在哪个文件呢?

lptmr.h 文件
作者: liming77    时间: 2016-3-1 13:33
printf("1秒钟LPT读取脉冲:%d个\n", LPT_INT_count * INT_COUNT +  count); //打印计数值
为什么1秒钟LPT读取脉冲数量是LPT_INT_count * INT_COUNT +  count???
作者: 林hua1234    时间: 2017-2-8 11:01
顶。。。。




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2