Subversion Repositories pentevo

Rev

Rev 589 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 589 Rev 656
Line 1... Line 1...
1
#include <avr/io.h>
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
2
#include <avr/interrupt.h>
-
 
3
#include <avr/eeprom.h>
3
#include <util/twi.h>
4
#include <util/twi.h>
4
 
5
 
5
#include "pins.h"
6
#include "pins.h"
6
#include "mytypes.h"
7
#include "mytypes.h"
7
#include "main.h"
8
#include "main.h"
Line 158... Line 159...
158
        if ( (tmp == 28) && ( ( gluk_regs[GLUK_REG_YEAR]&0x03 ) == 0 ) ) tmp++;
159
        if ( (tmp == 28) && ( ( gluk_regs[GLUK_REG_YEAR]&0x03 ) == 0 ) ) tmp++;
159
 
160
 
160
        return tmp;
161
        return tmp;
161
}
162
}
162
 
163
 
-
 
164
static UBYTE read_eeprom(UBYTE offset)
-
 
165
{
-
 
166
        UWORD ptr = gluk_regs[GLUK_REG_A];
-
 
167
        ptr = (ptr<<4) + (0x0F&offset);
-
 
168
 
-
 
169
        //wait for eeprom
-
 
170
        eeprom_busy_wait();
-
 
171
 
-
 
172
        return eeprom_read_byte((UBYTE*)ptr);
-
 
173
}
-
 
174
 
-
 
175
static void write_eeprom(UBYTE offset, UBYTE data)
-
 
176
{
-
 
177
        UWORD ptr = gluk_regs[GLUK_REG_A];
-
 
178
        ptr = (ptr<<4) + (0x0F&offset);
-
 
179
 
-
 
180
        //wait for eeprom
-
 
181
        eeprom_busy_wait();
-
 
182
 
-
 
183
        eeprom_write_byte ((UBYTE*)ptr, data);
-
 
184
}
-
 
185
 
163
void rtc_init(void)
186
void rtc_init(void)
164
{
187
{
165
        //SCL frequency = CPU clk/ ( 16 + 2* (TWBR) * 4^(TWPS) )
188
        //SCL frequency = CPU clk/ ( 16 + 2* (TWBR) * 4^(TWPS) )
166
        // 11052000 / (16 + 2*48 ) = 98678,5Hz (100000Hz recommended for PCF8583)
189
        // 11052000 / (16 + 2*48 ) = 98678,5Hz (100000Hz recommended for PCF8583)
167
        TWSR = 0;
190
        TWSR = 0;
Line 338... Line 361...
338
        }
361
        }
339
        else
362
        else
340
        {
363
        {
341
                if ( index >= 0xF0 )
364
                if ( index >= 0xF0 )
342
                {
365
                {
-
 
366
                        if ( (gluk_regs[GLUK_REG_C]&GLUK_C_EEPROM_FLAG)!=0 )
-
 
367
                        {
-
 
368
                                //read from eeprom
-
 
369
                                tmp = read_eeprom(index);
-
 
370
                        }
-
 
371
                        else
-
 
372
                        {
343
                        //read version
373
                                //read version
344
                        tmp = GetVersionByte( index&0x0F );
374
                                tmp = GetVersionByte( index&0x0F );
345
                }
375
                        }
-
 
376
                }
346
                else
377
                else
347
                {
378
                {
348
                        //other from nvram
379
                        //other from nvram
349
                        //- on PCF8583 nvram started from #10
380
                        //- on PCF8583 nvram started from #10
350
                        //- on 512vi1[DS12887] nvram started from #0E
381
                        //- on 512vi1[DS12887] nvram started from #0E
Line 423... Line 454...
423
                }
454
                }
424
                else
455
                else
425
                {
456
                {
426
                        switch( index )
457
                        switch( index )
427
                        {
458
                        {
-
 
459
                                case GLUK_REG_A:
-
 
460
                                        //EEPROM address
-
 
461
                                        gluk_regs[GLUK_REG_A]=data;
-
 
462
                                        break;
-
 
463
 
428
                                case GLUK_REG_B:
464
                                case GLUK_REG_B:
429
                                        //BCD or Hex mode set
465
                                        //BCD or Hex mode set
430
                                        gluk_regs[GLUK_REG_B]=(data&GLUK_B_DATA_MODE)|GLUK_B_INIT_VALUE;
466
                                        gluk_regs[GLUK_REG_B]=(data&GLUK_B_DATA_MODE)|GLUK_B_INIT_VALUE;
431
                                        break;
467
                                        break;
432
 
468
 
Line 442... Line 478...
442
                                                gluk_regs[GLUK_REG_C] = gluk_regs[GLUK_REG_C]^GLUK_C_CAPS_LED_FLAG;
478
                                                gluk_regs[GLUK_REG_C] = gluk_regs[GLUK_REG_C]^GLUK_C_CAPS_LED_FLAG;
443
                                                modes_register = modes_register^MODE_CAPSLED;
479
                                                modes_register = modes_register^MODE_CAPSLED;
444
                                                //set led on keyboard
480
                                                //set led on keyboard
445
                                                ps2keyboard_send_cmd(PS2KEYBOARD_CMD_SETLED);
481
                                                ps2keyboard_send_cmd(PS2KEYBOARD_CMD_SETLED);
446
                                        }
482
                                        }
-
 
483
                                        if ( (data&GLUK_C_EEPROM_FLAG) != (gluk_regs[GLUK_REG_C]&GLUK_C_EEPROM_FLAG) )
-
 
484
                                        {
-
 
485
                                                //switch EEPROM mode
-
 
486
                                                gluk_regs[GLUK_REG_C] = gluk_regs[GLUK_REG_C]^GLUK_C_EEPROM_FLAG;
-
 
487
                                        }
447
                                        break;
488
                                        break;
448
                        }
489
                        }
449
                }
490
                }
450
        }
491
        }
451
        else
492
        else
452
        {
493
        {
453
                if ( index >= 0xF0 )
494
                if ( index >= 0xF0 )
454
                {
495
                {
-
 
496
                        if ( (gluk_regs[GLUK_REG_C]&GLUK_C_EEPROM_FLAG)!=0 )
-
 
497
                        {
-
 
498
                                //write to eeprom
-
 
499
                                write_eeprom(index, data);
-
 
500
                        }
-
 
501
                        else
-
 
502
                        {
455
                        //set version data type
503
                                //set version data type
456
                        SetVersionType( data );
504
                                SetVersionType( data );
457
                }
505
                        }
-
 
506
                }
458
                else
507
                else
459
                {
508
                {
460
                        //write to nvram
509
                        //write to nvram
461
                        //- on PCF8583 nvram started from #10
510
                        //- on PCF8583 nvram started from #10
462
                        //- on 512vi1[DS12887] nvram started from #0E
511
                        //- on 512vi1[DS12887] nvram started from #0E
463
                        rtc_write( (index/*&0x3F*/)+2, data);
512
                        rtc_write( (index/*&0x3F*/)+2, data);
464
                }
513
                }
465
        }
514
        }
466
}
515
}
-
 
516