초보의 아웅다웅 설계하기/Adstar

ADSTAR - Sleep mode

로망와니 2022. 6. 17. 15:18

Halt3는 Cpu 코어만 Sleep로 들어가는 모드입니다.

크게 전류 소모량이 줄어드는지는 모르겠습니다.

조금 더 Deep Sleep 하는 모드도 있는데 기본적으로 30mA 전, 후의 전류가 소모된다고 해서 Sleep 모드가 중요하다면 ADSTAR가 아닌 다른 칩을 사용하는게 맞을 것 같습니다.

 

 

/* Sleep mode enable - halt3 */
#define SleepMode_Config() *(U32*)0x80023C00 |= (1<<2);

/*******************************************************************************
* Function Name : 
* Description   : 
* Parameters    : None
* Return        : 
*******************************************************************************/
int main(void)
{
SleepMode_Config();
...

Sleepmode_Enter();

...

}

static U8 Btn_isr = 0;
void EIRQ0_ISR(void)
{
if(*R_EINTMOD & (F_EINTMOD_0ST) ){
// debugstring("EIRQ0 Rising Edge In ISR\r\n\r\n");
if(Btn_isr == 1)
Btn_isr = 2;
}
else{
Btn_isr = 1;
// debugstring("EIRQ0 Falling Edge In ISR\r\n");
}
}

/*******************************************************************************
* Function Name : 
* Description   : 
* Parameters    : None
* Return        : None
*******************************************************************************/
void Sleepmode_Enter(void)
{
U32 i, GPAF0, GPAF1, GPAF2, GPAF3, GPAF4, GPAF5, GPAF6, GPAF7, GPAF8, GPAF9;
    U32 Sleep_timeout = 0x2000000;

/* LD Control BD Disable */
MAINBD_POWER_DIS();
/* Buzzer Off*/
BUZZEROFF();
/* BackLight OFF */
BACKLIGHTDIS();
/* LED OFF */
STATLED1OFF();
STATLED2OFF();
STATLED3OFF();
STATLED4OFF();
/* LCD DE Disable */
DISP_DE_DIS();
/* USB Disable */
USBDISBLE();
USB_SLAVE();
/* STOP Timer */
STOP_Timer(TIMER1);

GPAF0 = *R_PAF0;
GPAF1 = *R_PAF1;
GPAF2 = *R_PAF2;
GPAF3 = *R_PAF3;
GPAF4 = *R_PAF4;
GPAF5 = *R_PAF5;
GPAF6 = *R_PAF6;
GPAF7 = *R_PAF7;
GPAF8 = *R_PAF8;
GPAF9 = *R_PAF9;

*R_PAF1 = F_PAF1_2_GP2;
*R_PAF2 = 0;
*R_PAF3 = F_PAF3_2_GP2 | F_PAF3_3_GP3;
*R_PAF4 = F_PAF4_0_EIRQ0 | F_PAF4_7_GP7;
*R_PAF5 = F_PAF5_0_GP0 | F_PAF5_1_GP1 | F_PAF5_2_GP2;
*R_PAF6 = 0;
*R_PAF7 = 0;
*R_PAF8 = 0;

*R_EINTMOD = F_EINTMOD_0MOD_AEDGE;
set_interrupt(INTNUM_EIRQ0, EIRQ0_ISR);
enable_interrupt(INTNUM_EIRQ0, TRUE);

while(1){
/* Enter Sleep mode */
asm("halt 3");
if(Btn_isr > 1){
enable_interrupt(INTNUM_EIRQ0, FALSE);
Btn_isr = 0;
Sleepmode.SleepTick = 0;
*R_PAF0 = GPAF0;
*R_PAF1 = GPAF1;
*R_PAF2 = GPAF2;
*R_PAF3 = GPAF3;
*R_PAF4 = GPAF4;
*R_PAF5 = GPAF5;
*R_PAF6 = GPAF6;
*R_PAF7 = GPAF7;
*R_PAF8 = GPAF8;
*R_PAF9 = GPAF9;

/* LCD DE Disable */
DISP_DE_EN();
/* LD Control BD Enable */
MAINBD_POWER_EN();
/* Status LED Turn On */
STATLED2ON();
/* Backlight IC Enable */
BACKLIGHTEN();
/* Initialize Timer1 */
SET_Timer(TIMER1, TIMER1MS);
/* Pannel Setting */
Pannel_Change(DISP_PannelNONE, DISP_PannelPassword);
*R_INTPENDCLR = (INTNUM_EIRQ0+0x20);
/* Set Packet Error Times */
g_chPacketTimeout = PACKETTIMEOUT_SLEEP_TIMES;

while(TP_nIRQ()){
/* Check Time */
if((Sleep_timeout--) == 0){
break;
}
}
break;
}
STATLED2TOGGLE();
}
}