Инструкция ATMega32u4 SLEEP
Я читал техническое описание ATMega34u2 и пытаюсь разобраться со спящим режимом. Я знаю, что большинство людей рекомендуют использовать библиотеку avr/sleep.h. Но я хотел попробовать использовать регистры. Я довольно новичок во всем этом, так что извините, если это простой вопрос, но я не могу найти никого, кто делал бы это так.
При проверке того, какие регистры нужно настроить, он говорит следующее:
Бит SE должен быть записан в логическую единицу, чтобы микроконтроллер перешел в спящий режим при выполнении инструкции SLEEP. Чтобы избежать перехода микроконтроллера в спящий режим, если это не является целью программиста, рекомендуется записывать бит включения спящего режима (SE) в единицу непосредственно перед выполнением инструкции SLEEP и очищать его сразу после пробуждения.
Теперь я понимаю настройку бита, но что такое инструкция сна? Как мне вызвать это в моей программе Arduino?
@PythonQuestions, 👍0
Обсуждение1 ответ
SLEEP
— это ассемблерная инструкция. Вы можете выполнить сборку с помощью встроенной сборки GCC.
Короче:
asm volatile("SLEEP");
будет делать то, что вы хотите.
Файл avr/sleep.h
имеет sleep_cpu()
, определенный как:
#define sleep_cpu() \
do { \
__asm__ __volatile__ ( "sleep" "\n\t" :: ); \
} while(0)
Что, по сути, одно и то же — просто заключено в блок, чтобы несколько изолировать его от остального кода.
- Захват ввода с включенным спящим режимом на плате ATM32u4 работает только при каждом втором чтении в спящем режиме.
- Arduino перестал работать: avrdude: ser_open(): не удается установить com-состояние
- Keyboard.print() пропускает клавиши
- Проблема с кристаллом на пользовательской плате atmega32u4
- Прерывание переполнения Timer0 не работает
- Можно ли оживить плату Arduino Leonardo (mini beetle)?
- Подключение нескольких MPU 6050 к Micro/Lenardo
- Arduino Leonardo/Pro Micro сон и USB
погуглите "язык ассемблера спящего режима ATMega34u2", @jsotola