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

📄 isr.c

📁 嵌入式操作系统Salvo 在单片机C8051F350上的移植
💻 C
字号:
/************************************************************ 
Copyright (C) 1995-2002 Pumpkin, Inc. and its
Licensor(s). Freely distributable.

$Source: C:\\RCS\\d\\salvo\\tut\\tu1\\isr.c,v $
$Author: aek $
$Revision: 3.22 $
$Date: 2003-07-28 18:41:36-07 $

Source for tutorial programs. Contains the interrupt service
routine and other interrupt-associated code for all of
the tutorials. Organized by compiler and target (SYS*).

************************************************************/

#include "isr.h"
#include <salvo.h>


#if   defined(USE_INTERRUPTS)

#if   defined(SYSA) || defined(SYSH) || defined(SYSF) \
 ||   defined(SYSP)

#if   defined(SYSA) || defined(SYSH) || defined(SYSF)	
 
void interrupt IntVector( void )

#elif defined(SYSP)

#pragma vector=0x08

__interrupt void IntVector( void )
#endif
{
    if ( T0IE && T0IF ) {
        T0IF = 0;    
        TMR0 -= TMR0_RELOAD;
         
        OSTimer();
    }
}


#elif defined(SYSE)

#pragma interrupt ISRHigh save=PROD,section(".tmpdata")

void ISRHigh( void )
{
	if ( INTCONbits.TMR0IE && INTCONbits.TMR0IF ) {
		INTCONbits.TMR0IF = 0;
		TMR0 -= TMR0_RELOAD;
		
		OSTimer();
	}
}

#pragma code IntVectorHigh = 0x08
void IntVectorHigh( void )
{ 	
	_asm
	goto	ISRHigh
	_endasm
}



#elif defined(SYSI)

/* Reload values for Timer0 - 5msec interrupts for Oscillator at 11.0592 MHz */
/* This code courtesy Michael Stepanov.                                      */
//#define TIMER_H   			238 /* TH0 reload value                  */
//#define TIMER_L						0   /* TL0 reload value                  */


#define TIMER_H   			0x10 /* TH0 reload value                  */
#define TIMER_L					0xBE   /* TL0 reload value                  */


void timer0 (void) interrupt 1 //using 2
{
	/* stop, reload and start timer. */
	TR0 =       0;

	TL0 = TIMER_L;

	TH0 = TIMER_H;
	
	TR0 =       1;
	
	OSTimer();
}


#elif defined(SYSL)

ROM_VECTOR(NMI,  IntVector);
ROM_VECTOR(INT1, IntVector);
ROM_VECTOR(INT2, IntVector);
ROM_VECTOR(INT3, IntVector);
ROM_VECTOR(INT4, IntVector);
ROM_VECTOR(INT5, IntVector);
ROM_VECTOR(INT6, IntVector);
ROM_VECTOR(INT7, IntVector);

#pragma interrupt_level 1
void fast interrupt IntVector( void )
{
	OSTimer();
}



#elif defined(SYSM)

ROM_VECTOR(0x0B, timer0);

interrupt void timer0 ( void)
{
	OSTimer();
}


#elif defined(SYSQ) || defined(SYSR) || defined(SYSS) || defined (SYSX) /* MSP430 */

#if   defined(SYSQ)
#if (__VER__ < 200)
interrupt[TIMERA0_VECTOR] void Timer_A (void)
#else
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
#endif
#elif defined(SYSR)
interrupt[TIMERA0_VECTOR] void Timer_A (void)
#elif defined(SYSS)
#pragma interrupt_handler Timer_A:TIMERA0_VECTOR
void Timer_A (void)
#elif defined(SYSX)
void Timer_A (void) __interrupt[TIMERA0_VECTOR]
#endif
{
	CCR0 += 10000;
    OSTimer(); 
}                      


#elif defined(SYST) /* M68HC11 */ 

#pragma interrupt_handler intVector

void intVector ( void )
{
	/* clear RTIF */
	TFLG2 |= 0b01000000;
	
    OSTimer(); 
}                      


#pragma abs_address:0x00EB	   /* RTI BUFFALO 3.4 EVB11  */

	asm(" jmp _intVector");	   

#pragma end_abs_address


#elif defined(SYSU) /* Z8 Encore */

#pragma interrupt
void IntVector(void) 
{	
    OSTimer(); 
}


#elif defined(SYSV) /* AVR */

#pragma interrupt_handler IntVector:iv_TIMER1_CAPT IntVector:iv_TIMER1_COMPA

void IntVector(void) 
{	
    OSTimer(); 
}


#elif defined(SYSW) /* TMS320C28x */
/* vectors are defined in vectors.asm */

interrupt void ISR14(void) /* Timer 2 is in INTVECT #14 */
{	
    OSTimer(); 
}


#elif defined(SYSY) /* AVR */
#include <avr/signal.h>

SIGNAL(SIG_OUTPUT_COMPARE1A)
{	
    OSTimer(); 
}


#elif defined(SYSAA) /* TMS320C240x */
/* vectors are defined in vectors.asm */

#define HEARTBEAT_LED_PRESCALAR 50 
unsigned char prescalar = HEARTBEAT_LED_PRESCALAR;

interrupt void ISR3(void) /* Timer 2 is in INT3 */
{	
	/* clear T2PINT flag -- required for this type of interrupt.*/
    *EVAIFRB = *EVAIFRB & 0x0001;      
	
	/* System tick period is 10ms @ 30MHz. Toggle the IOPC0 pin */
	/*  every 250ms via a divide-by-50 prescalar.               */
	if (--prescalar == 0)
	{
		prescalar = HEARTBEAT_LED_PRESCALAR;
		
		/* XOR the IOPC0 bit to toggle the pin */
	    *PCDATDIR = *PCDATDIR ^ 0x0001;    
	}

	/* a system tick occured, so call OSTimer(). */
    OSTimer(); 
    
}


#else /* SYS* not defined */                        
#error Undefined Salvo test system (SYS*). Definition required.

#endif

#endif

⌨️ 快捷键说明

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