查看: 3223|回复: 6

[已解决] 小菜鸡求助kl27外部中断搞不进去

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

    2022-6-3 10:27
  • 签到天数: 131 天

    连续签到: 1 天

    [LV.7]常住居民III

    19

    主题

    519

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1611
    最后登录
    2022-6-26
    发表于 2018-12-19 11:58:28 | 显示全部楼层 |阅读模式
    本帖最后由 nothingelse 于 2018-12-19 11:58 编辑

    求大神指点呀我这个程序搞了好几天了也没明白为啥没进中断

    1. 希望大神来帮帮我这个菜鸡[code]
    2. #define GPIO_PIN_MASK            0x1Fu
    3. #define GPIO_PIN(x)              (((1)<<(x & GPIO_PIN_MASK)))
    4. #ifndef KEIL
    5. #define EnableInterrupts asm(" CPSIE i");
    6. #else
    7. #define EnableInterrupts  __enable_irq()
    8. #endif
    9. /*!< Macro to disable all interrupts. */
    10. #ifndef KEIL
    11. #define DisableInterrupts asm(" CPSID i");
    12. #else
    13. #define DisableInterrupts __disable_irq()
    14. #endif


    15. #include "MKL27Z644.h"                  // NXP::Device:Startup
    16. #include "SEGGER_RTT.h"
    17. #include "delay.h"

    18. int main(){
    19.         int i = 0;
    20.         /*clear the rtt window*/
    21.         SEGGER_RTT_printf(0,"%s",RTT_CTRL_CLEAR);
    22.         SEGGER_RTT_printf(0,"ledTest\r\n");

    23.         /*Turn on portA and portB clocks*/
    24.         SIM->SCGC5 |= SIM_SCGC5_PORTA_MASK|SIM_SCGC5_PORTB_MASK;
    25.        
    26.         /*Set pinA1 as gpio*/
    27.         PORTA->PCR[1] = PORT_PCR_MUX(0b001);
    28.         /*Set pinA2 as gpio*/
    29.         PORTA->PCR[2] = PORT_PCR_MUX(0b001);

    30.        
    31.        
    32.         /*Configures the  portA pin1 and  portA pin2 as output .*/
    33.         GPIOA->PDDR = GPIO_PDDR_PDD(GPIO_PIN(1) )|GPIO_PDDR_PDD(GPIO_PIN(2));
    34.        
    35.         /*Set pinB0 as gpio and enable irq on falling-edge*/
    36.         PORTB->PCR[0] &=  ~PORT_PCR_MUX_MASK;
    37.         PORTB->PCR[0] = PORT_PCR_MUX(0b001)|PORT_PCR_IRQC(0b1010)|
    38.                 PORT_PCR_PE(1)|PORT_PCR_PS(1);
    39.        
    40.         /*Configures the  portB pin0 as input .*/
    41.         GPIOB->PDDR = GPIO_PDDR_PDD(0<<0);
    42.         NVIC_EnableIRQ(PORTB_PORTC_PORTD_PORTE_IRQn);
    43.         NVIC_SetPriority(PORTB_PORTC_PORTD_PORTE_IRQn,4);
    44.        
    45.        
    46.         EnableInterrupts

    47.                 PORTB->ISFR |=1<<0;
    48.        
    49.         while(1){
    50.                
    51.                 SEGGER_RTT_printf(0,"%s loopping \t %s %d \r\n",
    52.                         RTT_CTRL_TEXT_GREEN,
    53.                         RTT_CTRL_TEXT_BRIGHT_RED,
    54.                         i++);
    55.                 /*Toggle pinA1*/
    56.                 GPIOA->PTOR = GPIO_PTOR_PTTO(GPIO_PIN(1));
    57.                 /*Toggle pinA2*/
    58.                 /*if(GPIOB->PDIR==GPIO_PDIR_PDI(0<<4) ){
    59.                         GPIOA->PTOR = GPIO_PTOR_PTTO(GPIO_PIN(2));
    60.                         SEGGER_RTT_printf(0,"not irq \r\n");
    61.                 }*/
    62.                 _Delay(10);
    63.                
    64.         }
    65.        
    66. }

    67. void PORTB_PORTC_PORTD_PORTE_IRQHandler() {
    68.         if(PORTB->ISFR & (1<<0)){
    69.                 SEGGER_RTT_printf(0,"irq \r\n");
    70.                 PORTB->ISFR |=1<<0;
    71.                 GPIOA->PTOR = GPIO_PTOR_PTTO(GPIO_PIN(2));
    72.                
    73.         }
    74. }
    复制代码


    project01_with_irq.zip (450.66 KB, 下载次数: 5)
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24891
    最后登录
    2025-7-21
    发表于 2018-12-19 14:47:44 | 显示全部楼层
    楼主,你好!
    你的KL27具体型号是多少?
    如果是这些:
    Supports: MKL27Z128VFM4, MKL27Z256VFM4, MKL27Z128VFT4,
    MKL27Z256VFT4, MKL27Z128VMP4, MKL27Z256VMP4,
    MKL27Z128VLH4, MKL27Z256VLH4
    那你要注意了,这些芯片只能支持PTA和PTC,PTD中断,你用PTB是无法进去中断的。
    请仔细查看你的芯片型号,然后去查看对应的芯片reference manual.
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    擦汗
    昨天 22:51
  • 签到天数: 1847 天

    连续签到: 2 天

    [LV.Master]伴坛终老

    203

    主题

    3万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    112627
    最后登录
    2025-7-20
    发表于 2018-12-19 12:40:42 | 显示全部楼层
    中断函数中
    PORTB->ISFR |=1<<0;
    这个是什么意思?清除中断符号吗?用:
    PORTB->ISFR&=~(1UL<<0);
    可以吗?

    评分

    参与人数 1 +1 收起 理由
    NXP管管 + 1

    查看全部评分

    该会员没有填写今日想说内容.
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情

    2022-6-3 10:27
  • 签到天数: 131 天

    连续签到: 1 天

    [LV.7]常住居民III

    19

    主题

    519

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1611
    最后登录
    2022-6-26
     楼主| 发表于 2018-12-19 22:31:38 | 显示全部楼层
    小恩GG 发表于 2018-12-19 14:47
    楼主,你好!
    你的KL27具体型号是多少?
    如果是这些:

    用的是kl27 mini 开发板 芯片应该是mlk27z64vda4
    我也查了数据手册 捕获.PNG 好像能用中断
    这两天我也试过了库函数方法还是不行啊
    按键的下降沿也应该是有的直接在循环里读数是能实现灯翻转
    不知道是咋回事呢
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2022-6-3 10:27
  • 签到天数: 131 天

    连续签到: 1 天

    [LV.7]常住居民III

    19

    主题

    519

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1611
    最后登录
    2022-6-26
     楼主| 发表于 2018-12-19 22:32:20 | 显示全部楼层
    stm1024 发表于 2018-12-19 12:40
    中断函数中
    PORTB->ISFR |=1

    试过了没作用呀
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24891
    最后登录
    2025-7-21
    发表于 2018-12-21 15:45:49 | 显示全部楼层
    nothingelse 发表于 2018-12-19 22:31
    用的是kl27 mini 开发板 芯片应该是mlk27z64vda4
    我也查了数据手册好像能用中断
    这两天我也试过了库函数 ...

    debug看下,中断标志位置位没有?
    另外,到官网下个KL27Z64的代码:
    http://mcuxpresso.nxp.com/en/select
    里面gpio的中断跑下,看看是否能工作。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2022-6-3 10:27
  • 签到天数: 131 天

    连续签到: 1 天

    [LV.7]常住居民III

    19

    主题

    519

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1611
    最后登录
    2022-6-26
     楼主| 发表于 2018-12-26 09:08:51 | 显示全部楼层
    本帖最后由 nothingelse 于 2018-12-26 09:45 编辑
    小恩GG 发表于 2018-12-21 15:45
    debug看下,中断标志位置位没有?
    另外,到官网下个KL27Z64的代码:
    http://mcuxpresso.nxp.com/en/sele ...

    我用例程跑的走到pin中断配置这里
    1. PORT_SetPinInterruptConfig(BOARD_SW_PORT, BOARD_SW_GPIO_PIN, kPORT_InterruptFallingEdge);
    复制代码

    debug时看irqc就没变化 捕获.PNG 直接写寄存器代码也不行
    我用的是portb
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 20:17 , Processed in 0.110937 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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