📄 swi.c
字号:
/*
*********************************************************************************************************
* 文件: SWI.C
* 描述: SWI 中断 C 语言服务函数部分,通过 SWIISR.S中调用,大部分软件中断在此处理.
* 编写: 深思 (001-12345@sohu.com).
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* 已分配软中断号:
* __swi(0x10) void OS_TASK_SW(void); 任务级任务切换函数.
* __swi(0x11) void _OSStartHighRdy(void); 运行优先级最高的任务.
* __swi(0x12) void OS_ENTER_CRITICAL(void); 关中断.
* __swi(0x13) void OS_EXIT_CRITICAL(void); 开中断.
*
* FLASH 与 RAM 中的程序分开调试的时候可以充分利用软件中断实现OS功能函数的调用.
*********************************************************************************************************
*/
#include "includes.h"
/*
*********************************************************************************************************
* 函数: void SWI_ISR(INT32U SWI_Num).
* 功能: 软中断异常处理程序,提供一些系统服务.
* 输入: 1. SWI_Num: 功能号.
* 2. Point: 实参指针.
*********************************************************************************************************
*/
void SWI_ISR(INT32U SWI_Num,INT32U *Point)
{
switch (SWI_Num) {
case 0x0012: /* OS_ENTER_CRITICAL 关中断. */
__asm{
MRS R3, SPSR
ORR R3, R3, #(1<<7)
MSR SPSR_c, R3
}
++OsEnterSum;
break;
case 0x0013: /* OS_EXIT_CRITICAL 开中断. */
if (--OsEnterSum == 0) {
__asm{
MRS R3, SPSR
BICEQ R3, R3, #(1<<7)
MSREQ SPSR_c, R3
}
}
break;
default:
break;
}
}
/*
********************************************************************************************************
* End.
********************************************************************************************************
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -