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) 

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


    
    
  • 相关阅读:
    UIWindow简单介绍
    关于事件的小结
    iOS事件机制(二)
    iOS事件机制(一)
    深入浅出iOS事件机制
    关于UIBarItem和UINvigationController,UITabBarController关系
    动态加载实例NSSelectorFromString
    iOS-滑动显示广告效果
    自定义的TabBar
    iOS评论页面的简单思路
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3239015.html
Copyright © 2011-2022 走看看