查看: 2433|回复: 1

[求助] KE04如何進入 IRQ 外部 中斷

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

    2019-1-19 16:32
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    23

    主题

    113

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    1267
    最后登录
    2022-3-31
    发表于 2017-4-17 14:29:46 | 显示全部楼层 |阅读模式
    本帖最后由 lamb8059 于 2017-4-17 14:47 编辑

    目的:IRQ 下拉0V時進入中斷,BLUE LED Toggle()           FRDM-KE04Z的IRQ跟RST複用,用板上RST button切換LED狀態

    目前狀況:仿真到IRQ->SC |=  IRQ_SC_IRQPDD_MASK | (~IRQ_SC_IRQEDG_MASK) | IRQ_SC_IRQPE_MASK ;  時跳到default_isr、
                     IRQ pin拉0V時Green LED也熄滅,Blue LED也沒有Toggle

    程序如下

    int main (void)
    {
        sysinit();

        SIM->SOPT |= SIM_SOPT_CLKOE_MASK | (0<<SIM_SOPT_BUSREF_SHIFT);


        GPIO_Init(GPIOA, GPIO_PTB3_MASK, GPIO_PinOutput);
         FGPIOA->PSOR = GPIO_PTB3_MASK;
         GPIO_Init(GPIOA,GPIO_PTC4_MASK,GPIO_PinOutput);
         FGPIOA->PCOR = GPIO_PTC4_MASK;

        ICS->C2    = (ICS->C2 & ~(ICS_C2_BDIV_MASK)) | ICS_C2_BDIV(0);

        SIM->SOPT &= ~( SIM_SOPT_RSTPE_MASK );

        IRQ->SC |=  IRQ_SC_IRQPDD_MASK | (~IRQ_SC_IRQEDG_MASK) | IRQ_SC_IRQPE_MASK ;

        NVIC_EnableIRQ(IRQ_IRQn);
        NVIC_SetPriority(IRQ_IRQn,30);  //30= 8 * (7 % 4) + 6

        while (1);

    }

    void IRQ_IRQHandler(void)
    {

            uint32_t aa;
            GPIO_Toggle(GPIOA, GPIO_PTB3_MASK);
            for(aa=0;aa<240000;aa++);
            IRQ->SC |= IRQ_SC_IRQACK_MASK;
    }



    目前有幾個疑問
    1. isr.h要isr.h要  #undef VECTOR_023  #define VECTOR_023  IRQ_Isr  嗎?  但是沒有IRQ.c之類的文件設置IRQ_Callback
    2.要怎麼設治才能進入IRQ外部中斷,RST引腳改為IRQ之後,還要設置哪些寄存器,IRQ_SC、NVICISER、NVICISPR?
    3.KL26的ISPR公式是8*(IRQ mod 4)+6 ,K60卻是 8 * (85 % 4) + 4 ,KE04的是跟KL26一樣嗎?

    KEXX_DRIVERS_V1.2.1_DEVD.zip裡面沒有看到用IRQ的例程唉

    我知道答案 目前已有1人回答
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

    该用户从未签到

    723

    主题

    6382

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    25448
    最后登录
    2025-9-4
    发表于 2017-4-17 17:20:12 | 显示全部楼层
    楼主你好!
    1.你可以在isr.h中重新定义中断服务函数的名称,如果不定义,你也可以直接用vector的名称去写函数,一个概念。
    2.配置模块使能中断,然后使能中断向量表,编写中断服务函数。
    以ADC为例:
            ADC_IntEnable(pADC);
            NVIC_EnableIRQ( ADC0_IRQn );
    3. KE04也是Cortext M0+内核,和KL一样,K60是M4内核,不一样的。
    你可以参考KL系列。
    IRQ代码当然有:KEXX_DRIVERS_V1.2.1_DEVD\kexx_drv_lib\build\iar\ke04\ADC_Int_demo
    ADC_Init里面就有。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-9-6 14:46 , Processed in 0.084960 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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