From 6315f1b7bc65ce6dfae82207ee8e072c35e160fe Mon Sep 17 00:00:00 2001 From: "K.Ohta" Date: Fri, 21 Jun 2013 14:46:24 +0900 Subject: [PATCH] [UI] Stable update_display(). [EEPROM][WIP] Enabling to write to EEPROM, this is not working yet. --- eeprom.c | 56 ++++++++++++++++--------- main.c | 139 ++++++++++++++++++++++++++++++++++++--------------------------- 2 files changed, 115 insertions(+), 80 deletions(-) diff --git a/eeprom.c b/eeprom.c index 48ef095..96f18d6 100644 --- a/eeprom.c +++ b/eeprom.c @@ -26,10 +26,14 @@ * the executable file might be covered by the GNU General Public License. */ -#include "iodef.h" #include #include /* ONLY FOR PIC18x */ #include +#include "iodef.h" +#include "ui.h" +#include "eeprom.h" +#include "idle.h" +#include "ioports.h" unsigned char eeprom_readbyte(unsigned int offset) { @@ -50,35 +54,41 @@ unsigned char eeprom_readbyte(unsigned int offset) unsigned char eeprom_writebyte(unsigned int offset, unsigned char data) { - unsigned char eecon1; - + EEDATA = data; // Set address. EEADR = (offset & 0x0ff); #if defined(pic46k20) || defined(pic26k20) EEADRH = (offset & 0x300)>>8; #endif - EEDATA = data; // set eecon to read. - eecon1 = EECON1; - eecon1 &= ~(_EEPGD | _CFGS ); - EECON1 = eecon1 | _WREN; + EECON1bits.EEPGD = 0; + EECON1bits.CFGS = 0; + EECON1bits.WREN = 1; + INTCONbits.GIE = 0; // Disable Interrupt // Dummy write , needs from datasheet. EECON2 = 0x55; - Nop(); EECON2 = 0xaa; - Nop(); - eecon1 = EECON1; - Nop(); + EECON1bits.WR = 1; +// do { +// Nop(); +// Nop(); +// } while(EECON1bits.WR != 0); + + if(EECON1bits.WRERR != 0){ + EECON1bits.WREN = 0; + INTCONbits.GIE = 1; + return 0; // Error + } INTCONbits.GIE = 1; // Enable Interrupt - EECON1 = eecon1 & ~_WREN; - // Verify - if(eeprom_readbyte(offset) != data) { - return 0x00; // Bad - } else { - return 0xff; - } +// if(eeprom_readbyte(offset) != data) { +// return 0x00; // Bad +// } else { +// return 0xff; +// } + EECON1bits.WREN = 0; + return 0xff; } unsigned int calcsum_byte(unsigned int seed, unsigned char byte) @@ -110,8 +120,14 @@ unsigned int format_eeprom(unsigned int start, unsigned int bytes) unsigned int p = start; for(i = 0; i < bytes; i++) { - if(eeprom_writebyte(p, 0xff) == 0) return p; - p++; + ClrWdt(); + set_fmlamp(p & 1); + if(eeprom_writebyte(p, 0xff) == 0) { + _LOCATE(1,1); + printstr("Error"); + return p; + } + p = p + 1; } return 0xffff; // Normal end } \ No newline at end of file diff --git a/main.c b/main.c index b6f10d9..7aa681e 100644 --- a/main.c +++ b/main.c @@ -65,11 +65,11 @@ #pragma config FOSC=HS,FCMEN=ON,PWRT=ON,BOREN=ON,BORV=22 #pragma config WDTEN=ON,WDTPS=32768,PBADEN=OFF,HFOFST=ON,LPT1OSC=OFF,MCLRE=ON #pragma config STVREN=ON,DEBUG=ON -#pragma config CP0=OFF,CP1=OFF,CP2=OFF,CP3=OFF -#pragma config CPB=OFF,CPD=OFF -#pragma config WRT0=OFF,WRT1=OFF,WRT2=OFF,WRT3=OFF -#pragma config WRTC=OFF,WRTB=OFF,WRTD=OFF -#pragma config EBTR0=OFF,EBTR1=OFF,EBTR2=OFF,EBTR3=OFF,EBTRB=OFF +//#pragma config CP0=OFF,CP1=OFF,CP2=OFF,CP3=OFF +//#pragma config CPB=OFF,CPD=OFF +//#pragma config WRT0=OFF,WRT1=OFF,WRT2=OFF,WRT3=OFF +//#pragma config WRTC=OFF,WRTB=OFF,WRTD=OFF +//#pragma config EBTR0=OFF,EBTR1=OFF,EBTR2=OFF,EBTR3=OFF,EBTRB=OFF #endif //#define _LCD_DEBUG 1 @@ -150,6 +150,7 @@ unsigned char pollkeybuf[33]; unsigned int writeword_eeprom(unsigned int p, unsigned int *sum, unsigned int word) { + ClrWdt(); if(eeprom_writebyte(p, word >> 8) == 0) return p; // Error *sum = calcsum_byte(*sum, (word >> 8)); @@ -160,6 +161,7 @@ unsigned int writeword_eeprom(unsigned int p, unsigned int *sum, unsigned int wo unsigned int writebyte_eeprom(unsigned int p, unsigned int *sum, unsigned char b) { + ClrWdt(); if(eeprom_writebyte(p, b) == 0) return p; // Error *sum = calcsum_byte(*sum, b); return 0xffff; @@ -219,6 +221,8 @@ unsigned int readword_eeprom(unsigned int p, unsigned int *sum) unsigned char h,l; unsigned int s; + ClrWdt(); + h = eeprom_readbyte(p); *sum = calcsum_byte(*sum, h); @@ -233,6 +237,8 @@ unsigned char readbyte_eeprom(unsigned int p, unsigned int *sum) { unsigned char b; + ClrWdt(); + b = eeprom_readbyte(p); *sum = calcsum_byte(*sum, b); @@ -298,18 +304,14 @@ void toggle_amfm(void) { if(fm != 0){ fm = 0; -#ifndef _LCD_DEBUG - akc6955_chg_fm(fm); - akc6955_set_amband(amband); - akc6955_set_freq(amfreq); -#endif +// akc6955_chg_fm(fm); +// akc6955_set_amband(amband); +// akc6955_set_freq(amfreq); } else { fm = 0xff; -#ifndef _LCD_DEBUG - akc6955_chg_fm(fm); - akc6955_set_fmband(fmband); - akc6955_set_freq(fmfreq); -#endif +// akc6955_chg_fm(fm); +// akc6955_set_fmband(fmband); +// akc6955_set_freq(fmfreq); } } @@ -333,53 +335,65 @@ void set_volume(void) void update_display(void) { +// _HOME(); + _LOCATE(0,0); + printstr("S="); + print_numeric_nosupress(recv_signal, 3); + _LOCATE(0,1); +// _PUTCHAR(' '); if(fm != 0){ // FM - _LOCATE(0,0); if(fmband < AKC6955_BAND_TV1) { printstr("FM"); _PUTCHAR('1' + (fmband & 7)); + printstr(" "); } else if(fmband < AKC6955_BAND_FMUSER){ printstr("TV"); _PUTCHAR('1' + fmband - AKC6955_BAND_TV1); + printstr(" "); } else { // USER printstr("FMUSR"); } } else { // AM - _LOCATE(0,1); if(amband == AKC6955_BAND_LW) { - printstr("LW"); + printstr("LW "); } else if(amband 18) amband = 0; // amfreq = akc6955_setfreq(amfreq) @@ -758,7 +772,7 @@ void setfreq_updown(unsigned char ctlword) } break; case charcode_2: // Change band - if(fm != 0){ + if(fm == 0){ amband--; if(amband == 0) amband = 18; if(amband >= 18) amband = 18; @@ -780,15 +794,20 @@ void setfreq_updown(unsigned char ctlword) break; case charcode_4: // Down Freq; if(fm != 0){ + fmfreq -= 10; // fmfreq = akc6955_down_freq(10); // DOWN 100KHz } else { + amfreq -= 10; // amfreq = akc6955_down_freq(10); // DOWN 10KHz } break; case charcode_6: // Down Freq; if(fm != 0){ + fmfreq += 10; // fmfreq = akc6955_up_freq(10); // UP 100KHz } else { + amfreq += 10; + // amfreq = akc6955_up_freq(10); // UP 10KHz } break; @@ -885,11 +904,10 @@ static void setdefault(void) int main(void) { - char readchar; - unsigned char input_flag; unsigned char c; - unsigned int i; - unsigned char pa,pb,pc,pd; + unsigned int sum = 0; + unsigned char p; + #ifdef _LCD_DEBUG unsigned char power_flag; #endif @@ -952,9 +970,14 @@ int main(void) _CLS(); _LOCATE(0,0); printstr("Formatting..."); +// format_eeprom(2,200); +// writeword_eeprom(0, &sum, 0x1298); + + // _CLS(); _LOCATE(0,0); - format_eeprom(0,254); - save_eeprom(); + printstr("Save defaults"); + setdefault(); +// save_eeprom(); break; case 0x00: // Checksum error idle(65535-7128*2+1); @@ -967,7 +990,11 @@ int main(void) _CLS(); _LOCATE(0,0); printstr("Formatting..."); - format_eeprom(0,254); + format_eeprom(2,250); + writeword_eeprom(0, &sum, 0x1298); + _CLS(); + _LOCATE(0,0); + printstr("Save defaults"); setdefault(); save_eeprom(); break; @@ -997,24 +1024,24 @@ int main(void) _PUTCHAR(' '); //update_status(); // update_display(); + ClrWdt(); idle(ui_idlecount); _LOCATE(0,0); printstr("OK"); do { /* Main routine*/ - c = pollkeys(pollkeybuf, 60, 1); - if(c != 0){ - if((pollkeybuf[0] >= charcode_1) && (pollkeybuf[0] <= charcode_0)) { - // setfreq_updown(readchar); - } else { - // Other is skip - } - } + c = pollkeys(pollkeybuf, 60, 1); + p = 0; + while(c > 0) { + setfreq_updown(pollkeybuf[p]); + c--; + p++; + } // Check battery (include idle?) // Read AKJC6955's status // update_status(); // Putstring to LCD. - + _LOCATE(0,0); update_display(); if(backlight_counter > 0) { backlight_counter--; @@ -1022,15 +1049,7 @@ int main(void) } else { lcd_setbacklight(0x00, 0); // Turn OFF } -#ifdef _LCD_DEBUG - if(power_flag != 0x00) { - power_flag = 0x00; - } else { - power_flag = 0xff; - } -// setsignal_tune(power_flag); -#endif - idle(ui_idlecount); +// idle(ui_idlecount); } while(1); #endif } -- 2.11.0