atmega128 슬립모드 예제

이 시퀀스는 인터럽트를 사용하지 않도록 설정한 상태에서 some_condition의 원자성 테스트를 보장합니다. 조건이 충족되면 절전 모드가 준비되고 SEI 명령 직후에 SLEEP 명령이 예약됩니다. 인터럽트 트리거가 트리거되기 전에 SEI가 실행되도록 보장된 직후의 침입이 보장되기 때문에 장치가 실제로 절전 모드로 들어올 것입니다. 일부 장치는 잠들기 전에 갈색 꺼지기(BOD)를 비활성화할 수 있습니다. 이것은 또한 잠자는 동안 전력을 감소시킬 것입니다. 특정 AVR 장치에 이 기능이 있는 경우 추가 매크로가 정의됩니다. 이 매크로는 절전 전에 BOD를 비활성화하기 위한 시간 제시 순서를 올바르게 구현하는 인라인 된 어셈블리 코드를 생성합니다. 그러나 BOD가 비활성화된 후 장치가 절전 모드로 전환될 수 있는 주기가 제한되어 있으며, 그렇지 않으면 BOD가 실제로 비활성화되지 않습니다. 권장 되는 방법은 BOD (sleep_bod_disable()를 사용 하지 않도록 설정 하 고 인터럽트 (sei))를 설정 하 고 다음과 같이 절전 모드 (sleep_cpu))에 장치를 넣어: 절전 모드로 장치를 넣어.

SE 비트는 미리 설정해야 하며 나중에 지우는 것이 좋습니다. 장치를 절전 모드로 전환하고 SE 비트를 설정한 후 지우십시오. 이 헤더 파일에는 실제로 장치를 절전 모드로 전환하기 위해 여러 매크로가 제공됩니다. 가장 간단한 방법은 set_sleep_mode() (일반적으로 CPU가 절전 모드에 있지만 모든 주변 시계가 여전히 실행 중인 유휴 모드로 기본설정됨)를 사용하여 원하는 절전 모드를 선택적으로 설정한 다음 sleep_mode()를 호출하는 것입니다. 이 매크로는 자동으로 수면 활성화 비트를 설정하고, 절전 모드로 이동하고, 절전 모드 활성화 비트를 지웁깁니다. SLEEP 명령을 사용하면 응용 프로그램이 전력 소모를 상당히 줄일 수 있습니다. AVR 장치는 다른 절전 모드로 넣을 수 있습니다. 사용 중인 장치와 관련된 자세한 내용은 데이터시트를 참조하십시오. sleep_mode() 매크로가 일부 상황에서 경합 조건을 유발할 수 있으므로 수면 활성화(SE) 비트를 조작하고 실제로 SLEEP 명령을 발급하는 개별 단계는 매크로 sleep_enable(), sleep_disable(및 sleep_disable()에 제공됩니다.

또한 절전 모드에서 장치를 절전 모드로 깨어나는 인터럽트를 놓치지 않도록 하는 테스트 및 절전 시나리오를 사용할 수 있습니다. 장치를 절전 모드로 들어 넣습니다. 장치가 절전 모드에서 해제되는 방법은 set_sleep_mode() 함수로 선택한 특정 모드에 따라 다릅니다. 자세한 내용은 장치의 데이터 시트를 참조하십시오. 하드웨어가 재설정될 때까지 CPU를 완전히 잠그는 것이 목적이 아니라면 절전 모드로 이동하기 전에 인터럽트를 활성화해야 합니다. 잠들기 전에 BOD를 비활성화합니다. 모든 장치에서 사용할 수 없습니다.