ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
1068541 Топик полностью
fk0, легенда (12.01.2021 01:13, просмотров: 357) ответил Aleksey_75 на ))) "оно" не может проснуться по ногам usart_rx (приходится exti прикручивать), а ты про узб )))
Зачем просыпаться от ноги 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 не особенно и нужна. Можно сразу принять и проинтерпретировать сообщение.

[ZX]