Как войти в режимы DOZE и SLEEP на iMX27 (ARM926)? - PullRequest
0 голосов
/ 19 декабря 2011

Справочное руководство противоречиво говорит о режимах пониженного энергопотребления на iMX27. Я хотел бы иметь две функции: doze () и sleep (), которые настраивают процессор и часы для правильного входа в эти режимы с низким энергопотреблением, но примеры в руководстве, похоже, не работают. Я посмотрел на код ядра Linux, и это была некоторая помощь, но я подумал, что я хотел бы спросить здесь, есть ли у кого-нибудь какой-нибудь код (сборка руки лучше) для этих функций уже.

DOZE : Режим ожидания определяется как время, когда ARM9 выполняет ожидание команды прерывания, после чего подача буферизованного тактового сигнала в MCU отключается. Последовательность действий для перевода системы в режим ожидания:

  1. Включение нужных прерываний для пробуждения из режима ожидания.
  2. Отключить прерывание сторожевого таймера.
  3. Выполнить инструкцию ожидания прерывания.

СОН

Спящий режим определяется как отключение всех тактовых выходов DPLL. Последовательность операций и критерии должны быть выполнены до того, как система отключит MPLL и SPLL. Последовательность режима ожидания запускается, когда бит MPEN в регистре CSCR очищается, отключая MPLL. Это действие также автоматически отключает SPLL. Последовательность перевода системы в спящий режим следующая:

  1. Отключить периферийные устройства AHB от доступа к шине.
  2. Включить требуемые прерывания, которые будут использоваться для активации системы.
  3. Отключить прерывание сторожевого таймера.
  4. Установите требуемое значение в SD_CNT (регистр CSCR) для обратного отсчета выключения.
  5. Отключите MPLL, очистив бит MPEN (регистр CSCR).
  6. Выполнить инструкцию ожидания прерывания.

Спасибо

1 Ответ

1 голос
/ 22 марта 2012

На самом деле переходить в режим Doze не так уж и много (в C этот код окружен asm ();):

      " MCR p15, 0, r1, c7, c0, 4 \n"

поможет вам.Сначала вам нужно будет настроить все необходимые прерывания.

Для режима ожидания, вот какая-то сборка

         " MOV R0,#+268435456 \n"
         " ORR R0,R0,#0x27000 \n"
         " LDR r1, [r0, #0x0] \n"
         " ORR r1, r1, #0x01000000 \n"
         " STR r1, [r0, #0x0] \n"
         " BIC r1, r1, #0x00000001 \n"
         " STR r1, [r0, #0x0] \n"
        " MCR p15, 0, r1, c7, c0, 4 \n"

, где # + 268435456 - адрес для регистра CSCR.Этот код установит SD_CNT в 1, отключит MPLL, а затем перейдет в WFI.Опять же, вам необходимо сначала настроить прерывания, а также отключить все периферийные устройства.

...