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 |