В общем разобрался.
Для того что дергать ногу с определенным интервалом, например 5 сек, после каждого срабатывания будильника нужно его переустанавливать на нужный интервал вперед.
При установленном INTCN и A1IE и совпадении будильника устанавливается флаг A1F и на ноге INT/SQW появляется низкий уровень. При сбросе A1F на INT/SQW снова устанавливается высокий уровень. Флаг A1F устанавливает железка, а сбрасывает пользователь при обработке прерывания.
В общем алгоритм такой (работаем с первым будильником):
1. заводим свои флаги событий
2. цепляем обработчик ардуиновского INT1 или INT2 на FALLING
3. устанавливаем будильник например на 5 сек. При этом будильник будет срабатывать на пятой секунде каждой минуты.
4. разрешаем INTCN и A1IE и ждем прерывания
5. в прерывании поднимаем флаг сработавшего будильника и быстро вываливаемся из обработчика
6. в loop() ловим наш флаг, обрабатываем событие, сбрасываем A1F и ждем следующего пинка
Шаг пятый требует пояснений: процедуру сброса A1F нужно вынести за пределы обработчика прерывания. I2C слишком медленная для сброса A1F внутри прерывания и поэтому клинит ардуинку намертво. В прерывании мы просто поднимаем флаг срабатывания будильника а все остальные телодвижения в контексте основной программы.
Ну как то так
Всем спасибо за ответы!