void onInterrupt(UsartEventType uet) {

      if(uet==UsartEventType::EVENT_RECEIVE) {

        // receive the next character

        _buffer[_index++]=_usart.receive();

        // if we've got the 5 characters then disable receiving interrupts
        // and enable sending

        if(_index==5) {
          _index=0;
          _usart.disableInterrupts(MyUsartInterrupt::RECEIVE);
          _usart.enableInterrupts(MyUsartInterrupt::TRANSMIT);
        }
      }
      else if(uet==UsartEventType::EVENT_READY_TO_TRANSMIT) {

        // send the next character

        _usart.send(_buffer[_index++]);

        // if we've sent back all 5 then disable sending interrupts and go back
        // to receiving again

        if(_index==5) {
          _index=0;
          _usart.disableInterrupts(MyUsartInterrupt::TRANSMIT);
          _usart.enableInterrupts(MyUsartInterrupt::RECEIVE);
        }
      }
    }
    void run()  {

      // we're using interrupts, set up the NVIC

      Nvic::initialise();

      // set the initial string pointer

      _dataToSend="Hello World";

      // register ourselves as an observer of the USART interrupts

      _usart.insertObserver(*this);

      // enable interrupts. this will cause an immediate ready-to-send interrupt

      _usart.enableInterrupts(MyUsartInterrupt::TRANSMIT);

      // finished

      for(;;);
    }
    void run()  {

      /*
       * We're using interrupts, set up the NVIC
       */

      Nvic::initialise();

      // register ourselves as an observer of the USART interrupts

      _usart.UsartInterruptEventSender.insertSubscriber(
          UsartInterruptEventSourceSlot::bind(this,&UsartReceiveInterruptsTest::onInterrupt)
        );

      // enable the receive interrupt. this will start the whole chain of events

      _index=0;
      _usart.enableInterrupts(MyUsartInterrupt::RECEIVE);

      // it's all going on in the background now. wish us luck :)

      for(;;);
    }