OSDN Git Service

[UI] Stable update_display().
authorK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 21 Jun 2013 05:46:24 +0000 (14:46 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 21 Jun 2013 05:46:24 +0000 (14:46 +0900)
[EEPROM][WIP] Enabling to write to EEPROM, this is not working yet.

eeprom.c
main.c

index 48ef095..96f18d6 100644 (file)
--- a/eeprom.c
+++ b/eeprom.c
  *  the executable file might be covered by the GNU General Public License.
  */
 
-#include "iodef.h"
 #include <sdcc-lib.h>
 #include <pic18fregs.h> /* ONLY FOR PIC18x */
 #include <signal.h>
+#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 (file)
--- a/main.c
+++ b/main.c
 #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 <AKC6955_BAND_SW1) { //MW
             printstr("MW");
             _PUTCHAR('1' + amband - AKC6955_BAND_MW1);
-        } else if(amband < AKC6955_BAND_AMUSER) { //MW
+            printstr("  ");
+        } else if(amband <AKC6955_BAND_SW10) { //MW
             printstr("SW");
             _PUTCHAR('1' + amband - AKC6955_BAND_SW1);
+            printstr("  ");
+        } else if(amband < AKC6955_BAND_AMUSER) { //MW
+            printstr("SW1");
+            _PUTCHAR('0' + amband - AKC6955_BAND_SW10);
+            _PUTCHAR(' ');
         } else if(amband == AKC6955_BAND_MW4){
-            printstr("MW4");
+            printstr("MW4  ");
         } else {
             printstr("AMUSR");
         }
      }
-     _LOCATE(16-4 ,1);
-     if(fm != 0){
-         printstr("MHz");
-     } else {
-         printstr("KHz");
-     }
-     _LOCATE(16-5, 1);
+//     _LOCATE(15-5 ,1);
+     _LOCATE(15-4-6, 1);
      if(fm != 0){
          int freq_lo = fmfreq % 100;
          int freq_hi = fmfreq / 100;
-         print_numeric(freq_hi, 0xff);
+         print_numeric_nosupress(freq_hi, 3);
          _PUTCHAR('.');
-         print_numeric(freq_lo, 0xff);
+         print_numeric_nosupress(freq_lo, 2);
      } else {
-         print_numeric(amfreq, 0xff);
+         _PUTCHAR(' ');
+         print_numeric_nosupress(amfreq, 5);
      }
      // Signal
-     _LOCATE(0, 0);
-     printstr("S=");
-     print_numeric(recv_signal, 0xff);
+     _LOCATE(15-4, 1);
+     if(fm != 0){
+         printstr("MHz");
+     } else {
+         printstr("KHz");
+     }
+    _HOME();
 }
 
 void scan_start()
@@ -739,7 +753,7 @@ void setfreq_updown(unsigned char ctlword)
 {
     switch(ctlword){
         case charcode_8: // Change band
-            if(fm != 0){
+            if(fm == 0){
                 amband++;
                 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
 }