zoukankan      html  css  js  c++  java
  • arm_cm4.c关于kinetis的修改

    /***********************************************************************/
    /*
     * Initialize the NVIC to enable the specified IRQ.
     * 
     * NOTE: The function only initializes the NVIC to enable a single IRQ. 
     * Interrupts will also need to be enabled in the ARM core. This can be 
     * done using the EnableInterrupts macro.
     *
     * Parameters:
     * irq    irq number to be enabled (the irq number NOT the vector number)
     */
    
    void enable_irq (int irq)
    {
        int div;
        
        /* Make sure that the IRQ is an allowable number. Right now up to 91 is 
         * used.
         */
        if (irq > 91)
            printf("
    ERR! Invalid IRQ value passed to enable irq function!
    ");
        
        /* Determine which of the NVICISERs corresponds to the irq */
        div = irq/32;
        
        switch (div)
        {
        	case 0x0:
                  NVICICPR0 = 1 << (irq%32);
                  NVICISER0 = 1 << (irq%32);
                  break;
        	case 0x1:
                  NVICICPR1 = 1 << (irq%32);
                  NVICISER1 = 1 << (irq%32);
                  break;
        	case 0x2:
                  NVICICPR2 = 1 << (irq%32);
                  NVICISER2 = 1 << (irq%32);
                  break;
        }              
    }
    /***********************************************************************/
    /*
     * Initialize the NVIC to disable the specified IRQ.
     * 
     * NOTE: The function only initializes the NVIC to disable a single IRQ. 
     * If you want to disable all interrupts, then use the DisableInterrupts
     * macro instead. 
     *
     * Parameters:
     * irq    irq number to be disabled (the irq number NOT the vector number)
     */
    
    void disable_irq (int irq)
    {
        int div;
        
        /* Make sure that the IRQ is an allowable number. Right now up to 91 is 
         * used.
         */
        if (irq > 91)
            printf("
    ERR! Invalid IRQ value passed to disable irq function!
    ");
        
        /* Determine which of the NVICICERs corresponds to the irq */
        div = irq/32;
        
        switch (div)
        {
        	case 0x0:
                   NVICICER0 = 1 << (irq%32);
                  break;
        	case 0x1:
                  NVICICER1 = 1 << (irq%32);
                  break;
        	case 0x2:
                  NVICICER2 = 1 << (irq%32);
                  break;
        }              
    }


    由于kinetis的寄存器的特殊性 ,arm_cm4.c文件中作相应修改如下:

    NVIC????|= 1<<(irq%32)  改为 NVIC????= 1<<(irq%32) 

    不然第二次操作中断,会清除第一次的设置


    
    
  • 相关阅读:
    ZW网络团队及资源简介
    ZW云推客即将登场
    “4K云字库”基本框架图
    Sketch 55 Beta版本探秘,看看都有什么新功能
    产品经理有哪些类型?
    电影票APP原型设计分享– Movie Booking
    旅游类App的原型制作分享-Klook
    UI行业发展预测 & 系列规划的调整
    原来这就是 UI 设计师的门槛
    摹客PS插件全新改版!—— 智能检测不对应的设计稿
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3239015.html
Copyright © 2011-2022 走看看