查看: 7994|回复: 10

[已解决] k64 gpio输出中断不执行

[复制链接]

该用户从未签到

13

主题

61

帖子

0

注册会员

Rank: 2

积分
156
最后登录
2017-6-20
发表于 2017-4-25 16:57:03 | 显示全部楼层 |阅读模式
mcu:mk64fn1M0XX12,使用的是GPIOD,PTD0引脚,配置为输入中断,内部电阻上拉,下降沿触发,使用的是ksdk2.1,参考里面的例程编写的,可中断就是不执行,通过查询读取引脚状态时正常的。不知道是中断哪里没配置好,还是中断服务程序格式不对,代码如下,大家帮忙分析下,

1.png
2.png
3.png

最佳答案

guhongmochou 发表于 2017-4-26 15:12 明白了,谢谢,1U 对的。 所以如果控制API怕错,直接控制寄存器肯定正确。
回复

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24861
最后登录
2025-7-18
发表于 2017-4-25 17:06:37 | 显示全部楼层
进入debug,查下PORTD0的寄存器配置是否正确。
另外,下降沿发生的时候,看看中断标志是否已经置位,如果置位了,可能就是你的中断向量表和中断服务函数的链接问题了。
你先看下寄存器的值吧。
可以直接贴出来给我。
如果还有问题,后面我会在我这边测试下。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2019-3-5 08:47
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    110

    主题

    3404

    帖子

    2

    金牌会员

    Rank: 6Rank: 6

    积分
    9002
    最后登录
    2025-7-17
    发表于 2017-4-26 09:55:52 | 显示全部楼层
    原来用过,参照的是2.0的库,你可以翻看对比一下2.0的例程,我再翻翻原来写的。
    加油哦
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13

    主题

    61

    帖子

    0

    注册会员

    Rank: 2

    积分
    156
    最后登录
    2017-6-20
     楼主| 发表于 2017-4-26 10:07:37 | 显示全部楼层
    小恩GG 发表于 2017-4-25 17:06
    进入debug,查下PORTD0的寄存器配置是否正确。
    另外,下降沿发生的时候,看看中断标志是否已经置位,如果置 ...

    查看了寄存器,中断上拉配置,gpio功能配置是正常的,但是中断使能,标志位都没有置位,发现是void K64_GPIOD_config(void)这个函数没有执行,在此处加断点进入此函数时之间调到这个函数的末尾括号处,但是为什么进入不了这个函数还没有想明白,同样结构的void  K64_GPIOB_config(void)就可以,可查看之前的截图
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13

    主题

    61

    帖子

    0

    注册会员

    Rank: 2

    积分
    156
    最后登录
    2017-6-20
     楼主| 发表于 2017-4-26 10:10:51 | 显示全部楼层
    guhongmochou 发表于 2017-4-26 10:07
    查看了寄存器,中断上拉配置,gpio功能配置是正常的,但是中断使能,标志位都没有置位,发现是void K64_G ...

    55.png 44.png 33.png
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13

    主题

    61

    帖子

    0

    注册会员

    Rank: 2

    积分
    156
    最后登录
    2017-6-20
     楼主| 发表于 2017-4-26 10:34:44 | 显示全部楼层
    jundao721 发表于 2017-4-26 09:55
    原来用过,参照的是2.0的库,你可以翻看对比一下2.0的例程,我再翻翻原来写的。 ...

    谢谢,问题刚刚解决了,是我把定义#if RFID  这个的头文件没有添加到这个文件里面导致的,
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13

    主题

    61

    帖子

    0

    注册会员

    Rank: 2

    积分
    156
    最后登录
    2017-6-20
     楼主| 发表于 2017-4-26 10:54:20 | 显示全部楼层
    本帖最后由 guhongmochou 于 2017-4-26 10:56 编辑
    小恩GG 发表于 2017-4-25 17:06
    进入debug,查下PORTD0的寄存器配置是否正确。
    另外,下降沿发生的时候,看看中断标志是否已经置位,如果置 ...

    谢谢,已解决,但是有几点疑惑,
    1.中断服务程序函数名命名规则是怎么样的尼,现在命名为void PORTD_IRQHander(),那命名其他可以不,

    2.中断服务程序的中断标志位清零为什么要将引脚号左移一位,根据手册,清零不是给PORTx_ISFR对应位写1吗,
    3.假如我有多个中断时,优先级怎么设置,
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24861
    最后登录
    2025-7-18
    发表于 2017-4-26 14:01:46 | 显示全部楼层
    guhongmochou 发表于 2017-4-26 10:54
    谢谢,已解决,但是有几点疑惑,
    1.中断服务程序函数名命名规则是怎么样的尼,现在命名为void PORTD_IRQHa ...

    1. 可以的,关键取决于你.S文件里面的名称, 查看startup_MK64F12.s 文件里面
    如果要改名称,就在这里对应的中断向量表中改。
    2.
    void GPIO_ClearPinsInterruptFlags(GPIO_Type *base, uint32_t mask)
    {
        uint8_t instance;
        PORT_Type *portBase;
        instance = GPIO_GetInstance(base);
        portBase = s_portBases[instance];
        portBase->ISFR = mask;
    }
    mask是你对应的Port口,实际上你写的不对。
    你看官方代码是这样写的
    GPIO_ClearPinsInterruptFlags(BOARD_SW_GPIO, 1U << BOARD_SW_GPIO_PIN);
    BOARD_SW_GPIO=GPIOA
    BOARD_SW_GPIO_PIN=4U
    其实就是清除PTA4. 清除是寄存器PORTA_ISFR的bit4.
    3. 优先级配置是通过NVIC_SetPriority去配置
    __STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
    在core_cm4.h中。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13

    主题

    61

    帖子

    0

    注册会员

    Rank: 2

    积分
    156
    最后登录
    2017-6-20
     楼主| 发表于 2017-4-26 15:12:45 | 显示全部楼层
    小恩GG 发表于 2017-4-26 14:01
    1. 可以的,关键取决于你.S文件里面的名称, 查看startup_MK64F12.s 文件里面
    如果要改名称,就在这里对 ...

    明白了,谢谢,1U << BOARD_SW_GPIO_PIN实际是吧1左移了BOARD_SW_GPIO_PIN,时间长了,忘记了,我理解成把BOARD_SW_GPIO_PIN左移1,所以总感觉不对
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24861
    最后登录
    2025-7-18
    发表于 2017-4-26 15:50:48 | 显示全部楼层

    对的。
    所以如果控制API怕错,直接控制寄存器肯定正确。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-18 20:53 , Processed in 0.118696 second(s), 32 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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