📄 interrupt.c
字号:
#define __INTERRUPT
#include "interrupt.h"
#undef __INTERRUPT
//********************** Global Variable **********************
LWORD dwTickCount; // 系统运行滴答计时(间隔1ms)
//*************************************************************
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数: 中断分发程序.
// 描述: 根据中断偏移寄存器, 进入中断处理.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void __irq HandlerpISR_IRQ(void)
{
//---------- 相关寄存器 ----------
//
// INTOFFSET: 中断偏移寄存器
//--------------------------------
switch (rINTOFFSET) // 根据中断偏移寄存器判断中断源
{
case IRQ_UART0: // 串口0中断
HandleUart(UART0);
break;
case IRQ_UART1: // 串口1中断
HandleUart(UART1);
break;
case IRQ_UART2: // 串口2中断
HandleUart(UART2);
break;
case IRQ_TIMER4: // 定时器4中断
HandlerTIMER4();
break;
default: break;
}
}//HandlerpISR_IRQ
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数: 定时器4中断处理.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void HandlerTIMER4(void)
{
static short Cnt1ms; // 1ms计数
rSRCPND |= BIT_TIMER4; // 清中断源挂起标记
rINTPND |= BIT_TIMER4; // 清中断挂起标记
cStatus |= BT1MS; // 标记1ms
dwTickCount++; // 实时计数累加
if( Cnt1ms++>10 )
{
Cnt1ms = 0;
cStatus |= BT10MS; // 标记10ms
}
}//HandlerTIMER5
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数: 检查Timer4.
// 描述:
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void CheckTimer4(void)
{
cStatus &= ~B10MS;
if((cStatus&BT10MS)==BT10MS)
{
cStatus &= ~BT10MS;
cStatus |= B10MS;
}
}//CheckTimer4()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数: 开总中断.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void enable_interrupts (void)
{
int tmp;
__asm
{
MRS tmp, CPSR
BIC tmp, tmp, #0x80
MSR CPSR_c, tmp
}
}//enable_interrupts()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数: 关总中断.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void disable_interrupts (void)
{
int tmp;
__asm
{
MRS tmp, CPSR
ORR tmp, tmp, #0x80
MSR CPSR_c, tmp
}
}//disable_interrupts()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -