?lang_form? ?lang_select? ?lang_submit? ?lang_endform?
{HEADER END}
{FILE START}

library

?curdirlinks? - Rev 6

?prevdifflink? - Blame - ?getfile?

//*****************************************************************************
// File Name    : extinttest.c
// 
// Title                : example usage of external interrupt library functions
// Revision             : 1.0
// Notes                :       
// Target MCU   : Atmel AVR series
// Editor Tabs  : 4
// 
// Revision History:
// When                 Who                     Description of change
// -----------  -----------     -----------------------
// 14-Dec-2004  pstang          Created the program
//*****************************************************************************


//----- Include Files ---------------------------------------------------------
#include <avr/io.h>                     // include I/O definitions (port names, pin names, etc)
#include <avr/interrupt.h>      // include interrupt support

#include "global.h"             // include our global settings
#include "uart.h"               // include uart function library
#include "rprintf.h"    // include printf function library
#include "timer.h"              // include timer function library
#include "extint.h"             // include external interrupt library

// global variables
volatile u16 Int0Count;
volatile u16 Int1Count;

// functions
void extintTest(void);
void myInt0Handler(void);
void myInt1Handler(void);

//----- Begin Code ------------------------------------------------------------
int main(void)
{
        // initialize our libraries
        // initialize the UART (serial port)
        uartInit();
        // set the baud rate of the UART for our debug/reporting output
        uartSetBaudRate(115200);
        // initialize rprintf system
        rprintfInit(uartSendByte);
        // initialize timers
        timerInit();
        
        // run the test
        extintTest();

        return 0;
}

void extintTest(void)
{
        u16 temp0, temp1;

        // print a little intro message so we know things are working
        rprintf("\r\n\n\nWelcome to the External Interrupt library test program!\r\n");
        
        // initialize the external interrupt library
        rprintf("Initializing external interrupt library\r\n");
        extintInit();

        // configure external interrupts for rising-edge triggering.
        // when a rising-edge pulse arrives on INT0 or INT1,
        // the interrupt will be triggered
        rprintf("Configuring external interrupts\r\n");
        extintConfigure(EXTINT0, EXTINT_EDGE_RISING);
        extintConfigure(EXTINT1, EXTINT_EDGE_RISING);

        // attach user interrupt routines.
        // when the interrupt is triggered, the user routines will be executed
        rprintf("Attaching user interrupt routines\r\n");
        extintAttach(EXTINT0, myInt0Handler);
        extintAttach(EXTINT1, myInt1Handler);

        // enable the interrupts
        rprintf("Enabling external interrupts\r\n");
        // (support for this has not yet been added to the library)
        sbi(GIMSK, INT0);
        sbi(GIMSK, INT1);

        // In this loop we will count the number of external interrupts,
        // and therefore the number of rising edges, that occur in one second.
        // This is precisely the frequency, in cycles/second or Hz, of the signal
        // that is triggering the interrupt.

        while(1)
        {
                // reset interrupt counters
                Int0Count = 0;
                Int1Count = 0;
                // wait 1 second
                timerPause(1000);
                // get counter values
                temp0 = Int0Count;
                temp1 = Int1Count;
                // print results
                rprintf("Frequency on INT0 pin: %dHz -- On INT1 pin: %dHz\r\n", temp0, temp1);
        }
}

void myInt0Handler(void)
{
        // count this interrupt event
        Int0Count++;
}

void myInt1Handler(void)
{
        // count this interrupt event
        Int1Count++;
}

{FILE END}
{FOOTER START}

Powered by WebSVN v2.8.3