查看: 1901|回复: 4

[求助] 关于YL-KL26-V3的外部中断问题

[复制链接]

该用户从未签到

2

主题

4

帖子

0

新手上路

Rank: 1

积分
36
最后登录
2016-8-13
发表于 2016-2-17 18:04:03 | 显示全部楼层 |阅读模式
因为YL-KL26Z开发板给的例程用的是KL25的头文件,虽然说KL25与KL26是兄弟,但是KL26用KL25的头文件开发毕竟不是我的风格,所以我用了KL26的头文件,首先上代码,因为完全是寄存器控制,写的全部是寄存器,望 仁者见仁智者见智:

我认为代码没有问题,但是烧写在开发板上却失败,并没有出现按一下键就反转一次LED的现象,求人指点,哪里错了?

#include "MKL26Z4.h"
int main()
{
        SIM->SCGC5 |= (SIM_SCGC5_PORTB_MASK
                                | SIM_SCGC5_PORTD_MASK
                                | SIM_SCGC5_PORTA_MASK);            //开启A,B,D时钟
   
        PORTB->PCR[18] &= ~PORT_PCR_MUX_MASK;
        PORTB->PCR[18] |= PORT_PCR_MUX(1);
        PORTB->PCR[19] &= ~PORT_PCR_MUX_MASK;
        PORTB->PCR[19] |= PORT_PCR_MUX(1);
        PORTD->PCR[1] &= ~PORT_PCR_MUX_MASK;
        PORTD->PCR[1] |= PORT_PCR_MUX(1);                    //配置三个LED为GPIO功能
   
        PTD->PDDR |= (1 << 1);
        PTB->PDDR |= ((1 << 18)|(1 << 19));                     //配置LED为输出方向
   
        PTD->PDOR |= (1 << 1);
        PTB->PDOR |= ((1 << 18)|(1 << 19));                     //配置LED为高电平,使其灭

       PORTD->PCR[6] &= ~PORT_PCR_MUX_MASK;
        PORTD->PCR[6] |= PORT_PCR_MUX(1);                   // 按键Key3,配置为GPIO功能
       PORTA->PCR[4] &= ~PORT_PCR_MUX_MASK;
        PORTA->PCR[4] |= PORT_PCR_MUX(1);                   // 按键Key4,配置为GPIO功能
   
        PTD->PDDR &= ~(1 << 6);                     
        PTA->PDDR &= ~(1 << 4);                                     //配置按键为输入功能
   
        PORTD->PCR[6] |= ~PORT_PCR_IRQC_MASK;
        PORTD->PCR[6] |= PORT_PCR_IRQC(11);
        PORTA->PCR[4] |= ~PORT_PCR_IRQC_MASK;
        PORTA->PCR[4] |= PORT_PCR_IRQC(11);                //配置按键的中断触发方式:跳变沿触发中断
   
        NVIC_EnableIRQ(PORTA_IRQn);
        NVIC_SetPriority(PORTA_IRQn,4);
        NVIC_EnableIRQ(PORTC_PORTD_IRQn);
        NVIC_SetPriority(PORTC_PORTD_IRQn,6);                //开中断以及配置优先级
   
        PORTA->ISFR |= (1 << 4);                     
        PORTD->ISFR |= (1 << 6);                                    //清空标志位
   
        while(1)
        {
               ;                                                                   //等待。。。
       }
}

void PORTA_IRQHandler()
{
        if((PORTA->ISFR) & (1 << 4))
        {  
               PORTA->ISFR |= (1 << 4);
               PTB->PTOR |= (1 << 18);
        }   
}

void PORTC_PORTD_IRQHandler()
{
        if((PORTD->ISFR) & (1 << 6))
        {
              PORTD->ISFR |= (1 << 6);
              PTB->PTOR |= (1 << 19);
        }   
}
我知道答案 目前已有4人回答
回复

使用道具 举报

该用户从未签到

2

主题

4

帖子

0

新手上路

Rank: 1

积分
36
最后登录
2016-8-13
 楼主| 发表于 2016-2-18 16:24:28 | 显示全部楼层
怎么没人啊,我发的贴就这么不值得你们回答?
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2016-2-18 17:09:24 | 显示全部楼层
woaiwm 发表于 2016-2-18 16:24
怎么没人啊,我发的贴就这么不值得你们回答?

楼主,不好意思,刚看到你的题!
你把你的PORT口的上拉也使能,另外添加使能总中断:
#ifndef KEIL
#define EnableInterrupts asm(" CPSIE i");
#else
#define EnableInterrupts  __enable_irq()
#endif
然后,debug看看,能不能进中断,并且用万用表或者示波器看看,你的输入信号是否有边沿产生。
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

4

帖子

0

新手上路

Rank: 1

积分
36
最后登录
2016-8-13
 楼主| 发表于 2016-2-24 11:13:11 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2016-2-18 17:09
楼主,不好意思,刚看到你的题!
你把你的PORT口的上拉也使能,另外添加使能总中断:
#ifndef KEIL

谢谢,已经解决了
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2016-2-24 12:33:45 | 显示全部楼层
woaiwm 发表于 2016-2-24 11:13
谢谢,已经解决了

好的,后续有问题,欢迎继续发帖交流。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-22 12:55 , Processed in 0.123732 second(s), 25 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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