c - 在 C 程序中禁用中断

标签 c arm interrupt keil

如何在这个 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

最佳答案

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

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

他们只是调用CPSIECPSID 指令。

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

ARM Cortex-M0 权威指南,作者:Joseph Yiu。

关于c - 在 C 程序中禁用中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23500031/

相关文章:

c - 如何使用内联汇编从堆栈中获取信息以在 C 中编程?

c - 在 Linux 上递归搜索所有子目录中的文件

c - 线程 : How exactly work rwlockattr

c++ - qemu-user 在运行动态链接的可执行文件时找不到共享库

memory-management - ARM Linux 页表布局

c - `memcpy((void *)dest, src, n)` 和 `volatile` 数组安全吗?

ARM 引导加载程序 : Interrupt Vector Table Understanding

c - 我怎样才能在c中打印0个直角三角形?

C 拼图 {MACRO}

c++ - 交叉编译和直接在目标上编译时所需的 GCC arm 选项之间的区别?