📄 funcint.c
字号:
//#include <p18c801.h>
#include "includes.h"
#include "funcint.h"
void isr_null(void);
/************************************************************
* This part of code is incharge of setting ISR and process *
* low level interrupt according to the "intvec_l".
* As to the high level version, currently only one IRQ is
* serviced for its critical restriction on time and resource
************************************************************/
#pragma udata ISRTBL = 0x80
void (* intvec_h)(void);
void (* intvec_l[MAX_LISR])(void);
#pragma code MYCODE
void isr_init(void){
INT8U i;
//Close all the interrupts enable, priority and flag
INTCON = 0;
INTCON2 = 0;
INTCON3 = 0;
IPR2 = 0;
IPR1 = 0;
PIR2 = 0;
PIR1 = 0;
PIE2 = 0;
PIE1 = 0;
RCONbits.IPEN = 1; //Enable interrupt priority
for(i=0;i<MAX_LISR; i++){
intvec_l[i]=isr_null;
}
intvec_h = isr_null;
}
INT8U isr_set(INT8U irq,void(* isr)(void)){
if(irq < MAX_LISR){
intvec_l[irq] = isr;
return(TRUE);
}
else{
if(irq == INT_HIGHP){
intvec_h = isr;
return(TRUE);
}
else
return(FALSE);
}
}
void LowLevelIntProc(void){
//TMR0
if(~INTCON2bits.TMR0IP){
if(INTCONbits.TMR0IE & INTCONbits.TMR0IF){
(*intvec_l[INT_TMR0])();
INTCONbits.TMR0IF = 0;
}
}
//TMR1 as a special case
//TMR2
if(~IPR1bits.TMR2IP){
if(PIE1bits.TMR2IE & PIR1bits.TMR2IF){
(*intvec_l[INT_TMR2])();
PIR1bits.TMR2IF = 0;
}
}
//TMR3
if(~IPR2bits.TMR3IP){
if(PIE2bits.TMR3IE & PIR2bits.TMR3IF){
(*intvec_l[INT_TMR3])();
PIR2bits.TMR3IF = 0;
}
}
//RX
if(~IPR1bits.RCIP){
if(PIE1bits.RCIE & PIR1bits.RCIF){
(*intvec_l[INT_RX0])();
PIR1bits.RCIF = 0;
}
}
//TX
if(~IPR1bits.TXIP){
if(PIE1bits.TXIE & PIR1bits.TXIF){
(*intvec_l[INT_TX0])();
PIR1bits.TXIF = 0;
}
}
//RB
if(~INTCON2bits.RBIP){
if(INTCONbits.RBIE & INTCONbits.RBIF){
(*intvec_l[INT_RB])();
INTCONbits.RBIF = 0;
}
}
//INT2
if(~INTCON3bits.INT2IP){
if(INTCON3bits.INT2IE & INTCON3bits.INT2F){
(*intvec_l[INT_EINT2])();
INTCON3bits.INT2IF = 0;
}
}
}
//A null ISR, do nothing
void isr_null(void){
Nop();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -