查看: 1828|回复: 4

[求助] LPTMR模块为什读取到的数值是0呢?

[复制链接]

该用户从未签到

1

主题

2

帖子

0

新手上路

Rank: 1

积分
11
最后登录
2015-4-14
发表于 2015-4-14 11:14:02 | 显示全部楼层 |阅读模式
我用的是MK60DN512VLQ10


void lptmr_pulse_init(LPT0_ALTn altn, uint16 count, LPT_CFG cfg)
{

#if  defined(MK60F15)
    OSC0_CR |= OSC_CR_ERCLKEN_MASK;                              //使能 OSCERCLK
#endif

    // 开启模块时钟
    SIM_SCGC5 |= SIM_SCGC5_LPTIMER_MASK;                        //使能LPT模块时钟

    //设置输入管脚
    if(altn == LPT0_ALT1)
    {
        port_init(PTA19, ALT6 );            //在PTA19上使用 ALT6
    }
    else if(altn == LPT0_ALT2)
    {
        port_init(PTC5, ALT4 );             //在PTC5上使用 ALT4
    }
    else                                    //不可能发生事件
    {
        ASSERT((altn == LPT0_ALT1 ) || (altn == LPT0_ALT2 ));   //设置管脚有误?
    }

    // 清状态寄存器
    LPTMR0_CSR = 0x00;                                          //先关了LPT,这样才能设置时钟分频,清空计数值等

#if defined(MK60DZ10)
    //选择时钟源
    LPTMR0_PSR  =   ( 0
                      | LPTMR_PSR_PCS(1)                  //选择时钟源: 0 为 MCGIRCLK ,1为 LPO(1KHz) ,2为 ERCLK32K ,3为 OSCERCLK
                      | LPTMR_PSR_PBYP_MASK               //旁路 预分频/干扰滤波器 ,即不用 预分频/干扰滤波器(注释了表示使用预分频/干扰滤波器)
                      //| LPTMR_PSR_PRESCALE(1)           //预分频值 = 2^(n+1) ,n = 0~ 0xF
                    );
#elif defined(MK60F15)
    //选择时钟源
    LPTMR0_PSR  =   ( 0
                      | LPTMR_PSR_PCS(3)          //选择时钟源: 0 为 MCGIRCLK ,1为 LPO(1KHz) ,2为 ERCLK32K ,3为 OSCERCLK
                      //| LPTMR_PSR_PBYP_MASK     //旁路 预分频/干扰滤波器 ,即不用 预分频/干扰滤波器(注释了表示使用预分频/干扰滤波器)
                      | LPTMR_PSR_PRESCALE(4)     //预分频值 = 2^(n+1) ,n = 0~ 0xF
                    );
#endif

    // 设置累加计数值
    LPTMR0_CMR  =   LPTMR_CMR_COMPARE(count);                   //设置比较值

    // 管脚设置、使能中断
    LPTMR0_CSR  =  (0
                    | LPTMR_CSR_TPS(altn)       // 选择输入管脚 选择
                    | LPTMR_CSR_TMS_MASK        // 选择脉冲计数 (注释了表示时间计数模式)
                    | ( cfg == LPT_Falling ?  LPTMR_CSR_TPP_MASK :   0  )  //脉冲计数器触发方式选择:0为高电平有效,上升沿加1
                    | LPTMR_CSR_TEN_MASK        //使能LPT(注释了表示禁用)
                    | LPTMR_CSR_TIE_MASK        //中断使能
                    //| LPTMR_CSR_TFC_MASK      //0:计数值等于比较值就复位;1:溢出复位(注释表示0)
                   );
    //LPTMR0_CNR = 0;
}
上面的这个是模块的初始化函数。

uint16 lptmr_pulse_get(void)
{
    uint16 data;
    LPTMR0_CNR = 0x00;

    if(LPTMR0_CSR & LPTMR_CSR_TCF_MASK)     //已经溢出了
    {

        data = ~0;                          //返回 0xffffffff 表示错误
    }
    else
    {

        data = LPTMR0_CNR;
    }
    return data;
}
这一个是读取LPTMR0_CNR的数值。我在读取之前,看技术手册上说读取前要先赋值,所以我给LPTMR0_CNR赋值为0x00。再读取。但是依旧没有用呢。


请问如何解决呢??

我知道答案 目前已有4人回答
回复

使用道具 举报

该用户从未签到

1

主题

2

帖子

0

新手上路

Rank: 1

积分
11
最后登录
2015-4-14
 楼主| 发表于 2015-4-14 12:54:40 | 显示全部楼层
求大神指导
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2015-4-14 14:19:06 | 显示全部楼层
    手册上没写的赋值啊?直接读取就可以了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
    发表于 2015-4-14 19:25:34 | 显示全部楼层
    手册上写的有的,我用的KL03
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    124

    主题

    3600

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5781
    最后登录
    1970-1-1
    发表于 2015-4-15 09:48:53 | 显示全部楼层
    我大致看了一下你上头的代码,非发现明显的错误,我建议你可以参考与一下TWR-K60D100M开发板的代码包中的LPTMR例程
    cache.freescale.com/files/microcontrollers/software/app_software/code_examples/KINETIS512_V2_SC.zip
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-23 04:51 , Processed in 0.093628 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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