mirror of
https://github.com/arduino/Arduino.git
synced 2024-11-30 11:24:12 +01:00
105 lines
3.8 KiB
C
Executable File
105 lines
3.8 KiB
C
Executable File
/*! \file extint.h \brief External-Interrupt function library. */
|
|
//*****************************************************************************
|
|
//
|
|
// File Name : 'extint.h'
|
|
// Title : External-Interrupt function library
|
|
// Author : Pascal Stang - Copyright (C) 2002-2004
|
|
// Created : 5/10/2002
|
|
// Revised : 11/16/2004
|
|
// Version : 1.0
|
|
// Target MCU : Atmel AVR Series
|
|
// Editor Tabs : 4
|
|
//
|
|
// Notes: This library provides convenient standardized configuration and
|
|
// access to external interrupts. The library is designed to make
|
|
// it possible to write code that uses external interrupts without
|
|
// digging into the processor datasheets to find register names and
|
|
// bit-defines. The library also strives to allow code which uses
|
|
// external interrupts to more easily cross-compile between different
|
|
// microcontrollers.
|
|
//
|
|
// NOTE: Using this library has certain advantages, but also adds
|
|
// overhead and latency to interrupt servicing. If the smallest
|
|
// code size or fastest possible latency is needed, do NOT use this
|
|
// library; link your interrupts directly.
|
|
//
|
|
//*****************************************************************************
|
|
|
|
#ifndef EXTINT_H
|
|
#define EXTINT_H
|
|
|
|
#include "global.h"
|
|
|
|
// constants/macros/typdefs
|
|
|
|
// interrupt macros for attaching user functions to external interrupts
|
|
// use these with extintAttach( intNum, function )
|
|
#define EXTINT0 0x00 ///< External Interrupt 0
|
|
#define EXTINT1 0x01 ///< External Interrupt 1
|
|
#define EXTINT2 0x02 ///< External Interrupt 2
|
|
#define EXTINT3 0x03 ///< External Interrupt 3
|
|
#define EXTINT4 0x04 ///< External Interrupt 4
|
|
#define EXTINT5 0x05 ///< External Interrupt 5
|
|
#define EXTINT6 0x06 ///< External Interrupt 6
|
|
#define EXTINT7 0x07 ///< External Interrupt 7
|
|
|
|
#define EXTINT_LEVEL_LOW 0x00 ///< Trigger on low level
|
|
#define EXTINT_EDGE_ANY 0x01 ///< Trigger on any edge
|
|
#define EXTINT_EDGE_FALLING 0x02 ///< Trigger on falling edge
|
|
#define EXTINT_EDGE_RISING 0x03 ///< Trigger on rising edge
|
|
|
|
// type of interrupt handler to use
|
|
// *do not change unless you know what you're doing
|
|
// Value may be SIGNAL or INTERRUPT
|
|
#ifndef EXTINT_INTERRUPT_HANDLER
|
|
#define EXTINT_INTERRUPT_HANDLER SIGNAL
|
|
#endif
|
|
|
|
// processor-adaptive defines
|
|
// mainstream AVR processors generally have 1,2,3, or 8 external interrupts
|
|
// (if someone has a better idea of how to manage this, let me know)
|
|
#ifdef SIG_INTERRUPT7
|
|
#define EXTINT_NUM_INTERRUPTS 8
|
|
#else
|
|
#ifdef SIG_INTERRUPT2
|
|
#define EXTINT_NUM_INTERRUPTS 3
|
|
#else
|
|
#ifdef SIG_INTERRUPT1
|
|
#define EXTINT_NUM_INTERRUPTS 2
|
|
#else
|
|
#define EXTINT_NUM_INTERRUPTS 1
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
// functions
|
|
|
|
//! initializes extint library
|
|
void extintInit(void);
|
|
|
|
//! Configure external interrupt trigger
|
|
void extintConfigure(u08 interruptNum, u08 configuration);
|
|
|
|
// extintAttach and extintDetach commands
|
|
// These functions allow the attachment (or detachment) of any user
|
|
// function to an external interrupt. "Attaching" one of your own
|
|
// functions to an interrupt means that it will be called whenever
|
|
// that interrupt is triggered. Example usage:
|
|
//
|
|
// extintAttach(EXTINT0, myInterruptHandler);
|
|
// extintDetach(EXTINT0);
|
|
//
|
|
// extintAttach causes the myInterruptHandler() to be attached, and therefore
|
|
// execute, whenever the corresponding interrupt occurs. extintDetach removes
|
|
// the association and executes no user function when the interrupt occurs.
|
|
// myInterruptFunction must be defined with no return value and no arguments:
|
|
//
|
|
// void myInterruptHandler(void) { ... }
|
|
|
|
//! Attach a user function to an external interrupt
|
|
void extintAttach(u08 interruptNum, void (*userHandler)(void) );
|
|
//! Detach a user function from an external interrupt
|
|
void extintDetach(u08 interruptNum);
|
|
|
|
#endif
|