📄 vectors.c
字号:
#include "includes.h" //总头文件
//指向外部定义的消息邮箱的指针
extern OS_EVENT * Str_Box;
#pragma CODE_SEG __NEAR_SEG NON_BANKED
//-------------------------------------------------------------------------*
//定时器中断函数,用来产生时钟节拍 *
//参数:无 *
//返回值:无 *
//-------------------------------------------------------------------------*
__interrupt 16 void OSTickISR(void) //16为定时中断
{
DisableInterrupts; //关中断
asm{
ldaa $30 //把存储页面寄存器入栈
psha
}
OSIntEnter();
OS_SAVE_SP();
//用户代码开始
OSTimeTick();
TFLG2 = 0x80; //清定时中断
//用户代码结束
OSIntExit(); //退出中断,切换任务
asm{
pula
staa $30 //恢复存储页面寄存器
nop
rti
}
EnableInterrupts; //开中断
}
//OSCtxSw:任务级任务切换函数-----------------------------------------------*
//功 能:当前运行的任务切换为比它优先级高的任务 *
//参 数:无 *
//返 回:无 *
//-------------------------------------------------------------------------*
__interrupt 4 void OSCtxSw(void) //4为SWI中断
{
DisableInterrupts; //关中断
asm{
ldaa $30 //保存页面寄存器
psha
ldX OSTCBCur
STS 0,X
}
OSTaskSwHook();
OSTCBCur = OSTCBHighRdy;
OSPrioCur = OSPrioHighRdy;
asm{
ldX OSTCBCur
LDS 0,X
pula
staa $30
RTI
}
EnableInterrupts; //开中断
}
//ISR_SCIRe:SCI0串行接收中断处理程序---------------------------------------*
//功 能:利用SCI0接收中断,接收一个字节数据,将该数据放入消息邮箱 *
//参 数:Str_Box为指向消息邮箱的指针 *
//返 回:无 *
//调用函数:OSMboxPost发送消息邮箱 *
// SCIReN串行接收N字节数据 *
//-------------------------------------------------------------------------*
__interrupt 20 void ISR_SCIRe(void) //20为SCI0接收中断
{
INT8U i;
INT8U SerialBuff[1]; //存放接收数据的数组
DisableInterrupts; //关中断
i = SCIReN(1,SerialBuff); //等待接收1个数据
//该数据放入消息邮箱
if(i == 0)
{
SCISendN(1,SerialBuff);
OSMboxPost(Str_Box,SerialBuff);
}
EnableInterrupts; //开中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -