查看: 9782|回复: 33

[已解决] 【FRDM-K64F】PTA4按键中断不进入NMI中断(MDK5.14寄存器)已解决

[复制链接]
  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
    发表于 2015-12-10 16:47:28 | 显示全部楼层 |阅读模式
    本帖最后由 JackieLaura 于 2015-12-15 13:50 编辑

           K64F板子上有两个独立按键,本想用PTA4作为中断按键,但是试了几种方法都是直接进入NMI中断。       求PTA4按键中断不进入NMI中断,而进入普通中断的解决办法(相似的代码用在PTC6上面没有任何问题)。
           程序效果是:RGB灯中的红灯PTB22是1Hz频率闪烁,蓝灯PTB21受按键中断亮灭

    led初始化代码如下:
    1. #include "../inc/led.h"

    2. int
    3.         led_init(void)
    4. {
    5.         SIM->SCGC5 |= 0x0400;
    6.         
    7.         PORTB->PCR[22] |= 0x00000100;

    8.         PTB->PDDR |= 1 << 22;
    9.         
    10.         PORTB->PCR[21] |= 0x00000100;

    11.         PTB->PDDR |= 1 << 21;
    12.         PTB->PSOR |= 1 << 21;
    13.         
    14.         return 0;
    15. }
    复制代码

    PTC6按键的中断很正常。代码如下
    1. int
    2.         key_init(void)
    3. {
    4.         SIM->SCGC5 |= 0x0800;
    5.         
    6.         PORTC->PCR[6] |= 0x000a0100;
    7.         
    8.         PTC->PDDR &= ~(1 << 6);               

    9.         NVIC_EnableIRQ(PORTC_IRQn);
    10.         
    11.         return 0;
    12. }

    13. void
    14.         PORTC_IRQHandler(void)
    15. {
    16.         if(PORTC->PCR[6] & (1 << 24))
    17.         {
    18.                 PORTC->ISFR |= 1 << 6;
    19.                 PTB->PTOR |= 1 << 21;
    20.         }
    21. }
    复制代码

    PTA4按键的中断直接进入了NIM中断,代码如下
    1. int
    2.         key_init(void)
    3. {
    4.         SIM->SCGC5 |= 0x0200;
    5.         
    6.         PORTA->PCR[4] |= 0x000a0100;
    7.         
    8.         PTA->PDDR &= ~(1 << 4);               

    9.         NVIC_EnableIRQ(PORTA_IRQn);
    10.         
    11.         return 0;
    12. }

    13. void
    14.         PORTA_IRQHandler(void)
    15. {
    16.         if(PORTA->PCR[4] & (1 << 24))
    17.         {
    18.                 PORTA->ISFR |= 1 << 4;
    19.                 PTB->PTOR |= 1 << 21;
    20.         }
    21. }
    复制代码


    工程文件见附件
    key_interrupt.rar (116.72 KB, 下载次数: 10)
    nxpic.org.png
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-5-7 09:07
  • 签到天数: 353 天

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5785
    最后登录
    2025-5-7
    发表于 2015-12-14 21:51:53 | 显示全部楼层
    本帖最后由 wambob 于 2015-12-14 22:10 编辑

    11.JPG
    PTA4管脚先复用成数字I/O,因为这个脚有NMI功能,而且默认的功能是NMI
    22.JPG


    PORTA->PCR[4] &= 0xfff0f0ff;
    PORTA->PCR[4] |= 0x000a0100;
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
     楼主| 发表于 2015-12-15 13:46:34 | 显示全部楼层
    感谢wambob网友,谢谢你的提醒。先清位再置位
    感谢七七bb网友,谢谢你的提醒。注意硬件电路部分

    查看硬件后,发现R1、C55都是空的,那说明只有SW3(PTA4)有上拉,SW2(PTC6)无上拉。。
    原理图如下:
    SW.png

    更新后程序如下:
    PTA作为按键中断
    1. int
    2.         key_init(void)
    3. {
    4.         SIM->SCGC5 |= 0x0200;
    5.        
    6.         PORTA->PCR[4] &= ~(0x7 << 8 | 0xf << 16);
    7.         PORTA->PCR[4] |= 0x000a0100;
    8.        
    9.         PTA->PDDR &= ~(1 << 4);               

    10.         NVIC_EnableIRQ(PORTA_IRQn);
    11.        
    12.         return 0;
    13. }

    14. void
    15.         PORTA_IRQHandler(void)
    16. {
    17.         if(PORTA->PCR[4] & (1 << 24))
    18.         {
    19.                 PORTA->ISFR |= 1 << 4;
    20.                 PTB->PTOR |= 1 << 21;
    21.         }
    22. }
    复制代码


    PTC作为按键中断
    1. int
    2.         key_init(void)
    3. {
    4.         SIM->SCGC5 |= 0x0800;

    5.         PORTC->PCR[6] &= ~(1 << 0 | 1 << 1 | 0x7 << 8 | 0xf << 16);
    6.         PORTC->PCR[6] |= 0x000a0103;
    7.        
    8.         PTC->PDDR &= ~(1 << 6);               

    9.         NVIC_EnableIRQ(PORTC_IRQn);
    10.        
    11.         return 0;
    12. }

    13. void
    14.         PORTC_IRQHandler(void)
    15. {
    16.         if(PORTC->PCR[6] & (1 << 24))
    17.         {
    18.                 PORTC->ISFR |= 1 << 6;
    19.                 PTB->PTOR |= 1 << 21;
    20.         }
    21. }
    复制代码


    工程源码更新如下:
    key_interrupt.rar (124.31 KB, 下载次数: 2)
    nxpic.org.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 20:37
  • 签到天数: 2455 天

    连续签到: 11 天

    [LV.Master]伴坛终老

    17

    主题

    5364

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    11305
    最后登录
    2025-7-23
    发表于 2015-12-10 22:10:09 | 显示全部楼层
    先了解下。。。
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    9

    主题

    642

    帖子

    0

    高级会员

    Rank: 4

    积分
    748
    最后登录
    1970-1-1
    发表于 2015-12-11 08:54:54 | 显示全部楼层
    感谢分享
    logo.png
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    29

    帖子

    0

    注册会员

    Rank: 2

    积分
    93
    最后登录
    1970-1-1
    发表于 2015-12-11 11:19:27 | 显示全部楼层
    学习中……
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
     楼主| 发表于 2015-12-11 15:32:51 | 显示全部楼层
    没有知道的吗?
    nxpic.org.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
     楼主| 发表于 2015-12-11 15:33:56 | 显示全部楼层

    我这是提问帖,谈不上分享
    nxpic.org.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
     楼主| 发表于 2015-12-11 15:35:48 | 显示全部楼层

    谢谢顶帖
    nxpic.org.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
     楼主| 发表于 2015-12-11 15:36:19 | 显示全部楼层

    谢谢帮顶
    nxpic.org.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-6 07:38
  • 签到天数: 736 天

    连续签到: 1 天

    [LV.9]以坛为家II

    21

    主题

    3486

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    5093
    最后登录
    2024-1-7
    发表于 2015-12-12 11:39:16 | 显示全部楼层
    寄存器操作的应该也可以用在IAR上吧,下载学习一下
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
     楼主| 发表于 2015-12-14 09:00:09 | 显示全部楼层
    nothingness 发表于 2015-12-12 11:39
    寄存器操作的应该也可以用在IAR上吧,下载学习一下

    IAR和MDK的头文件还是有点区别,不过相差不大。。。。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-24 08:12 , Processed in 0.118899 second(s), 35 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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