查看: 2762|回复: 9

[求助] k10的cmp总是能进入中断 但是检测不出来上升或下降标志?求大神指点

[复制链接]

该用户从未签到

9

主题

30

帖子

0

注册会员

Rank: 2

积分
119
最后登录
1970-1-1
发表于 2014-1-6 09:39:45 | 显示全部楼层 |阅读模式
 
k10的cmp总是能进入中断 但是检测不出来上升或下降标志?求大神指点
我知道答案 目前已有8人回答
回复

使用道具 举报

该用户从未签到

10

主题

459

帖子

0

中级会员

Rank: 3Rank: 3

积分
303
最后登录
2024-10-24
发表于 2014-1-6 09:59:33 | 显示全部楼层

回复:k10的cmp总是能进入中断 但是检测不出来上升或下降标志?求大神指点

CMP终端的的寄存器是CMPx_SCR,如果想要检测到上升或下降标志需要确认两个方面:1. 分别使能相应的中断,CMPx_SCR[IER]/CMPx_SCR[IEF],2.在中断中分别查询上升和下降的标志位CRF和CFF位。
回复 支持 反对

使用道具 举报

该用户从未签到

9

主题

30

帖子

0

注册会员

Rank: 2

积分
119
最后登录
1970-1-1
 楼主| 发表于 2014-1-6 10:20:44 | 显示全部楼层

回复:k10的cmp总是能进入中断 但是检测不出来上升或下降标志?求大神指点

回复第 2 楼 于2014-01-06 09:59:33发表:
CMP终端的的寄存器是CMPx_SCR,如果想要检测到上升或下降标志需要确认两个方面:1. 分别使能相应的中断,CMPx_SCR[IER]/CMPx_SCR[IEF],2.在中断中分别查询上升和下降的标志位CRF和CFF位。 

使能了,可以进入中断,在中断中查询上升和下降的标志位CRF和CFF位,均没有置位,但是确实进入中断了,好奇怪。。
回复 支持 反对

使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2014-1-6 11:17:01 | 显示全部楼层

    回复:k10的cmp总是能进入中断 但是检测不出来上升或下降标志?求大神指点

    推荐你看一下手把手学会官方例程第五篇:Kinetis 100MHz CMP
    www.nxpic.org.cn/bbs/article_1280_557070.html
    这篇文档中有应用到这种读上升沿、下降沿方式。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2014-1-6 11:22:59 | 显示全部楼层

    回复:k10的cmp总是能进入中断 但是检测不出来上升或下降标志?求大神指点

    总是能进中断是指总能正常进入中断,还是比较器输出没变化也进中断?
    你K10具体型号是什么?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9

    主题

    30

    帖子

    0

    注册会员

    Rank: 2

    积分
    119
    最后登录
    1970-1-1
     楼主| 发表于 2014-1-6 14:44:19 | 显示全部楼层

    回复:k10的cmp总是能进入中断 但是检测不出来上升或下降标志?求大神指点

    回复第 5 楼 于2014-01-06 11:22:59发表:
    总是能进中断是指总能正常进入中断,还是比较器输出没变化也进中断?
    你K10具体型号是什么?
     

    MK10DN512VLL10 ,除了检测上升下降标志外,如何判断比较器输出的变化呢
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10

    主题

    459

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    303
    最后登录
    2024-10-24
    发表于 2014-1-6 14:56:34 | 显示全部楼层

    回复:k10的cmp总是能进入中断 但是检测不出来上升或下降标志?求大神指点

    不是有一个COUT位吗,在中断里面读取判断一下!另外对于你提到的标志位CRF和CFF位没有被置位,你可以在调试时查看一下寄存器!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9

    主题

    30

    帖子

    0

    注册会员

    Rank: 2

    积分
    119
    最后登录
    1970-1-1
     楼主| 发表于 2014-1-6 16:15:24 | 显示全部楼层

    回复:k10的cmp总是能进入中断 但是检测不出来上升或下降标志?求大神指点

    回复第 7 楼 于2014-01-06 14:56:34发表:
    不是有一个COUT位吗,在中断里面读取判断一下!另外对于你提到的标志位CRF和CFF位没有被置位,你可以在调试时查看一调
    调试时,进入中断程序后,标志位CRF和CFF位没有被置位
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2014-1-8 12:56:50 | 显示全部楼层

    回复:k10的cmp总是能进入中断 但是检测不出来上升或下降标志?求大神指点

    回复第 8 楼 于2014-01-06 16:15:24发表:
    回复第 7 楼 于2014-01-06 14:56:34发表:
    不是有一个COUT位吗,在中断里面读取判断一下!另外对于你提到的标志位CRF和CFF位没有被置位,你可以在调试时查看一调
    调试时,进入中断程序后,标志位CRF和CFF位没有被置位
     

    问题解决了吗?
    之前告诉你的那个例程就是Kinetis 100MHz的,你稍微改下就可以放到K10 100MHz芯片上使用。
    而且那个例程的中断服务函数就是判断你提到的这两标志,作出相应操作的。
    void cmp0_isr(void)
    {
        //If rising edge
        if ((CMP0_SCR & CMP_SCR_CFR_MASK)==CMP_SCR_CFR_MASK)
        {
            CMP0_SCR |= CMP_SCR_CFR_MASK;  // Clear the flag
            printf("Rising edge on HSCMP0\n");
        }
       
        //If falling edge
        if ((CMP0_SCR & CMP_SCR_CFF_MASK)==CMP_SCR_CFF_MASK)
        {
            CMP0_SCR |= CMP_SCR_CFF_MASK;  // Clear the flag
            printf("Falling edge on HSCMP0\n");
        }
    }
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2014-1-8 13:03:38 | 显示全部楼层

    回复:k10的cmp总是能进入中断 但是检测不出来上升或下降标志?求大神指点

    这个是CMP初始化函数
    static void hscmp_init(void)
    {
        //Enable HSCMP module clock
        SIM_SCGC4 |= (SIM_SCGC4_CMP_MASK );

        //Set up HSCMP0 in NVIC. ISR put into vector table in isr.h file
        enable_irq(INT_CMP0-16);   //CMP0 Vector is 39. IRQ# is 39-16=23

        // Configure CMP.
        CMP_CR0_REG(CMP0_BASE_PTR)   = 0x00;  // Filter and digital hysteresis disabled
        CMP_CR1_REG(CMP0_BASE_PTR)   = 0x15;  // Continuous mode, high-speed compare, unfiltered output, output pin disabled
        CMP_FPR_REG(CMP0_BASE_PTR)   = 0x00;  // Filter disabled
        CMP_SCR_REG(CMP0_BASE_PTR)   = 0x1E;  // Enable rising and falling edge interrupts, clear flags
        CMP_DACCR_REG(CMP0_BASE_PTR) = 0xF0;  // 6-bit reference DAC enabled, output set to vdd/64*(48+1)= 2.53v, (Vin selected is vin2=Vdd)
        CMP_MUXCR_REG(CMP0_BASE_PTR) = 0x0F;  // P-input as external channel 1. M-input as 6b DAC = 2.53v, it is adjustable with CMP_DACCR_REG
        CMP_CR1_REG(CMP0_BASE_PTR)  |= CMP_CR1_OPE_MASK; // Enable output pin for HSCMP0.
    }
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-18 18:28 , Processed in 0.104310 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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