Инструкция ATMega32u4 SLEEP

Я читал техническое описание ATMega34u2 и пытаюсь разобраться со спящим режимом. Я знаю, что большинство людей рекомендуют использовать библиотеку avr/sleep.h. Но я хотел попробовать использовать регистры. Я довольно новичок во всем этом, так что извините, если это простой вопрос, но я не могу найти никого, кто делал бы это так.

При проверке того, какие регистры нужно настроить, он говорит следующее:

Бит SE должен быть записан в логическую единицу, чтобы микроконтроллер перешел в спящий режим при выполнении инструкции SLEEP. Чтобы избежать перехода микроконтроллера в спящий режим, если это не является целью программиста, рекомендуется записывать бит включения спящего режима (SE) в единицу непосредственно перед выполнением инструкции SLEEP и очищать его сразу после пробуждения.

Теперь я понимаю настройку бита, но что такое инструкция сна? Как мне вызвать это в моей программе Arduino?

, 👍0

Обсуждение

погуглите "язык ассемблера спящего режима ATMega34u2", @jsotola


1 ответ


2

SLEEP — это ассемблерная инструкция. Вы можете выполнить сборку с помощью встроенной сборки GCC.

Короче:

asm volatile("SLEEP");

будет делать то, что вы хотите.

Файл avr/sleep.h имеет sleep_cpu(), определенный как:

#define sleep_cpu()                              \
do {                                             \
  __asm__ __volatile__ ( "sleep" "\n\t" :: );    \
} while(0)

Что, по сути, одно и то же — просто заключено в блок, чтобы несколько изолировать его от остального кода.

,