📄 isr.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 + -