【问题标题】:Disable Interrupt in C program在 C 程序中禁用中断
【发布时间】:2014-05-06 16:24:44
【问题描述】:

如何在这个 ARM M0 大学设计启动程序中禁用中断? 该设计是为 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

【问题讨论】:

  • 您在寻找“如何禁用中断?”方面做了哪些研究。您能否提供参考手册和/或您看过的其他来源?

标签: c arm interrupt keil


【解决方案1】:

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

  1. void __disable_irq(void)
  2. void __enable_irq(void)

他们只是调用CPSIECPSID 指令。

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

Joseph Yiu 的 ARM Cortex-M0 权威指南

【讨论】:

    【解决方案2】:

    如果你想在 ASM 中编写一个简单的代码,你可以简单地存储 BASEPRI 并将其提高到比所有 NVIC 更高的优先级(除了,比如说,异常类型 debugMon),做你需要做的事情,而不是恢复原来的基本原则

    【讨论】:

      猜你喜欢
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多