Wake from sleep (Software Serial vice Serial)

Would like ask You for advice.
I'm using atmega328p like (UNO). For saving batteries need sleep mode.
Periodically need to check user keyboard input from terminal-> FTDI-> Serial
At this moment I'm using SoftwareSerial for this and IT WORK perfect, ANY CHARACTER WAKE UP device from sleep.
To make some optimization I need to move this function to hardware serial pins (0,1) Software pins will work with GSM module.
My problem: device don't wake up from sleep from characters in hardware serial (and yes I read article about Sleep on Arduino manual. Author say that ONLY way to wake up is interrupts.....but with SoftwareSerial it works!!!)
Will appreciate any ideas.


it's part of my code....please don't pay attention for missing some functions...

#include <SoftwareSerial.h>

SoftwareSerial debugSerial = SoftwareSerial(MODEBUGRXPIN, MODEBUGTXPIN);

void setup() {

  setup_watchdog(9); // 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms,6=1sec,7=2sec,8=4 ec,9=8sec 
   ADCSRA &= ~(1<<ADEN);     // MC ADC OFF  
   set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
void loop(){
  if (wake_status == 1) hive.overnight_report(true);  //1 - weke up from Int_0 
  if (wake_status == 2) hive.report_alarm(1);               //2 - weke up from  Int_1 
  if (wake_status == 4) hive.system_monitor();          //4 - weke up from  Keyb  

//========================= sleep_functions ============================================
void setup_watchdog(byte ii) { // 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms,6=1sec,7=2sec,8=4 ec,9=8sec 
  byte bb;
  bb=ii & 7;
  if (ii > 7) bb|= (1<<5);
  bb|= (1<<WDCE);
  MCUSR &= ~(1<<WDRF);
  WDTCSR |= (1<<WDCE) | (1<<WDE);// start timed sequence
  WDTCSR = bb;       // set new watchdog timeout value

ISR(WDT_vect){        // is executed when  watchdog timed out
void int_0r(){        // is executed when Inn_0
void int_1r(){        // is executed when Inn_1
//======================== system_sleep =============================================
byte SMARTBHIVE::system_sleep(unsigned int sllep_time){          //sleeptime ??????? 8 ???
 Serial.print(millis());Serial.print(F(" Sleep for "));Serial.println(sllep_time);
  int_0=0; int_1=0;                    //reset flags
unsigned long ii; 
for (ii=0;ii<sllep_time/8;ii++){
  attachInterrupt(0, int_0r, RISING);
  attachInterrupt(1, int_1r, RISING);
  sleep_mode();                               // System sleeps here
  sleep_disable();                            // System continues execution here when watchdog timed out  or int
  if (f_wdt==0) break;                             // wake not from wdt
    unsigned long reading1;           // recover time from sleep
    unsigned long reading2;
        while (true) {
          reading1 =timer0_millis;
          reading2 =timer0_millis;
          if (reading1 == reading2){
            timer0_millis = 8100*ii + reading1;   
 if (ii== sllep_time/8){  
   #if DEBUGMODE < 5
     Serial.print(millis());Serial.println(F(" Wake WDT"));
  return(3);           //3 - exit on wdt 
 if (int_0==1) {
    #if DEBUGMODE < 5
      Serial.print(millis());Serial.println(F(" Wake Int_0"));
    return(1);          //1 - ????? ?? Int_0    
 if (int_1==1) {
  #if DEBUGMODE < 5
    Serial.print(millis());Serial.println(F(" Wake Int_1"));
  return(2);           //2 - ????? ?? Int_1    
    Serial.print(millis());Serial.println(F(" Wake Keyb"));
 return(4);         //4 - ????? ?? Keyb

Author say that ONLY way to wake up is interrupts.....but with SoftwareSerial it works!!!)

Because SoftwareSerial uses pin change interrupts. Hardware serial uses interrupts, too. But, those interrupts don't trigger waking up. Connect a jumper from the RX pin to pin 2; the arrival of serial data will trigger an interrupt on that pin; you can attach an ISR to that pin to make the Arduino wake up.

Thanks for reply.
Is it theoretically possible (for SoftwareSerial) use pin interrupts on pins like A3 A4 (wich I use for softwareserial) ?

If you look on my code function sleep() there are 4 exit code... for wdt, int0, int1, and keyboard. (and it work fine)
If any interrupt happen during sleep (wdt, int0, int1) it turn on corresponding flag.
If system wake up and all flags =0 - this mean it wake up from softwareserial.

I know about sending TX to int but all int pins used for other critical function.
Probably somebody know how to enable wake up for serial.