Bond697 icon

PM_GoSleepMode

Bond697 | PRO | 02/24/12 02:53:01 AM UTC | 0 ⭐ | 705 👁️ | Never ⏰ | []
C |

20.47 KB

|

None

|

0 👍

/

0 👎

RAM_ARM9:0208C16C             @ =============== S U B R O U T I N E =======================================
RAM_ARM9:0208C16C
RAM_ARM9:0208C16C
RAM_ARM9:0208C16C             @ void __fastcall PM_GoSleepMode__(struct PMWakeUpTrigger *trigger, struct PMLogic *logic, unsigned __int16 keyPattern)
RAM_ARM9:0208C16C             PM_GoSleepMode__:                       @ CODE XREF: sub_2035474+48p
RAM_ARM9:0208C16C
RAM_ARM9:0208C16C             var_40          = -0x40
RAM_ARM9:0208C16C             var_3C          = -0x3C
RAM_ARM9:0208C16C             var_38          = -0x38
RAM_ARM9:0208C16C             var_34          = -0x34
RAM_ARM9:0208C16C             var_30          = -0x30
RAM_ARM9:0208C16C             var_2C          = -0x2C
RAM_ARM9:0208C16C             var_28          = -0x28
RAM_ARM9:0208C16C
RAM_ARM9:0208C16C F0 4F 2D E9                 STMFD   SP!, {R4-R11,LR}
RAM_ARM9:0208C170 1C D0 4D E2                 SUB     SP, SP, #0x1C
RAM_ARM9:0208C174 D8 32 9F E5                 LDR     R3, =0x2153020
RAM_ARM9:0208C178 00 70 A0 E1                 MOV     R7, R0
RAM_ARM9:0208C17C 1C 00 93 E5                 LDR     R0, [R3,#0x1C]  @ listp
RAM_ARM9:0208C180 00 10 8D E5                 STR     R1, [SP]
RAM_ARM9:0208C184 04 20 8D E5                 STR     R2, [SP,#4]
RAM_ARM9:0208C188 01 50 A0 E3                 MOV     R5, #1
RAM_ARM9:0208C18C 00 40 A0 E3                 MOV     R4, #0
RAM_ARM9:0208C190 98 01 00 EB                 BL      PMi_ExecuteList__
RAM_ARM9:0208C194 BC 02 9F E5                 LDR     R0, =0x4000208
RAM_ARM9:0208C198 B0 60 D0 E1                 LDRH    R6, [R0]
RAM_ARM9:0208C19C B0 40 C0 E1                 STRH    R4, [R0]
RAM_ARM9:0208C1A0 FE ED FF EB                 BL      OS_DisableInterrupts__
RAM_ARM9:0208C1A4 10 00 8D E5                 STR     R0, [SP,#0x10]
RAM_ARM9:0208C1A8 01 00 44 E2                 SUB     R0, R4, #1      @ intr
RAM_ARM9:0208C1AC FF E1 FF EB                 BL      OS_DisableIrqMask__
RAM_ARM9:0208C1B0 0C 00 8D E5                 STR     R0, [SP,#0xC]
RAM_ARM9:0208C1B4 AD EB FF EB                 BL      OS_IsTickAvailable__
RAM_ARM9:0208C1B8 00 00 50 E3                 CMP     R0, #0
RAM_ARM9:0208C1BC 08 00 A0 13                 MOVNE   R0, #8
RAM_ARM9:0208C1C0 04 00 A0 01                 MOVEQ   R0, R4
RAM_ARM9:0208C1C4 01 07 80 E3                 ORR     R0, R0, #0x40000 @ intr
RAM_ARM9:0208C1C8 E1 E1 FF EB                 BL      OS_SetIrqMask__
RAM_ARM9:0208C1CC 10 00 9D E5                 LDR     R0, [SP,#0x10]
RAM_ARM9:0208C1D0 F7 ED FF EB                 BL      OS_RestoreInterrupts__
RAM_ARM9:0208C1D4 7C 12 9F E5                 LDR     R1, =0x4000208
RAM_ARM9:0208C1D8 08 00 17 E3                 TST     R7, #8
RAM_ARM9:0208C1DC B0 00 D1 E1                 LDRH    R0, [R1]
RAM_ARM9:0208C1E0 B0 50 C1 E1                 STRH    R5, [R1]
RAM_ARM9:0208C1E4 06 00 00 0A                 BEQ     loc_208C204
RAM_ARM9:0208C1E8 4B EE FF EB                 BL      MB_IsMultiBootChild__
RAM_ARM9:0208C1EC FE 00 80 E2                 ADD     R0, R0, #0xFE
RAM_ARM9:0208C1F0 FF 0C 80 E2                 ADD     R0, R0, #0xFF00
RAM_ARM9:0208C1F4 00 08 A0 E1                 MOV     R0, R0,LSL#16
RAM_ARM9:0208C1F8 20 08 A0 E1                 MOV     R0, R0,LSR#16
RAM_ARM9:0208C1FC 01 00 50 E3                 CMP     R0, #1
RAM_ARM9:0208C200 08 70 C7 93                 BICLS   R7, R7, #8
RAM_ARM9:0208C204
RAM_ARM9:0208C204             loc_208C204:                            @ CODE XREF: PM_GoSleepMode__+78j
RAM_ARM9:0208C204 10 00 17 E3                 TST     R7, #0x10
RAM_ARM9:0208C208 06 00 00 0A                 BEQ     loc_208C228
RAM_ARM9:0208C20C D0 E6 FF EB                 BL      DSi.Check__
RAM_ARM9:0208C210 00 00 50 E3                 CMP     R0, #0
RAM_ARM9:0208C214 02 00 00 1A                 BNE     loc_208C224
RAM_ARM9:0208C218 52 13 00 EB                 BL      CTRDG_IsExisting__
RAM_ARM9:0208C21C 00 00 50 E3                 CMP     R0, #0
RAM_ARM9:0208C220 00 00 00 1A                 BNE     loc_208C228
RAM_ARM9:0208C224
RAM_ARM9:0208C224             loc_208C224:                            @ CODE XREF: PM_GoSleepMode__+A8j
RAM_ARM9:0208C224 10 70 C7 E3                 BIC     R7, R7, #0x10
RAM_ARM9:0208C228
RAM_ARM9:0208C228             loc_208C228:                            @ CODE XREF: PM_GoSleepMode__+9Cj
RAM_ARM9:0208C228                                                     @ PM_GoSleepMode__+B4j
RAM_ARM9:0208C228 01 13 A0 E3                 MOV     R1, #0x4000000
RAM_ARM9:0208C22C 01 0A 81 E2                 ADD     R0, R1, #0x1000
RAM_ARM9:0208C230 00 B0 91 E5                 LDR     R11, [R1]
RAM_ARM9:0208C234 00 50 90 E5                 LDR     R5, [R0]
RAM_ARM9:0208C238 18 01 00 EB                 BL      PM_GetLCDPower__
RAM_ARM9:0208C23C 14 90 8D E2                 ADD     R9, SP, #0x14
RAM_ARM9:0208C240 18 A0 8D E2                 ADD     R10, SP, #0x18
RAM_ARM9:0208C244 08 00 8D E5                 STR     R0, [SP,#8]
RAM_ARM9:0208C248 0A 00 A0 E1                 MOV     R0, R10         @ top
RAM_ARM9:0208C24C 09 10 A0 E1                 MOV     R1, R9          @ bottom
RAM_ARM9:0208C250 64 FF FF EB                 BL      PM_GetBackLight__
RAM_ARM9:0208C254 00 00 50 E3                 CMP     R0, #0
RAM_ARM9:0208C258 07 00 00 0A                 BEQ     loc_208C27C
RAM_ARM9:0208C25C F8 81 9F E5                 LDR     R8, =0x51D23
RAM_ARM9:0208C260
RAM_ARM9:0208C260             loc_208C260:                            @ CODE XREF: PM_GoSleepMode__+10Cj
RAM_ARM9:0208C260 08 00 A0 E1                 MOV     R0, R8
RAM_ARM9:0208C264 EC ED FF EB                 BL      DSi_regUnk__
RAM_ARM9:0208C268 0A 00 A0 E1                 MOV     R0, R10         @ top
RAM_ARM9:0208C26C 09 10 A0 E1                 MOV     R1, R9          @ bottom
RAM_ARM9:0208C270 5C FF FF EB                 BL      PM_GetBackLight__
RAM_ARM9:0208C274 00 00 50 E3                 CMP     R0, #0
RAM_ARM9:0208C278 F8 FF FF 1A                 BNE     loc_208C260
RAM_ARM9:0208C27C
RAM_ARM9:0208C27C             loc_208C27C:                            @ CODE XREF: PM_GoSleepMode__+ECj
RAM_ARM9:0208C27C 02 00 A0 E3                 MOV     R0, #2          @ target
RAM_ARM9:0208C280 00 10 A0 E3                 MOV     R1, #0          @ sw
RAM_ARM9:0208C284 D9 FE FF EB                 BL      PM_SetBackLight__
RAM_ARM9:0208C288 00 00 50 E3                 CMP     R0, #0
RAM_ARM9:0208C28C 09 00 00 0A                 BEQ     loc_208C2B8
RAM_ARM9:0208C290 C4 A1 9F E5                 LDR     R10, =0x51D23
RAM_ARM9:0208C294 02 90 A0 E3                 MOV     R9, #2
RAM_ARM9:0208C298 00 80 A0 E3                 MOV     R8, #0
RAM_ARM9:0208C29C
RAM_ARM9:0208C29C             loc_208C29C:                            @ CODE XREF: PM_GoSleepMode__+148j
RAM_ARM9:0208C29C 0A 00 A0 E1                 MOV     R0, R10
RAM_ARM9:0208C2A0 DD ED FF EB                 BL      DSi_regUnk__
RAM_ARM9:0208C2A4 09 00 A0 E1                 MOV     R0, R9          @ target
RAM_ARM9:0208C2A8 08 10 A0 E1                 MOV     R1, R8          @ sw
RAM_ARM9:0208C2AC CF FE FF EB                 BL      PM_SetBackLight__
RAM_ARM9:0208C2B0 00 00 50 E3                 CMP     R0, #0
RAM_ARM9:0208C2B4 F8 FF FF 1A                 BNE     loc_208C29C
RAM_ARM9:0208C2B8
RAM_ARM9:0208C2B8             loc_208C2B8:                            @ CODE XREF: PM_GoSleepMode__+120j
RAM_ARM9:0208C2B8 75 FD FF EB                 BL      waitForNextVFrame__ @ //---- wait a few frames after backlight off for avoiding appearance of afterimage
RAM_ARM9:0208C2BC 01 23 A0 E3                 MOV     R2, #0x4000000
RAM_ARM9:0208C2C0 00 00 92 E5                 LDR     R0, [R2]
RAM_ARM9:0208C2C4 01 1A 82 E2                 ADD     R1, R2, #0x1000
RAM_ARM9:0208C2C8 03 08 C0 E3                 BIC     R0, R0, #0x30000
RAM_ARM9:0208C2CC 00 00 82 E5                 STR     R0, [R2]
RAM_ARM9:0208C2D0 00 00 91 E5                 LDR     R0, [R1]
RAM_ARM9:0208C2D4 01 08 C0 E3                 BIC     R0, R0, #0x10000
RAM_ARM9:0208C2D8 00 00 81 E5                 STR     R0, [R1]
RAM_ARM9:0208C2DC 6C FD FF EB                 BL      waitForNextVFrame__
RAM_ARM9:0208C2E0 6B FD FF EB                 BL      waitForNextVFrame__
RAM_ARM9:0208C2E4 76 FF FF EB                 BL      readFSToDMA__
RAM_ARM9:0208C2E8 14 10 9D E5                 LDR     R1, [SP,#0x14]
RAM_ARM9:0208C2EC 60 01 9F E5                 LDR     R0, =0x2153020
RAM_ARM9:0208C2F0 00 80 A0 E3                 MOV     R8, #0
RAM_ARM9:0208C2F4 08 80 80 E5                 STR     R8, [R0,#8]
RAM_ARM9:0208C2F8 00 00 51 E3                 CMP     R1, #0
RAM_ARM9:0208C2FC 18 00 9D E5                 LDR     R0, [SP,#0x18]
RAM_ARM9:0208C300 80 80 A0 13                 MOVNE   R8, #0x80 @ 'Ç'
RAM_ARM9:0208C304 00 00 50 E3                 CMP     R0, #0
RAM_ARM9:0208C308 40 90 A0 E3                 MOV     R9, #0x40 @ '@'
RAM_ARM9:0208C30C 01 07 A0 E3                 MOV     R0, #0x40000    @ intr
RAM_ARM9:0208C310 00 90 A0 03                 MOVEQ   R9, #0
RAM_ARM9:0208C314 8E E1 FF EB                 BL      OS_SetIrqMask__
RAM_ARM9:0208C318 00 10 9D E5                 LDR     R1, [SP]
RAM_ARM9:0208C31C 04 00 9D E5                 LDR     R0, [SP,#4]
RAM_ARM9:0208C320 00 10 81 E1                 ORR     R1, R1, R0
RAM_ARM9:0208C324 09 00 87 E1                 ORR     R0, R7, R9
RAM_ARM9:0208C328 08 00 80 E1                 ORR     R0, R0, R8
RAM_ARM9:0208C32C 00 08 A0 E1                 MOV     R0, R0,LSL#16
RAM_ARM9:0208C330 01 18 A0 E1                 MOV     R1, R1,LSL#16
RAM_ARM9:0208C334 20 08 A0 E1                 MOV     R0, R0,LSR#16   @ trigger
RAM_ARM9:0208C338 21 18 A0 E1                 MOV     R1, R1,LSR#16   @ keyIntrData
RAM_ARM9:0208C33C 23 FE FF EB                 BL      PMi_SendSleepStart__
RAM_ARM9:0208C340 0C 81 9F E5                 LDR     R8, =0x2153020
RAM_ARM9:0208C344 08 00 98 E5                 LDR     R0, [R8,#8]
RAM_ARM9:0208C348 00 00 50 E3                 CMP     R0, #0
RAM_ARM9:0208C34C 03 00 00 1A                 BNE     loc_208C360
RAM_ARM9:0208C350
RAM_ARM9:0208C350             loc_208C350:                            @ CODE XREF: PM_GoSleepMode__+1F0j
RAM_ARM9:0208C350 E4 EF FF EB                 BL      OS_Halt__
RAM_ARM9:0208C354 08 00 98 E5                 LDR     R0, [R8,#8]
RAM_ARM9:0208C358 00 00 50 E3                 CMP     R0, #0
RAM_ARM9:0208C35C FB FF FF 0A                 BEQ     loc_208C350
RAM_ARM9:0208C360
RAM_ARM9:0208C360             loc_208C360:                            @ CODE XREF: PM_GoSleepMode__+1E0j
RAM_ARM9:0208C360 00 80 A0 E3                 MOV     R8, #0
RAM_ARM9:0208C364 41 EB FF EB                 BL      OS_IsTickAvailable__
RAM_ARM9:0208C368 00 00 50 E3                 CMP     R0, #0
RAM_ARM9:0208C36C 08 00 A0 13                 MOVNE   R0, #8
RAM_ARM9:0208C370 08 00 A0 01                 MOVEQ   R0, R8
RAM_ARM9:0208C374 01 07 80 E3                 ORR     R0, R0, #0x40000 @ intr
RAM_ARM9:0208C378 75 E1 FF EB                 BL      OS_SetIrqMask__
RAM_ARM9:0208C37C 08 00 17 E3                 TST     R7, #8
RAM_ARM9:0208C380 03 00 00 0A                 BEQ     loc_208C394
RAM_ARM9:0208C384 D4 00 9F E5                 LDR     R0, =0x4000214
RAM_ARM9:0208C388 00 00 90 E5                 LDR     R0, [R0]
RAM_ARM9:0208C38C 01 06 10 E3                 TST     R0, #0x100000
RAM_ARM9:0208C390 01 40 A0 13                 MOVNE   R4, #1
RAM_ARM9:0208C394
RAM_ARM9:0208C394             loc_208C394:                            @ CODE XREF: PM_GoSleepMode__+214j
RAM_ARM9:0208C394 00 00 54 E3                 CMP     R4, #0
RAM_ARM9:0208C398 01 70 A0 E3                 MOV     R7, #1
RAM_ARM9:0208C39C 19 00 00 1A                 BNE     loc_208C408
RAM_ARM9:0208C3A0 08 00 9D E5                 LDR     R0, [SP,#8]
RAM_ARM9:0208C3A4 01 00 50 E3                 CMP     R0, #1
RAM_ARM9:0208C3A8 07 00 00 1A                 BNE     loc_208C3CC
RAM_ARM9:0208C3AC
RAM_ARM9:0208C3AC             loc_208C3AC:                            @ CODE XREF: PM_GoSleepMode__+258j
RAM_ARM9:0208C3AC 07 00 A0 E1                 MOV     R0, R7          @ sw
RAM_ARM9:0208C3B0 07 10 A0 E1                 MOV     R1, R7          @ led
RAM_ARM9:0208C3B4 07 20 A0 E1                 MOV     R2, R7          @ skip
RAM_ARM9:0208C3B8 07 30 A0 E1                 MOV     R3, R7          @ isSync
RAM_ARM9:0208C3BC 28 00 00 EB                 BL      PMi_SetLCDPower__
RAM_ARM9:0208C3C0 01 00 50 E3                 CMP     R0, #1
RAM_ARM9:0208C3C4 F8 FF FF 1A                 BNE     loc_208C3AC
RAM_ARM9:0208C3C8 0A 00 00 EA                 B       loc_208C3F8
RAM_ARM9:0208C3CC             @ ---------------------------------------------------------------------------
RAM_ARM9:0208C3CC
RAM_ARM9:0208C3CC             loc_208C3CC:                            @ CODE XREF: PM_GoSleepMode__+23Cj
RAM_ARM9:0208C3CC 07 00 A0 E1                 MOV     R0, R7          @ status
RAM_ARM9:0208C3D0 5A FE FF EB                 BL      PMi_SetLED__
RAM_ARM9:0208C3D4 00 00 50 E3                 CMP     R0, #0
RAM_ARM9:0208C3D8 06 00 00 0A                 BEQ     loc_208C3F8
RAM_ARM9:0208C3DC 78 90 9F E5                 LDR     R9, =0x51D23
RAM_ARM9:0208C3E0
RAM_ARM9:0208C3E0             loc_208C3E0:                            @ CODE XREF: PM_GoSleepMode__+288j
RAM_ARM9:0208C3E0 09 00 A0 E1                 MOV     R0, R9
RAM_ARM9:0208C3E4 8C ED FF EB                 BL      DSi_regUnk__
RAM_ARM9:0208C3E8 07 00 A0 E1                 MOV     R0, R7          @ status
RAM_ARM9:0208C3EC 53 FE FF EB                 BL      PMi_SetLED__
RAM_ARM9:0208C3F0 00 00 50 E3                 CMP     R0, #0
RAM_ARM9:0208C3F4 F9 FF FF 1A                 BNE     loc_208C3E0
RAM_ARM9:0208C3F8
RAM_ARM9:0208C3F8             loc_208C3F8:                            @ CODE XREF: PM_GoSleepMode__+25Cj
RAM_ARM9:0208C3F8                                                     @ PM_GoSleepMode__+26Cj
RAM_ARM9:0208C3F8 01 03 A0 E3                 MOV     R0, #0x4000000
RAM_ARM9:0208C3FC 00 B0 80 E5                 STR     R11, [R0]
RAM_ARM9:0208C400 01 0A 80 E2                 ADD     R0, R0, #0x1000
RAM_ARM9:0208C404 00 50 80 E5                 STR     R5, [R0]
RAM_ARM9:0208C408
RAM_ARM9:0208C408             loc_208C408:                            @ CODE XREF: PM_GoSleepMode__+230j
RAM_ARM9:0208C408 36 08 A0 E3                 MOV     R0, #0x360000
RAM_ARM9:0208C40C 82 ED FF EB                 BL      DSi_regUnk__
RAM_ARM9:0208C410 40 50 9F E5                 LDR     R5, =0x4000208
RAM_ARM9:0208C414 B0 00 D5 E1                 LDRH    R0, [R5]
RAM_ARM9:0208C418 0C 00 9D E5                 LDR     R0, [SP,#0xC]   @ intr
RAM_ARM9:0208C41C B0 80 C5 E1                 STRH    R8, [R5]
RAM_ARM9:0208C420 4B E1 FF EB                 BL      OS_SetIrqMask__
RAM_ARM9:0208C424 10 00 9D E5                 LDR     R0, [SP,#0x10]
RAM_ARM9:0208C428 61 ED FF EB                 BL      OS_RestoreInterrupts__
RAM_ARM9:0208C42C B0 00 D5 E1                 LDRH    R0, [R5]
RAM_ARM9:0208C430 00 00 54 E3                 CMP     R4, #0
RAM_ARM9:0208C434 B0 60 C5 E1                 STRH    R6, [R5]
RAM_ARM9:0208C438 00 00 00 0A                 BEQ     loc_208C440
RAM_ARM9:0208C43C 9E FE FF EB                 BL      sub_208BEBC
RAM_ARM9:0208C440             @ ---------------------------------------------------------------------------
RAM_ARM9:0208C440
RAM_ARM9:0208C440             loc_208C440:                            @ CODE XREF: PM_GoSleepMode__+2CCj
RAM_ARM9:0208C440 0C 00 9F E5                 LDR     R0, =0x2153020
RAM_ARM9:0208C444 04 00 90 E5                 LDR     R0, [R0,#4]     @ listp
RAM_ARM9:0208C448 EA 00 00 EB                 BL      PMi_ExecuteList__
RAM_ARM9:0208C44C 1C D0 8D E2                 ADD     SP, SP, #0x1C
RAM_ARM9:0208C450 F0 8F BD E8                 LDMFD   SP!, {R4-R11,PC}
RAM_ARM9:0208C450             @ End of function PM_GoSleepMode__
RAM_ARM9:0208C450
RAM_ARM9:0208C450             @ ---------------------------------------------------------------------------
RAM_ARM9:0208C454 20 30 15 02 dword_208C454:  .long 0x2153020         @ DATA XREF: PM_GoSleepMode__+8r
RAM_ARM9:0208C454                                                     @ PM_GoSleepMode__+180r ...
RAM_ARM9:0208C458 08 02 00 04 dword_208C458:  .long 0x4000208         @ DATA XREF: PM_GoSleepMode__+28r
RAM_ARM9:0208C458                                                     @ PM_GoSleepMode__+68r ...
RAM_ARM9:0208C45C 23 1D 05 00 dword_208C45C:  .long 0x51D23           @ DATA XREF: PM_GoSleepMode__+F0r
RAM_ARM9:0208C45C                                                     @ PM_GoSleepMode__+124r ...
RAM_ARM9:0208C460 14 02 00 04 dword_208C460:  .long 0x4000214         @ DATA XREF: PM_GoSleepMode__+218r
 
-----------------------------------------------------------------------------------------------------------------------
 
void PM_GoSleepMode(PMWakeUpTrigger trigger, PMLogic logic, u16 keyPattern)
{
    BOOL    prepIrq;                   // IME
    OSIntrMode prepIntrMode;           // CPSR-IRQ
    OSIrqMask prepIntrMask;            // IE
    BOOL    powerOffFlag = FALSE;
 
    PMBackLightSwitch preTop;
    PMBackLightSwitch preBottom;
 
    u32     preGX;
    u32     preGXS;
    PMLCDPower preLCDPower;
 
    //---- call pre-callbacks
    PMi_ExecuteList(PMi_PreSleepCallbackList);
 
    //---- disable all interrupt
    prepIrq = OS_DisableIrq();         // IME       D
    prepIntrMode = OS_DisableInterrupts();      // CPSR-IRQ  D
    prepIntrMask = OS_DisableIrqMask((1 << OS_IRQ_TABLE_MAX) - 1);      // IE        D
 
    //---- interrupt setting
    (void)OS_SetIrqMask(OS_IE_FIFO_RECV);       // enable PXI from ARM7
    (void)OS_RestoreInterrupts(prepIntrMode);   // CPSR-IRQ  E
    (void)OS_EnableIrq();              // IME       E
 
    //---- check card trigger
    if (trigger & PM_TRIGGER_CARD)
    {
        //---- if multi boot child, ignore card check flag
        if (MB_IsMultiBootChild())
        {
            trigger &= ~PM_TRIGGER_CARD;
        }
    }
 
    //---- check cartridge trigger
    if (trigger & PM_TRIGGER_CARTRIDGE)
    {
        //---- if cartridge not exist, ignore cartridge check flag
        if (!CTRDG_IsExisting())
        {
            trigger &= ~PM_TRIGGER_CARTRIDGE;
        }
    }
 
    //---- remember gx state
    preGX = reg_GX_DISPCNT;
    preGXS = reg_GXS_DB_DISPCNT;
    preLCDPower = PM_GetLCDPower();
 
    //---- set backlight off
    (void)PM_GetBackLight(&preTop, &preBottom);
    (void)PM_SetBackLight(PM_LCD_ALL, PM_BACKLIGHT_OFF);
 
    //---- wait a few frames after backlight off for avoiding appearance of afterimage
    {
        vu32    vcount = OS_GetVBlankCount();
        while (vcount == OS_GetVBlankCount())
        {
        }
        vcount = OS_GetVBlankCount();
 
        reg_GX_DISPCNT = reg_GX_DISPCNT & ~REG_GX_DISPCNT_MODE_MASK;    // main screen off
        GXS_DispOff();
 
        while (vcount == OS_GetVBlankCount())
        {
        }
        vcount = OS_GetVBlankCount();
        while (vcount == OS_GetVBlankCount())
        {
        }
    }
 
    //---- send SLEEP_START command to ARM7
    {
        u16     param;
        param = (u16)(trigger
                      | preTop << PM_BACKLIGHT_RECOVER_TOP_SHIFT
                      | preBottom << PM_BACKLIGHT_RECOVER_BOTTOM_SHIFT);
        while (PMi_SendSleepStart(param, (u16)(logic | keyPattern)) != PM_SUCCESS)
        {
        }
    }
 
    //==== Halt ================
    OS_Halt();
    //==========================
 
    //---- wait 100ms
    OS_SpinWait(PMi_LCD_POWER_WAIT_TICK);
 
    //---- check card remove
    if ((trigger & PM_TRIGGER_CARD) && (OS_GetRequestIrqMask() & OS_IE_CARD_IREQ))
    {
        powerOffFlag = TRUE;
    }
 
    //---- turn LCD on, and restore gx state
    if (!powerOffFlag)
    {
        if (preLCDPower == PM_LCD_POWER_ON)
        {
            (void)PMi_SetLCDPower(PM_LCD_POWER_ON, PM_LED_ON, TRUE, FALSE);
        }
        else
        {
            (void)PMi_SetLED(PM_LED_ON);
        }
 
        reg_GX_DISPCNT = preGX;
        reg_GXS_DB_DISPCNT = preGXS;
    }
 
    //---- restore all interrupt
    (void)OS_DisableInterrupts();      // CPSR-IRQ  D (IME D in it)
    (void)OS_SetIrqMask(prepIntrMask); // IE        R
    (void)OS_RestoreInterrupts(prepIntrMode);   // CPSR-IRQ  R
    (void)OS_RestoreIrq(prepIrq);      // IME       R
 
    //---- power off if need
    if (powerOffFlag)
    {
        (void)PM_ForceToPowerOff();
    }
 
    //---- call post-callbacks
    PMi_ExecuteList(PMi_PostSleepCallbackList);
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎