На самом деле переходить в режим 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.Опять же, вам необходимо сначала настроить прерывания, а также отключить все периферийные устройства.