查看: 1636|回复: 6

[求助] KL25的捕捉问题

[复制链接]
  • TA的每日心情

    2018-3-21 13:20
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    16

    主题

    124

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    249
    最后登录
    2023-10-24
    发表于 2016-1-21 14:06:41 | 显示全部楼层 |阅读模式
    本帖最后由 zico1998 于 2016-1-21 14:32 编辑

    我:
    TPM0_CH0:____--_--_--_..2500..........--_--__________...
    TPM0_CH1:_____--_--_--_..2500........_--_--_________...
    TPM2_CH0:___--_____________________--_..2S..__--_

    就是TPM2_CH0收到外部一个脉冲,然后TPM0_CH0、TPM1_CH1依次收到2000外部个脉冲(总时间大约2ms*2000,大约4S),然后TPM2_CH2收到一个脉冲,然后都低。
    2S后重复。

    我遇到的问题是:我TPM2输入捕捉中断(应该是4S一个、2S一个),却是源源不断的收到中断信号,1S大概几十个。。我要是改用主程序不断扫描端口电平,就正常了,大约4S、2S收到一个,请问我输入捕捉中断是哪里的问题呢?

    //TPM2初始化
    //period为周期(1ms为1000)
    void tpm2_init(uint32 period)
    {
        irq_disable(TPM2_NUM);  //禁止中断     
    //端口定义     
        SIM_SCGC5 |=SIM_SCGC5_PORTA_MASK; //打开PTA时钟
        //PTA1/PZ定义位输入捕捉
        PORTA_PCR1 =PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x03); //PZ  PTA1/TPM2_CH0
        SIM_SOPT2 |= SIM_SOPT2_TPMSRC(1);
        SIM_SOPT2 |=SIM_SOPT2_PLLFLLSEL_MASK;
        //例程给出0 MCGPLLCLK时钟;1 固定二分频的MCGFLLCLK时钟。UART0为1
        SIM_SCGC6 |=SIM_SCGC6_TPM2_MASK;
        period=(uint32)(period*(48000/1000));

        TPM2_MOD=period;
        TPM2_SC=0;//&=~TPM_SC_CPWMS_MASK;
        TPM2_SC=TPM_SC_TOIE_MASK | TPM_SC_CMOD(1);//使能TPM0溢出中断
        TPM2_C0SC=0;
        TPM2_C0SC=TPM_CnSC_ELSB_MASK | TPM_CnSC_CHIE_MASK; //CH0下降沿触发捕捉(之后改上下沿都触发)
        TPM2_C0V=0;   //无效值  

    }

    //TPM2中断,脉冲捕捉
    void tpm2_isr(void)
    {
        irq_disable(TPM2_NUM);
        if(TPM_SC_TOF_MASK==(TPM2_SC & TPM_SC_TOF_MASK))
        {
                TPM2_SC |=TPM_SC_TOF_MASK; //溢出标志清除
        }
        if(TPM_CnSC_CHF_MASK==(TPM2_C0SC & TPM_CnSC_CHF_MASK))
        {   
            m_uart0.status=1;  //通知串口发送信号
            TPM2_C0SC|=TPM_CnSC_CHF_MASK;//清除CH0中断标志   
        }
        irq_enable(TPM2_NUM);
    }

    我知道答案 目前已有6人回答
    我今天最想说
    回复

    使用道具 举报

    该用户从未签到

    124

    主题

    3600

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5781
    最后登录
    1970-1-1
    发表于 2016-1-21 14:27:20 | 显示全部楼层
    换句话说你遇到的问题就是本来是2或4s才会捕捉到脉冲的,但是发现中断触发变频繁了.
    我的建议是你用示波器检查一下输入的脉冲是否正常,是否有什么杂波之类的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-3-21 13:20
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    16

    主题

    124

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    249
    最后登录
    2023-10-24
     楼主| 发表于 2016-1-21 14:30:37 | 显示全部楼层
    FSL_TICS_ZP 发表于 2016-1-21 14:27
    换句话说你遇到的问题就是本来是2或4s才会捕捉到脉冲的,但是发现中断触发变频繁了.
    我的建议是你用示波器 ...

    谢谢。我看看
    我今天最想说
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-3-21 13:20
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    16

    主题

    124

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    249
    最后登录
    2023-10-24
     楼主| 发表于 2016-1-21 14:32:56 | 显示全部楼层
    FSL_TICS_ZP 发表于 2016-1-21 14:27
    换句话说你遇到的问题就是本来是2或4s才会捕捉到脉冲的,但是发现中断触发变频繁了.
    我的建议是你用示波器 ...

    对,是您说的意思,触发变频繁,而不是我预期的
    我今天最想说
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-3-21 13:20
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    16

    主题

    124

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    249
    最后登录
    2023-10-24
     楼主| 发表于 2016-1-22 16:05:41 | 显示全部楼层
    本帖最后由 zico1998 于 2016-1-22 16:10 编辑
    FSL_TICS_ZP 发表于 2016-1-21 14:27
    换句话说你遇到的问题就是本来是2或4s才会捕捉到脉冲的,但是发现中断触发变频繁了.
    我的建议是你用示波器 ...

    不行啊,还是触发频繁。
    嗯,如果我用主程序里去扫描、读端口的方式,就对了。
    用TPM时钟频繁触发。
    会不会是和别的模块时钟冲突了?我还用UART串口
    ----
    UART0
        SIM_SOPT2 |= SIM_SOPT2_UART0SRC(0x01);  
        SIM_SOPT2 |= SIM_SOPT2_PLLFLLSEL_MASK;   

    TPM2
        SIM_SOPT2 |=SIM_SOPT2_TPMSRC(1);
        SIM_SOPT2 |=SIM_SOPT2_PLLFLLSEL_MASK;

    我今天最想说
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2016-1-25 09:27:40 | 显示全部楼层
    你根据TPM2的时钟和MOD值算算多久溢出? 估计经常进溢出中断了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    124

    主题

    3600

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5781
    最后登录
    1970-1-1
    发表于 2016-1-25 10:18:51 | 显示全部楼层
    zico1998 发表于 2016-1-22 16:05
    不行啊,还是触发频繁。
    嗯,如果我用主程序里去扫描、读端口的方式,就对了。
    用TPM时钟频繁触发。

    两方面:一是确认波形是否有有噪声而造成,二是确认是否想Robin所指出的那样,不是边沿触发引起的,而可能是溢出中断引起的
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-23 04:50 , Processed in 0.099627 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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