uint32_t begin_time = millis();
while(true)
{
if (digitalRead(interruptpin) == HIGH )
{
begin_time = millis();
attachInterrupt(int, whatever, LOW);
SLEEP_MODE_PWR_DOWN;
}
if( millis() - begin_time > 1000 )
break;
}
The only this the whatever ISR should do is detachInterrupt.
Untested, but I was actually thinking about a similar thing a couple weeks ago. This is the method I came up with. Obviously will not compile as is, you will have to substitute in actual code for the parts I've shorthanded.