From bb2b446ef34c5f65e8c953c2f378623bcb82493c Mon Sep 17 00:00:00 2001 From: "K.Ohta" Date: Fri, 26 Jul 2013 10:55:29 +0900 Subject: [PATCH] [POWER] Shutdown EX-RF-AMP on turning off power, now still use 3mA. --- iodef.h | 1 + ioports.c | 16 ---------------- main.c | 18 +++++++++--------- power.c | 34 +++++++++++++++------------------- 4 files changed, 25 insertions(+), 44 deletions(-) diff --git a/iodef.h b/iodef.h index 879d297..1b2515f 100644 --- a/iodef.h +++ b/iodef.h @@ -161,6 +161,7 @@ extern "C" { * RF Preamp */ enum { + RFAMP_OFF = 0, RFAMP_FM = 1, RFAMP_MWLW = 2, RFAMP_SW = 1 diff --git a/ioports.c b/ioports.c index ddf1876..3812134 100644 --- a/ioports.c +++ b/ioports.c @@ -154,22 +154,6 @@ void io_intcountinit(void) TMR3_set(); } -void lcd_backlightinit(void) -{ -#if 0 - PSTRCON = 0b00000001; // P1A = PWM, P1B~P1D=PORT, Steeling sync to PWM. - CCP1CON = 0b00001100; // PWM, Low-Active. - ECCP1AS = 0b10000111; // Auto shutdown is disabled - // Use TMR2 as source. - PIE1 &= ~0b00000010; // TMR2 Interrupt disabled. - PIR1 &= ~0b00000010; // TMR2 Interrupt clear. - IPR1 &= ~0b00000010; // Priority = LOW - T2CON = 0b00000011; // Prescaler/Postscaler = 1:1, Temporally disabled TMR2. - TMR2 = 0x00; // Value; - PR2 = 0x65; // 19.61KHz - CCPR1L = 100; // Duty = 100; -#endif -} #if defined(pic18f23k22) || defined(pic18f24k22) || defined(pic18f25k22) || defined(pic18f26k22) || \ diff --git a/main.c b/main.c index 12fa035..d6cd9dd 100644 --- a/main.c +++ b/main.c @@ -205,12 +205,12 @@ DEF_INTLOW(intlow_handler) END_DEF DEF_INTHIGH(inthigh_handler) - DEF_HANDLER(SIG_RBIF, RBIF_handler) - DEF_HANDLER(SIG_EEIF, EEPROM_handler) - DEF_HANDLER(SIG_TMR3, TMR3_Handler) - DEF_HANDLER(SIG_INT1, EXINT_Handler) - DEF_HANDLER(SIG_INT2, EXINT_Handler) - DEF_HANDLER(SIG_AD, INADC_handler) + DEF_HANDLER(SIG_RBIF, RBIF_handler) + DEF_HANDLER(SIG_EEIF, EEPROM_handler) + DEF_HANDLER(SIG_TMR3, TMR3_Handler) + DEF_HANDLER(SIG_INT1, EXINT_Handler) + DEF_HANDLER(SIG_INT2, EXINT_Handler) + DEF_HANDLER(SIG_AD, INADC_handler) //DEF_HANDLER(SIG_SSP, I2C_handler) //DEF_HANDLER(SIG_BCOL, I2CBus_handler) END_DEF @@ -267,13 +267,13 @@ int main(void) idle_time_ms(300); // Wait for setup. switch(reset_status){ case RESET_MCLR: - power_off(0); // When press reset, state to power_off. + shutdown(0); // When press reset, state to power_off. break; case RESET_WDT: // Workaround random reset. - power_off(0); + shutdown(0); break; case RESET_BOR: - power_off(0); // Save and halt on BOR. + shutdown(0); // Save and halt on BOR. break; case RESET_SOFTWARE: // // do { diff --git a/power.c b/power.c index 01ef53d..7294d69 100644 --- a/power.c +++ b/power.c @@ -76,21 +76,11 @@ void power_on_inthook(void) { IOCB = 0x00; - IOCB |= 0x10; // IOCB4 ONLY. -#ifdef __SDCC -// INTCON &= ~(_RBIF | _RBIE); -// INTCON |= _GIE; -// INTCON |= (_GIE | _PEIE); +// IOCBbits.IOCB4 = 1; INTCONbits.RBIE = 0; INTCONbits.RBIF = 0; INTCONbits.GIE = 1; INTCONbits.PEIE = 1; - -#else - INTCON &= ~(_INTCON_RBIF_MASK | _INTCON_RBIE_MASK); -// INTCON |= _GIE; - INTCON |= (_INTCON_GIE_MASK | _INTCON_PEIE_MASK); -#endif } void power_on(unsigned char f) @@ -141,14 +131,11 @@ unsigned char chk_powerbutton(void) void shutdown(unsigned char save) { - _CLS(); - _LOCATE(0,0); +// _CLS(); + // _LOCATE(0,0); // printstr("Bye..."); - idle_time_ms(1500); // 1.5Sec - lcd_setbacklight(0, 0); - set_powerlamp(0); - _AM_STATLAMP = 0; - _FM_STATLAMP = 0; +// idle_time_ms(1500); // 1.5Sec + rfamp_power(RFAMP_OFF); // _CLS(); acm1602_suspend(LCD_I2CADDR); power_off(save); @@ -157,7 +144,15 @@ void shutdown(unsigned char save) void power_off(unsigned char save) { unsigned char sts; + if(save != 0) save_eeprom(); + + lcd_setbacklight(0, 0); + set_powerlamp(0); + _AM_STATLAMP = 0; + _FM_STATLAMP = 0; + power_on(0); + WDTCONbits.SWDTEN = 0; // Lame WDT OFF. sts = 0; do { @@ -169,7 +164,6 @@ void power_off(unsigned char save) INTCONbits.GIE = 0; INTCONbits.PEIE = 0; INTCONbits.RBIE = 1; - power_on(0); Sleep(); // Wake up if(INTCONbits.RBIF) { @@ -179,9 +173,11 @@ void power_off(unsigned char save) INTCONbits.RBIF = 0; INTCONbits.RBIE = 0; + OSCCONbits.IDLEN = 1; // Not Idle. INTCONbits.GIE = 1; INTCONbits.PEIE = 1; + WDTCONbits.SWDTEN = 1; //WDT ON. // Button pressed, software reset. Reset(); -- 2.11.0