Зачем просыпаться от ноги UART? По-моему ты уже дичь какую-то
делаешь. Проснёшься ты за десятки миллисекунд (столько кварц
заводится) и сообщение из UART уже потеряешь. А если кварц
работает, то и периферийный модуль UART от него тактироваться
может. И просыпаться проц может нет от ногодрыга, а от самого UART
(по факту приёма байта). Ты хочешь сказать, мол у тебя процессор
спит, а модем работает? Но как ты будешь время считать, если
генератор останавливаешь??? Система управления без сколько-нибудь точного времени -- невозможна. В принципе, я бы рассматривал следующие версии:
1) периферийные модули работают выборочно, тактовый генератор работает всегда от высокочастотного кварца (так часовой кварц может быть не нужен -- врема можно спрашивать у модема);
2) периферийные модули работают выборочно, тактовый генератор работает всегда от внутреннего генератора, периодически подстраиваемого по периоду импульсов от постоянно работающего часового кварца (так потребление меньше и высокочастотный кварц не нужен);
3) периферийные модули останавливаются (или переключаются на медленный внутренний генератор), точность отсчёта времени теряется, если нужно -- происходит пробуждение от модема (то, что ты, видимо, хочешь).
Мне последний вариант кажется безумным, я за вариант 2 как лучший или вариант 1 как наиболее простой. Ибо переключения и остановки генераторов вызовут неебические сложности с самыми разными периферийными и программными модулями (которые не смогут так просто остановиться -- это сейчас кажется, мол всё просто, взял и уснул, а потом образуется МНОГОЗАДАЧНАЯ система с параллельными МАЛОСВЯЗАННЫМИ задачами и каждому нужно что-то своё, и на ходу передёрнуть тактовый генератор -- безумная идея.
Вообще побудка и засыпание модема и контроллера могут осуществляться через GPIO, по крайней мере у SIMCOM это предусмотрено:
1) контроллер может усыплять модем сигналом DTR (соответственно его нужно поднимать перед каждой командой и опускать после получения ответа, ну и AT+CSCLK=1);
2) модем может будить контроллер сигналом RI -- он встаёт на ~120мс на каждое "unsolicited" сообщение, и звонки, и SMS-ки.
Т.к. RI встаёт на достаточно большой промежуток времени, то его заметить можно не обязательно прерыванием, а тупо опросом (достаточно ~10 раз в секунду, можно запросто будиться по таймеру, проверять состояние ноги и засыпать дальше).
Но я хочу повторить, на мой взгляд остановка периферии и генератора контроллера при работающем модеме выглядит дико во всех случаях, когда функционал прибора в целом достаточно тяжёлый (охранные функции, обработка звука, ввод-вывод пользователю, GPS, ряд периодических процессов, взаимодействие с радиомодулем, CAN...) А коль генератор работает и может тактировать UART, то побудка от GPIO не особенно и нужна. Можно сразу принять и проинтерпретировать сообщение.