在C程序中禁用中断
如何禁用ARM M0大学设计启动程序中的中断? 该设计针对M0,将输入的字符作为整数进行回显,它是更大代码段的一部分(为简单起见而编写) 我可以在主程序(附件)中完成吗?还是必须编辑汇编代码(附件)在C程序中禁用中断,c,arm,interrupt,keil,C,Arm,Interrupt,Keil,如何禁用ARM M0大学设计启动程序中的中断? 该设计针对M0,将输入的字符作为整数进行回显,它是更大代码段的一部分(为简单起见而编写) 我可以在主程序(附件)中完成吗?还是必须编辑汇编代码(附件) 如果使用CMSIS驱动程序,请检查: void\u禁用\u irq(void) void\u启用\u irq(void) 他们只是调用CPSIE和CPSID指令 一般阅读编程手册中的NVIC。我还推荐一本关于Cortex M0的好书: Joseph Yiu编写的ARM Cortex-M0最终指南。如
如果使用CMSIS驱动程序,请检查:
void\u禁用\u irq(void)
void\u启用\u irq(void)
CPSIE
和CPSID
指令
一般阅读编程手册中的NVIC
。我还推荐一本关于Cortex M0的好书:
Joseph Yiu编写的ARM Cortex-M0最终指南。如果您希望在ASM中编写简单的代码,您只需存储BASEPRI并将其提升到比所有NVIC更高的优先级(此外,例如,异常类型debugMon),做你需要做的事情,然后恢复原来的BASEPRI你做了哪些研究来发现“如何禁用中断?”。您能否提供参考手册和/或您看过的其他来源?
//------------------------------------------------------------------------------
// 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