在C程序中禁用中断

时间:2014-05-06 16:24:44

标签: c arm interrupt keil

如何在此ARM M0 univesity设计启动程序中禁用中断? 设计是为M0和回声输入一个整数的字符,它是更大的代码片段的一部分(为简单起见省略) 我可以在主程序(附件)中执行此操作,还是必须编辑汇编程序代码(也附加)?

  //------------------------------------------------------------------------------
// Cortex-M0 DesignStart C program example
//------------------------------------------------------------------------------

#include <stdio.h>
#include <time.h>
#include <rt_misc.h>
#include <stdlib.h>

#define AHB_LED_BASE                0x50000000
#define AHB_UART_BASE               0x51000000


void UART_ISR(void)
{
            int sample;
            char ch [16];
            sample = atoi (ch);
            printf("the value entered is %d\n", sample);
}

//////////////////////////////////////////////////////////////////
// Main Function
//////////////////////////////////////////////////////////////////

int main() 
    {

        char ch [16];
        while(1==1)
        {
        fgets (ch, 16, stdin);
    //printf("String: %s\n\n",ch);
        }
}

汇编代码

UART_Handler    PROC
                EXPORT UART_Handler
                IMPORT UART_ISR
                PUSH    {R0,R1,R2,LR}
                LDR     R1, =0x51000000               ;UART
                LDR     R0, [R1]                      ;Get Data from UART
                STR     R0, [R1]                      ;Write to UART

                BL UART_ISR

                POP     {R0,R1,R2,PC}
                ENDP


                ALIGN 4

2 个答案:

答案 0 :(得分:2)

如果您使用CMSIS驱动程序,请检查:

  1. void __disable_irq(void)
  2. void __enable_irq(void)
  3. 他们只需拨打CPSIECPSID说明。

    通常在编程手册中阅读NVIC。我还推荐一本关于Cortex M0的精彩书籍:

    Joseph Cortu-M0的权威指南作者:Joseph Yiu。

答案 1 :(得分:0)

如果你想在ASM中编写一个简单的代码,你可以简单地将BASEPRI存储和提升到比所有NVIC更高的优先级(除了,例如,异常类型debugMon),做你需要的东西和比恢复原来的BASEPRI