⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isr_vectors.c

📁 此程序为DP256的SPI实验程序,已经通过实验证明
💻 C
字号:
#include "LIN_Header.h"

//#pragma CODE_SEG __NEAR_SEG NON_BANKED /* Interrupt section for this module. Placement will be in NON_BANKED area. */
__interrupt void UnimplementedISR(void) {
   /* Unimplemented ISRs trap.*/
   asm NOP;
}

typedef void (*near tIsrFunc)(void);
const tIsrFunc _vect[] @0xFFD4 = {     /* Interrupt table */

#if INT_CAN_TX_EN				//MSCAN08 Transmit Vector	IF20
		CAN_TX_ISR,
#else
		UnimplementedISR,
#endif

#if INT_CAN_RX_EN				//MSCAN08 Receive Vector	IF19
		CAN_RX_ISR,
#else
		UnimplementedISR,
#endif

#if INT_CAN_ERR_EN				//MSCAN08 ERROR Vector	IF18
		CAN_ERR_ISR,
#else
		UnimplementedISR,
#endif

#if INT_CAN_WAKEUP_EN				//MSCAN08 WAKEUP vector IF17
		CAN_Wakeup_ISR,
#else
		UnimplementedISR,
#endif

#if INT_TIMEBASE_EN				//Timebase Vector	IF16
		Time_Base_ISR,
#else
		UnimplementedISR,
#endif

#if INT_ADC_EN					//ADC Conversion Complete Vector	IF15
		ADC_ISR,
#else
		UnimplementedISR,
#endif

#if INT_KEYBOARD_EN				//Keyboard Vector	IF14
		Keyboard_ISR,
#else
		UnimplementedISR,
#endif

#if INT_SCI_TX_EN				//ESCI Transmit Vector	IF13
		SCI_TX_ISR,
#else
		UnimplementedISR,
#endif

#if INT_SCI_RX_EN				//ESCI Receive Vector IF12
		SCI_RX_ISR,
#else
		UnimplementedISR,
#endif

#if INT_SCI_ERR_EN				//ESCI Error Vector	IF11
		SCI_ERR_ISR,
#else
		UnimplementedISR,
#endif

#if INT_SPI_TX_EN				//SPI Transmit	IF10
		SPI_TX_ISR,
#else
		UnimplementedISR,
#endif

#if INT_SPI_RX_EN				//SPI Receive	IF09
		SPI_RX_ISR,
#else
		UnimplementedISR,
#endif

#if INT_TIMER2_OV_EN			//TIM2 Overflow Vector	IF08
		Timer2_OV_ISR,
#else
		UnimplementedISR,
#endif

#if INT_T2C1_EN					//TIM2 Channel 1 Vector	IF07
		T2C1_ISR,
#else
		UnimplementedISR,
#endif

#if INT_T2C0_EN					//TIM2 Channel 0 Vector IF06
		T2C0_ISR,
#else
		UnimplementedISR,
#endif

#if INT_TIMER1_OV_EN			//TIM1 Overflow Vector	IF05
		Timer1_OV_ISR,
#else
		UnimplementedISR,
#endif

#if INT_T1C1_EN					//TIM1 Channel 1 Vector	IF04
		T1C1_ISR,
#else
		UnimplementedISR,
#endif

#if INT_T1C0_EN					//TIM1 Channel 0 Vector IF03  
		T1C0_ISR,
#else
		UnimplementedISR,
#endif

#if INT_PLL_EN					//PLL Vector	IF02
		PLL_ISR,
#else
		UnimplementedISR,
#endif

#if INT_IRQ_EN					//IRQ Vector	IF01
		IRQ_ISR,
#else
		UnimplementedISR,
#endif

#if	INT_SWI_EN					//SWI vector  
		SWI_ISR,
#else
		UnimplementedISR,
#endif
        _Startup               /* Reset vector */
   };
   
#if INT_CAN_TX_EN				//MSCAN08 Transmit Vector	IF20
		interrupt void CAN_TX_ISR(void){};
#endif

#if INT_CAN_RX_EN				//MSCAN08 Receive Vector	IF19
		interrupt void CAN_RX_ISR(void){};
#endif

#if INT_CAN_ERR_EN				//MSCAN08 ERROR Vector	IF18
		interrupt void CAN_ERR_ISR(void){};
#endif

#if INT_CAN_WAKEUP_EN				//MSCAN08 WAKEUP vector IF17
		interrupt void CAN_Wakeup_ISR(void){};
#endif

#if INT_TIMEBASE_EN				//Timebase Vector	IF16
		interrupt void Time_Base_ISR(void)
		{
			LIN_TMR_ACK		= 1;//Clear Interrupt Flag
			
			//Increament Time Value
			wSysTime = (L_U16)(wTimerIncrement + wSysTime);
/*
			if((LIN_Node_Status & LIN_FLAG_WAKEUP_TIMEOUT) == LIN_FLAG_WAKEUP_TIMEOUT)
			{
				--LIN_Timeout;
				if(LIN_Timeout == 0)
				{
					LIN_Wakeup_Phase++;
					if(LIN_Wakeup_Phase	== LIN_SLEEP_TIME_INDEX) LIN_Wakeup_Phase	= 0;
					LIN_Wakeup();
				}
			}
			else if((LIN_Node_Status & LIN_FLAG_NO_BUS_ACTIVE) == 0)
			{
				--LIN_Timeout;
				if(LIN_Timeout == 0)
				{
					//LIN_Goto_Sleep();
					//LIN_SCIRIE				= 1;
					//LIN_SCI_FEIE			= 0;
					LIN_Node_Status			= LIN_FLAG_SLEEP | LIN_FLAG_NO_BUS_ACTIVE;
					LIN_Transceiver_Status	= LIN_FLAG_IGNORE;
				}
			}
			else
			{
				//Clear LIN_FLAG_SUCCESSFUL_TRANSFER EVERY 1.5 SECONDS
				--LIN_Timeout;
				if(LIN_Timeout == 0)
				{
					LIN_Error_Status	&= ~LIN_SUCCESS_TRANSFER;
					LIN_Timeout			= LIN_Wakeup_Timer[LIN_WAKEUP_PHASE_4];
				}
			}
*/
		}
#endif

#if INT_ADC_EN					//ADC Conversion Complete Vector	IF15
		interrupt void ADC_ISR{};
#endif

#if INT_KEYBOARD_EN				//Keyboard Vector	IF14
		interrupt void Keyboard_ISR(void)
		{
			INTKBSCR_ACKK	= 1;

#if SPI_DEBUG_MODE	== 1
			 	//TEST_PIN_SG8	= ~TEST_PIN_SG8;
#endif			
			if(LIN_Node_Status & LIN_FLAG_SLEEP) 
			{
				//We waked up by switch status changed events
				//excute wake senquence
				LIN_Node_Status	= LIN_FLAG_WAKEUP;
				
				LIN_Wakeup_Phase	= 0;
				LIN_Wakeup();
			}
			else
			{
				//Start SPI communication
				KeyBoard_INT_Disable();
				MC33993_GetInput();
			}
		}
#endif

#if INT_SCI_TX_EN				//ESCI Transmit Vector	IF13
		interrupt void SCI_TX_ISR(void){};
#endif

#if INT_SCI_RX_EN				//ESCI Receive Vector IF12
		interrupt void SCI_RX_ISR(void)
		{
			LIN_SCIStatus1	= LIN_SCISR1;
			LIN_TmpByte		= LIN_SCIDRL;
			//LIN_Pending_Status	|=	0x80;
			if((LIN_Node_Status & LIN_FLAG_WAKEUP_TIMEOUT) == 0) LIN_Timeout	= LIN_Wakeup_Timer[LIN_NO_BUS_ACTIVE_TIME];
			if((LIN_Node_Status & LIN_FLAG_SLEEP) == 0)	LIN_Data_Received();
			else
			{
				// Now we are in sleep mode, so campare the received char with LIN_WAKEUP_CHAR
				if(LIN_TmpByte == LIN_WAKEUP_CHAR)
				{
					// 1. if we work in power save mode, here sould be set wakeup timeout, and wake up all component
					// 2. we don't in power save mode, so we set LIN_DRIVE_STATUS directly.
					// Add by wang jun peng, 3rd, march, 2005
					LIN_Node_Status = LIN_FLAG_RDY_FOR_SYNCHBREAK;
					LIN_Transceiver_Status = LIN_FLAG_IGNORE;
				}
			}
			LIN_Node_Status	&= ~LIN_FLAG_NO_BUS_ACTIVE;//we received a char and clear the LIN_FLAG_NO_BUS_ACTIVE Flag
#if LIN_DEBUG_MODE	== 1			
			//LIN_TEST_PIN_SCI	= ~LIN_TEST_PIN_SCI;
			LIN_Debug_PIN_BREAK		= 0;
#endif		
		}		
#endif

#if INT_SCI_ERR_EN				//ESCI Error Vector	IF11
		interrupt void SCI_ERR_ISR(void)
		{
			//1.Break Detected conditions:
			//	a. SCS1.FE 		== 1
			//  B. SCS1.SCRF 	== 1
			//	C. SCS2.BKF		== 1
			// All Flags Cleared by read status register then read data register
			
			LIN_SCIStatus1	= LIN_SCISR1;
			LIN_SCIStatus2	= LIN_SCISR2;
			LIN_TmpByte		= LIN_SCIDRL;
			//LIN_Pending_Status	|=	0x40;
			if((LIN_Node_Status & LIN_FLAG_SLEEP) == 0)
			{
				if(((LIN_SCIStatus1  & SCI_BRKF/* SCI_FE + SCI_RF */) == SCI_BRKF) && ((LIN_SCIStatus2 & SCI_BKF) == SCI_BKF) && (LIN_TmpByte == 0))
				{
					//proper bread symbol dectected
					LIN_Transceiver_Status	= LIN_FLAG_REC_SYNCH;								
					LIN_Node_Status			= LIN_FLAG_RDY_FOR_SYNCHBREAK;
					//LIN_TIC_Enable(1);// we don't need TIC function
#if LIN_DEBUG_MODE == 1					
					LIN_Debug_PIN_BREAK		= 1;
					LIN_Debug_PIN_CHECK		= 0;
					LIN_Debug_PIN_ID		= 0;
					LIN_Debug_PIN_DATA		= 0;
					LIN_Debug_PIN_SYNCH		= 0;
#endif					
				}
				else
				{
					//Get a Frame Error 
					if(LIN_Transceiver_Status == LIN_FLAG_REC_SYNCH)		
					{
						LIN_Error_Status	|= LIN_ERR_SYNCH;
						LIN_Err_RxCounter	<<= 1;//Receiver error counter shift right 1 bit
						LIN_Err_RxCounter	|=	1;//The LSB record the last state -- 1 for error; 0 for no error
					}
					else if(LIN_Transceiver_Status == LIN_FLAG_REC_HEADER) 	
					{
						LIN_Err_RxCounter	<<= 1;//Receiver error counter shift right 1 bit
						LIN_Err_RxCounter	|=	1;//The LSB record the last state -- 1 for error; 0 for no error
						LIN_Error_Status	|= LIN_ERR_ID_PARITY;
					}
					else if(LIN_Transceiver_Status == LIN_FLAG_REC_DATA)
					{
						LIN_Error_Status	|= (LIN_ERR_BITS | LIN_ERR_IN_RESPONSE); 
						LIN_Err_RxCounter	<<= 1;//Receiver error counter shift right 1 bit
						LIN_Err_RxCounter	|=	1;//The LSB record the last state -- 1 for error; 0 for no error					
					} 
					else if(LIN_Transceiver_Status ==LIN_FLAG_SEND_DATA)
					{
						LIN_Error_Status	|= (LIN_ERR_BITS | LIN_ERR_IN_RESPONSE);
						LIN_Err_TxCounter	<<= 1;//Receiver error counter shift right 1 bit
						LIN_Err_TxCounter	|=	1;//The LSB record the last state -- 1 for error; 0 for no error
					}	
					else if(LIN_Transceiver_Status == LIN_FLAG_REC_CHECKSUM)
					{
						LIN_Error_Status	|= (LIN_ERR_CHECKSUM | LIN_ERR_IN_RESPONSE);
						LIN_Err_RxCounter	<<= 1;//Receiver error counter shift right 1 bit
						LIN_Err_RxCounter	|=	1;//The LSB record the last state -- 1 for error; 0 for no error
					}
					else if(LIN_Transceiver_Status == LIN_FLAG_SEND_CHECKSUM)
					{
						LIN_Error_Status	|= (LIN_ERR_CHECKSUM | LIN_ERR_IN_RESPONSE);
						LIN_Err_TxCounter	<<= 1;//Receiver error counter shift right 1 bit
						LIN_Err_TxCounter	|=	1;//The LSB record the last state -- 1 for error; 0 for no error
					}
					LIN_Transceiver_Status	= LIN_FLAG_IGNORE;
				}
			}
		}
#endif


#if INT_SPI_TX_EN				//SPI Transmit	IF10
		interrupt void SPI_TX_ISR(void)
		{
			//SPI_State	= SPSCR;
			TEST_PIN_SG6	= ~TEST_PIN_SG6;
			if((SPIBuf.mState & SPI_TX_REQ) == SPI_TX_REQ) 
			{
				SPDR	= SPI_Tx_Buf[SPIBuf.mTxCounter];
				SPIBuf.mTxCounter++;
				if(SPIBuf.mTxCounter == SPIBuf.mDataLength)
				{
					SPIBuf.mState	&= ~SPI_TX_REQ;
					SPCR_SPTIE		= 0;
				}
			} 
			else
			{
//				SPIBuf.mState		&= ~SPI_TX_REQ;
				SPCR_SPTIE	= 0;
//					SPIBuf.mState	&= ~SPI_TX_REQ;
			}
		}
#endif

#if INT_SPI_RX_EN				//SPI Receive	IF09
		interrupt void SPI_RX_ISR(void)
		{
			SPI_State	= SPSCR;
			
			if((SPI_State & SPI_SPRF) == SPI_SPRF)
			{
				SPI_Rx_Buf[SPIBuf.mRxCounter]	= SPDR;
				SPIBuf.mRxCounter++;
				if((SPIBuf.mState & SPI_RX_REQ) == SPI_RX_REQ) 
				{
					//SPDR	= SPI_Tx_Buf[SPIBuf.mRxCounter];
					if(SPIBuf.mRxCounter == SPIBuf.mDataLength)
					{
						SPIBuf.mState	&= ~SPI_RX_REQ;	
						SPIBuf.mState	|= SPI_RX_FULL;
						SPI_RxIndicator();					
					}
				} 
				else
				{
					//SPIBuf.mState	&= ~SPI_RX_REQ;	
					SPIBuf.mState	= SPI_XMT_IDLE;	
					//TEST_PIN_SG2	= 1;
					//SPCR_SPTIE	= 0;
					Select_MC33993(MC33993_DESEL);
				}				
			}
			else if((SPI_State & SPI_OVRF) == SPI_OVRF)
			{
				SPI_State		= SPDR;//Dump read to clear flags
				SPIBuf.mState	&= ~SPI_RX_REQ;	
				SPIBuf.mState	&= ~SPI_TX_REQ;	
				SPIBuf.mState	|= SPI_ERR_OV;	
				
				SPCR_SPTIE	= 0;
				Select_MC33993(MC33993_DESEL);
			}
/*
			else if((SPI_State & SPI_MODF) == SPI_MODF)
			{
				SPIBuf.mState	&= ~SPI_RX_REQ;	
				SPIBuf.mState	&= ~SPI_TX_REQ;	
				SPIBuf.mState	= SPI_ERR_MODF;	
			}
			else
			{
				TEST_PIN_SG4	= 1;
			}
*/			
		}
#endif

#if INT_TIMER2_OV_EN			//TIM2 Overflow Vector	IF08
		interrupt void Timer2_OV_ISR(void){};
#endif

#if INT_T2C1_EN					//TIM2 Channel 1 Vector	IF07
		interrupt void T2C1_ISR(void){};
#endif

#if INT_T2C0_EN					//TIM2 Channel 0 Vector IF06
		interrupt void T2C0_ISR(void){};
#endif

#if INT_TIMER1_OV_EN			//TIM1 Overflow Vector	IF05
		interrupt void Timer1_OV_ISR(void){};
#endif

#if INT_T1C1_EN					//TIM1 Channel 1 Vector	IF04
		interrupt void T1C1_ISR(void){};
#endif

#if INT_T1C0_EN					//TIM1 Channel 0 Vector IF03  
		interrupt void T1C0_ISR(void)
		{
			L_U8	Dummy;
			LIN_TIC_Cntr_Str	tmpTmr;
			Dummy		= LIN_TIC_SC0;
			LIN_TIC_IF	= 0;
			
#if	LIN_DEBUG_MODE	== 1
			//LIN_TEST_PIN_IC	= ~LIN_TEST_PIN_IC;
#endif
			if((LIN_TIC_Counter == LIN_TIC_COUNTS_SYNCH)||(LIN_TIC_Counter == LIN_TIC_COUNTS_WAKEUP))
			{
				//Remember current timer value
				LIN_TIC_TmrH	= LIN_TIC_CNT_H;
				LIN_TIC_TmrL	= LIN_TIC_CNT_L;
				LIN_TIC_Counter--;
			}
			else if(--LIN_TIC_Counter == 0)
			{
				tmpTmr.Bytes.LIN_TIC_CounterH	= LIN_TIC_CNT_H;
				tmpTmr.Bytes.LIN_TIC_CounterL	= LIN_TIC_CNT_L;
				if(tmpTmr.LIN_TIC_Counter > LIN_TIC_Tmr) LIN_TIC_Period	= tmpTmr.LIN_TIC_Counter - LIN_TIC_Tmr;
				else LIN_TIC_Period	= 0xffff - LIN_TIC_Tmr + tmpTmr.LIN_TIC_Counter + 1;
				LIN_Transceiver_Status |= LIN_FLAG_ADJ;
				//LIN_TIC_Enable(0);
			}
		}
#endif

#if INT_PLL_EN					//PLL Vector	IF02
		interrupt void PLL_ISR(void){};
#endif

#if INT_IRQ_EN				//IRQ Vector	IF01
		IRQ_ISR(void){};
#endif

#if	INT_SWI_EN				//SWI vector  
		interrupt void SWI_ISR(void){};
#endif
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -