SERIAL PORT RECEIVE ATTACH DEMO PROGRAM Simple demo program showing how the serial port \"attach()\" method is used to interrupt when a character has been received into the USART. The main() program sets up the serial port baudrate, attaches the function pointer to the function to be called when a character is received on this serial port, and then loops and flashed some LEDs. Routine \"void SerialRecvInterrupt(void)\" is invoked anytime a character has been received by the by the USART.

Dependencies:   mbed

main.cpp

Committer:
YouTahDoug
Date:
2011-05-26
Revision:
0:444ff736d35e

File content as of revision 0:444ff736d35e:

//*****************************************************************************
//* SERIAL PORT RECEIVE ATTACH DEMO PROGRAM
//* Simple demo program showing how the serial port "attach()" method is used
//* to interrupt when a character has been received into the USART. 
//*
//* The main() program sets up the serial port baudrate, attaches the
//* function pointer to the function to be called when a character is received
//* on this serial port, and then loops and flashed some LEDs.
//* 
//* Routine "void SerialRecvInterrupt(void)" is invoked anytime a character 
//* has been received by the by the USART. 
//*
//*****************************************************************************
#include "mbed.h"
#include <ctype.h>

#define BFR_SIZE         32         // Needs to be a power of two.
#define BFR_WRAP_MASK  0x1F         // Modulo 32

unsigned char rcvBuffer[BFR_SIZE];  // Receive buffer. 
unsigned char inIdx;                // Read by background, written by Int Handler.
unsigned char outIdx;               // Read by Int Handler, written by Background.

DigitalOut myled(LED1);
Serial pc (USBTX,USBRX);

//*****************************************************************************
// mc serial receive interrupt handler
//***************************************************************************** 

void SerialRecvInterrupt (void)
{
    unsigned char c;
     
    c = pc.getc();                // On receive interrupt, get the character.
    
    while (!pc.writeable()){};    // Wait until xmit buffer is empty.
    pc.putc(c);                   // Echo char back out the serial port.
     
    while (!pc.writeable()){};    // Make sure transmit buffer is empty.
    pc.putc(toupper(c));          // Echo the uppercase value of input char.
}

//*****************************************************************************
// Main Program
//*****************************************************************************

int main() {
    int i;
    
    for (i=0; i<BFR_SIZE; i++) {  // Clear buffer if you have OCD. 
        rcvBuffer[i] = 0; 
    }

    inIdx  = 0;                   // Initialize bfr input and output pointers. 
    outIdx = 0;  
    
    pc.baud(38400);                                // USART to PC USB USART.
    pc.attach (&SerialRecvInterrupt, pc.RxIrq);    // Recv interrupt handler
    pc.printf ("Serial interrupt demo\n");          

    while(1) {
        myled = 1;
        wait(0.2);
        myled = 0;
        wait(0.2);
    }
}