📄 sys_isr.c
字号:
/*************************************
;Ade7169 demo program
;*************************************
;AUTHOR: Su RuTong
;DATE: 03 09 2006
;*************************************/
#include "Hal.h"
#include "sys_isr.h"
#include "sys_init.h"
//#include "Io8052.h"
#include "utilities.h"
#include "sys_event.h"
#include "Display.h"
#include "Public.h"
#include "UART.h"
#include "Measure.h"
// ext. int0 interrupt service
#ifdef __IAR_SYSTEMS_ICC__
#pragma vector=extern0
__interrupt void _int0_isr(void)
#else
void _int0_isr(void) interrupt 0
#endif
{
IE0=0;
_Lcd_Write(0x00,0x80);//Logo
if(!(P1&SCROLL_UP_PIN)) // LCD Page up
{
LcdDispFlag |= LCD_DISP_FLG_PAGEUP;
bManDisp=1;
LcdInterval = 8;//_SysPotInfo.disptime;
//P0=0x00;
}
else if(!(P1&SCROLL_DOWN_PIN)) // LCD Page down
{
LcdDispFlag |= LCD_DISP_FLG_PAGEDOWN;
bManDisp=1;
LcdInterval = 8;//_SysPotInfo.disptime;
//P0=0xff;
}
}
// timer0 interrupt service 5ms
#ifdef __IAR_SYSTEMS_ICC__
#pragma register_bank=1
#pragma vector=timer0
__interrupt void _timer0_isr(void)
#else
void _timer0_isr(void) interrupt 1 using 1
#endif
{
static unsigned char data timer0_10ms=2;
static unsigned char data timer0_100ms=20;
static unsigned char data timer0_500msCnt=100;
static unsigned char data timer0_1s=200;
TF0=0;
// Manual reload
TH0=0xc4;
TL0=0x3c;//b4
// 10ms
if(--timer0_10ms==0)
{
timer0_10ms=2;
// UART rec byte timeout proc
if(Uart_Rec_Tout_Cnt!=0x00)
{
if(--Uart_Rec_Tout_Cnt==0x00)
{
// Re-init UART REC
Re_Init_Uart_Rec();
}
}
if(Uart_Snd_Tout_Cnt!=0x00)
{
if(--Uart_Snd_Tout_Cnt==0x00)
{
// Re-init Uart send
Re_Init_Uart_Snd();
}
}
}
// 100ms
if(--timer0_100ms==0)
{
timer0_100ms=20;
}
// 500ms
if(timer0_500msCnt--==0)
{
timer0_500msCnt=100;
ADD_EVT(EVT_OF_500MS);
}
// 1s
if(--timer0_1s==0)
{
timer0_1s=200;
if(bManDisp==0)
{
LcdDispFlag|=LCD_DISP_FLG_ACTIVE;
}
//P0 ^= BIT3;////CF2_LED=!CF2_LED; // For debug
ADD_EVT(EVT_OF_SECOND);
// HEARTBEAT_LED=!HEARTBEAT_LED;
// PD=~PD; //(BIT1|BIT2);// LED1_ON()
if(Uart_Snd_Delay_cnt)
{
if(--Uart_Snd_Delay_cnt==0x00)
{
if(!bIn_Send)
{
ADD_EVT(EVT_OF_COMM);
}
else
{
Uart_Snd_Delay_cnt=1;
}
}
}
}
ADD_EVT(EVT_OF_TICK);
}
// ext. int1 interrupt service
#ifdef __IAR_SYSTEMS_ICC__
#pragma vector=extern1
__interrupt void _int1_isr(void)
#else
void _int1_isr(void) interrupt 2
#endif
{
IE1=0;
}
// timer1 interrupt service
// 5ms timming
#ifdef __IAR_SYSTEMS_ICC__
#pragma register_bank=1
#pragma vector=timer1
__interrupt void _timer1_isr(void)
#else
void _timer1_isr(void) interrupt 3 using 1
#endif
{
#if 0
static unsigned char timer1_10msCnt=2;
static unsigned char timer1_100msCnt=20;
static unsigned char timer1_500msCnt=100;
static unsigned char timer1_1sCnt=200;
TH1=0xEC;
TL1=0x78;
if(timer1_10msCnt--==0)
{
timer1_10msCnt=2;
}
if(timer1_100msCnt--==0)
{
timer1_100msCnt=20;
}
if(timer1_500msCnt--==0)
{
timer1_500msCnt=100;
ADD_EVT(EVT_OF_500MS);
}
if(timer1_1sCnt--==0)
{
timer1_1sCnt=200;
if(bManDisp==0)
{
LcdDispFlag|=LCD_DISP_FLG_ACTIVE;
}
ADD_EVT(EVT_OF_SECOND);
}
#endif
}
// Timer2 interrupt service
#ifdef __IAR_SYSTEMS_ICC__
#pragma register_bank=1
#pragma vector=timer2
__interrupt void _timer2_isr(void)
{
}
#else
void _timer2_isr(void) interrupt 5 using 1
{
}
#endif
// temperature ADC interrupt service
#ifdef __IAR_SYSTEMS_ICC__
#pragma vector=itemp_ADC
__interrupt void _temp_isr(void)
{
}
#else
void _temp_isr(void) interrupt 6
{
}
#endif
// isp/iic interrupt service
#ifdef __IAR_SYSTEMS_ICC__
#pragma vector=ispi_i2c
__interrupt void _ispi_i2c_isr(void)
#else
void _ispi_i2c_isr(void) interrupt 7
#endif
{
if((CFG&BIT5)==0)
{
if((SPI2CSTAT&BIT7)/*BUSY*/){goto SPII2C_END;}
if((SPI2CSTAT&BIT6)/*MMERR*/){goto SPII2C_END;/* todo No ACK */}
if((SPI2CSTAT&BIT5)/*SPIRxOF*/){goto SPII2C_END;/* todo Rx In */}
if((SPI2CSTAT&BIT4)/*SPIRxIRQ*/){goto SPII2C_END;/* todo Tx complete */}
}
SPII2C_END:
SPI2CSTAT=0;
}
// power supply interrupt service
#ifdef __IAR_SYSTEMS_ICC__
#pragma vector=ipsm
__interrupt void _psm_isr(void)
#else
void _psm_isr(void) interrupt 8
#endif
{
_evt_word_of_power=IPSME; // read the enable register first
_evt_word_of_power&=IPSMF; // see which enabled interrupts are set
ADD_EVT(EVT_OF_POWER_DOWN);
// parse flag todo .0 .1 .7
// flag.0: FVDC--Vdcin < 1.2V
// flag.1: FBSO--VSW switches from VDD to VBAT.
// flag.2: FBAT--VBAT falls below BATVTH or when the VBAT measurement is ready.
// flag.3: FVSW--VSW changes by VSWDIF or when VSW measurement is ready.
// flag.4: RESERVED--This bit must be kept cleared for proper operation
// flag.5: FSAG--Voltage SAG Interrupt flag.
// flag.6: FPSM--PSM Interrupt flag.
// flag.7: FPSR--Set when the VDD power supply has been restored. This occurs when the source of VSW changes from VBAT to VDD.
green=0;
IPSMF=green;
SCRATCH1 = SEC;
SCRATCH2 = MIN;
SCRATCH3 = HOUR;
_Lcd_Write(0x0a,0x04); // battery ICON
}
// watchdog timer interrupt service
#ifdef __IAR_SYSTEMS_ICC__
#pragma vector=iwdt
__interrupt void _wdt_isr(void)
{
}
#else
void _wdt_isr(void) interrupt 11
{
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -