FreeCalypso > hg > freecalypso-sw
comparison gsm-fw/bsp/abb+spi/abb.c @ 154:47754cdb6248
abb.c compiles!
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 17 Nov 2013 05:53:10 +0000 |
parents | 26472940e5b0 |
children | 99e44a92274c |
comparison
equal
deleted
inserted
replaced
153:65efffcb28dc | 154:47754cdb6248 |
---|---|
32 | 32 |
33 #include "abb.h" | 33 #include "abb.h" |
34 #include "../clkm.h" // for wait_ARM_cycles function | 34 #include "../clkm.h" // for wait_ARM_cycles function |
35 #include "abb_inline.h" | 35 #include "abb_inline.h" |
36 #include "../ulpd.h" // for FRAME_STOP definition | 36 #include "../ulpd.h" // for FRAME_STOP definition |
37 | |
38 #include "../../include/sys_types.h" | |
39 #include "../../riviera/rv/general.h" | |
37 #include "../../nucleus/nucleus.h" // for NUCLEUS functions and types | 40 #include "../../nucleus/nucleus.h" // for NUCLEUS functions and types |
38 #include "../../L1/include/l1_types.h" | 41 #include "../../L1/include/l1_types.h" |
39 | 42 |
40 #include "../../include/sys_types.h" | 43 #if 0 // FreeCalypso |
41 #include "../../riviera/rv/general.h" | |
42 #if 0 | |
43 #include "buzzer/buzzer.h" // for BZ_KeyBeep_OFF function | 44 #include "buzzer/buzzer.h" // for BZ_KeyBeep_OFF function |
44 #endif | 45 #endif |
45 | 46 |
46 #if (VCXO_ALGO == 1) | 47 #if (VCXO_ALGO == 1) |
47 #include "../../L1/include/l1_ctl.h" | 48 #include "../../L1/include/l1_ctl.h" |
50 #if (RF_FAM == 35) | 51 #if (RF_FAM == 35) |
51 #include "../../L1/cust0/l1_rf35.h" | 52 #include "../../L1/cust0/l1_rf35.h" |
52 #endif | 53 #endif |
53 | 54 |
54 #if (RF_FAM == 12) | 55 #if (RF_FAM == 12) |
55 #include "tpudrv12.h" | 56 #include "../../L1/tpudrv/tpudrv12.h" |
56 #include "../../L1/cust0/l1_rf12.h" | 57 #include "../../L1/cust0/l1_rf12.h" |
57 #endif | 58 #endif |
58 | 59 |
59 #if (RF_FAM == 10) | 60 #if (RF_FAM == 10) |
60 #include "../../L1/cust0/l1_rf10.h" | 61 #include "../../L1/cust0/l1_rf10.h" |
94 /* This function waits for the first IBIC access. */ | 95 /* This function waits for the first IBIC access. */ |
95 /* */ | 96 /* */ |
96 /*-----------------------------------------------------------------------*/ | 97 /*-----------------------------------------------------------------------*/ |
97 void ABB_Wait_IBIC_Access(void) | 98 void ABB_Wait_IBIC_Access(void) |
98 { | 99 { |
99 #if (ANLG_FAM ==1) | 100 #if (ANALOG ==1) |
100 // Wait 6 OSCAS cycles (100 KHz) for first IBIC access | 101 // Wait 6 OSCAS cycles (100 KHz) for first IBIC access |
101 // (i.e wait 60us + 10% security marge = 66us) | 102 // (i.e wait 60us + 10% security marge = 66us) |
102 wait_ARM_cycles(convert_nanosec_to_cycles(66000)); | 103 wait_ARM_cycles(convert_nanosec_to_cycles(66000)); |
103 #elif ((ANLG_FAM ==2) || (ANLG_FAM == 3)) | 104 #elif ((ANALOG ==2) || (ANALOG == 3)) |
104 // Wait 6 x 32 KHz clock cycles for first IBIC access | 105 // Wait 6 x 32 KHz clock cycles for first IBIC access |
105 // (i.e wait 187us + 10% security marge = 210us) | 106 // (i.e wait 187us + 10% security marge = 210us) |
106 wait_ARM_cycles(convert_nanosec_to_cycles(210000)); | 107 wait_ARM_cycles(convert_nanosec_to_cycles(210000)); |
107 #endif | 108 #endif |
108 } | 109 } |
308 } | 309 } |
309 #endif // ABB_SEMAPHORE_PROTECTION | 310 #endif // ABB_SEMAPHORE_PROTECTION |
310 | 311 |
311 ABB_SetPage(PAGE0); | 312 ABB_SetPage(PAGE0); |
312 | 313 |
313 #if (ANLG_FAM == 1) || (ANLG_FAM == 2) | 314 #if (ANALOG == 1) || (ANALOG == 2) |
314 ABB_SetPage(PAGE0); | 315 ABB_SetPage(PAGE0); |
315 reg_val = ABB_ReadRegister(VRPCSTS); | 316 reg_val = ABB_ReadRegister(VRPCSTS); |
316 #elif (ANLG_FAM == 3) | 317 #elif (ANALOG == 3) |
317 ABB_SetPage(PAGE1); | 318 ABB_SetPage(PAGE1); |
318 reg_val = ABB_ReadRegister(VRPCCFG); | 319 reg_val = ABB_ReadRegister(VRPCCFG); |
319 #endif | 320 #endif |
320 | 321 |
321 #if ((ABB_SEMAPHORE_PROTECTION == 2) || (ABB_SEMAPHORE_PROTECTION == 3)) | 322 #if ((ABB_SEMAPHORE_PROTECTION == 2) || (ABB_SEMAPHORE_PROTECTION == 3)) |
341 /* */ | 342 /* */ |
342 /*------------------------------------------------------------------------*/ | 343 /*------------------------------------------------------------------------*/ |
343 void ABB_on(SYS_UWORD16 modules, SYS_UWORD8 bRecoveryFlag) | 344 void ABB_on(SYS_UWORD16 modules, SYS_UWORD8 bRecoveryFlag) |
344 { | 345 { |
345 volatile SYS_UWORD16 status; | 346 volatile SYS_UWORD16 status; |
346 #if ((ANLG_FAM ==2) || (ANLG_FAM == 3)) | 347 #if ((ANALOG ==2) || (ANALOG == 3)) |
347 SYS_UWORD32 reg; | 348 SYS_UWORD32 reg; |
348 #endif | 349 #endif |
349 | 350 |
350 // a possible cause of the recovery is that ABB is on Oscas => switch from Oscas to CLK13 | 351 // a possible cause of the recovery is that ABB is on Oscas => switch from Oscas to CLK13 |
351 if (bRecoveryFlag) | 352 if (bRecoveryFlag) |
377 ABB_SetPage(PAGE0); | 378 ABB_SetPage(PAGE0); |
378 | 379 |
379 // This transmission disables MADC,AFC,VDL,VUL modules. | 380 // This transmission disables MADC,AFC,VDL,VUL modules. |
380 ABB_WriteRegister(TOGBR1, 0x0155); | 381 ABB_WriteRegister(TOGBR1, 0x0155); |
381 | 382 |
382 #if (ANLG_FAM == 1) | 383 #if (ANALOG == 1) |
383 // This transmission disables Band gap fast mode Enable BB charge. | 384 // This transmission disables Band gap fast mode Enable BB charge. |
384 ABB_WriteRegister(VRPCCTL2, 0x1fc); | 385 ABB_WriteRegister(VRPCCTL2, 0x1fc); |
385 | 386 |
386 /* *********** DC/DC enabling selection ************************************************************** */ | 387 /* *********** DC/DC enabling selection ************************************************************** */ |
387 // This transmission changes the register page in OMEGA for usp to pg1. | 388 // This transmission changes the register page in OMEGA for usp to pg1. |
407 } | 408 } |
408 | 409 |
409 /* ************************ SELECTION OF TEST MODE FOR ABB **************************************** */ | 410 /* ************************ SELECTION OF TEST MODE FOR ABB **************************************** */ |
410 /* This test configuration allows visibility on BULENA,BULON,BDLON,BDLENA on test pins */ | 411 /* This test configuration allows visibility on BULENA,BULON,BDLON,BDLENA on test pins */ |
411 /* ***************************************************************************************************/ | 412 /* ***************************************************************************************************/ |
412 #if (BOARD==6)&& (ANLG_FAM==1) //BUG01967 to remove access to TAPCTRL (EVA4 board and Nausica) | 413 #if (BOARD==6)&& (ANALOG==1) //BUG01967 to remove access to TAPCTRL (EVA4 board and Nausica) |
413 // This transmission enables Omega test register. | 414 // This transmission enables Omega test register. |
414 ABB_WriteRegister(TAPCTRL, 0x01); | 415 ABB_WriteRegister(TAPCTRL, 0x01); |
415 | 416 |
416 // This transmission select Omega test instruction. | 417 // This transmission select Omega test instruction. |
417 ABB_WriteRegister(TAPREG, TSPTEST1); | 418 ABB_WriteRegister(TAPREG, TSPTEST1); |
435 if(modules & MADC) // check if the ADC is enabled | 436 if(modules & MADC) // check if the ADC is enabled |
436 { | 437 { |
437 // This transmission connects the resistive divider to MB and BB. | 438 // This transmission connects the resistive divider to MB and BB. |
438 ABB_WriteRegister(BCICTL1, 0x0005); | 439 ABB_WriteRegister(BCICTL1, 0x0005); |
439 } | 440 } |
440 #elif ((ANLG_FAM == 2) || (ANLG_FAM == 3)) | 441 #elif ((ANALOG == 2) || (ANALOG == 3)) |
441 // Restore the ABB checks and debouncing if start on TESTRESETZ | 442 // Restore the ABB checks and debouncing if start on TESTRESETZ |
442 | 443 |
443 // This transmission changes the register page in the ABB for usp to pg1. | 444 // This transmission changes the register page in the ABB for usp to pg1. |
444 ABB_SetPage(PAGE1); | 445 ABB_SetPage(PAGE1); |
445 | 446 |
453 ABB_WriteRegister(TAPREG, 0x01b); | 454 ABB_WriteRegister(TAPREG, 0x01b); |
454 | 455 |
455 // This transmission changes the register page in the ABB for usp to pg2. | 456 // This transmission changes the register page in the ABB for usp to pg2. |
456 ABB_SetPage(PAGE2); | 457 ABB_SetPage(PAGE2); |
457 | 458 |
458 #if (ANLG_FAM == 2) | 459 #if (ANALOG == 2) |
459 // Restore push button environment | 460 // Restore push button environment |
460 ABB_WriteRegister(0x3C, 0x07); | 461 ABB_WriteRegister(0x3C, 0x07); |
461 | 462 |
462 #elif (ANLG_FAM == 3) | 463 #elif (ANALOG == 3) |
463 | 464 |
464 // Restore push button environment | 465 // Restore push button environment |
465 ABB_WriteRegister(0x3C, 0xBF); | 466 ABB_WriteRegister(0x3C, 0xBF); |
466 | 467 |
467 /* ************************ SELECTION OF BBCFG CONFIG FOR ABB 3 PG1_0 *******************************/ | 468 /* ************************ SELECTION OF BBCFG CONFIG FOR ABB 3 PG1_0 *******************************/ |
501 // enable BB battery charge BCICONF register, enable test mode to track BDLEN and BULEN windows | 502 // enable BB battery charge BCICONF register, enable test mode to track BDLEN and BULEN windows |
502 // This transmission enables BB charge and BB bridge connection for BB measurements. | 503 // This transmission enables BB charge and BB bridge connection for BB measurements. |
503 ABB_WriteRegister(BCICONF, 0x060); | 504 ABB_WriteRegister(BCICONF, 0x060); |
504 | 505 |
505 /* ************************ SELECTION OF BBCFG CONFIG FOR ABB 3 PG2_0 *******************************/ | 506 /* ************************ SELECTION OF BBCFG CONFIG FOR ABB 3 PG2_0 *******************************/ |
506 #if (ANLG_FAM == 3) | 507 #if (ANALOG == 3) |
507 #if (ANLG_PG == S_PG_20) // SYREN PG2.0 ON EVACONSO | 508 #if (ANLG_PG == S_PG_20) // SYREN PG2.0 ON EVACONSO |
508 ABB_WriteRegister(BBCFG, C_BBCFG); // Initialize transmit register | 509 ABB_WriteRegister(BBCFG, C_BBCFG); // Initialize transmit register |
509 #endif | 510 #endif |
510 #endif | 511 #endif |
511 | 512 |
532 ABB_WriteRegister(BCICTL1, 0x0001); | 533 ABB_WriteRegister(BCICTL1, 0x0001); |
533 } | 534 } |
534 | 535 |
535 /********* Sleep definition part ******************/ | 536 /********* Sleep definition part ******************/ |
536 // This transmission changes the register page in the ABB for usp to pg1. | 537 // This transmission changes the register page in the ABB for usp to pg1. |
537 #if (ANLG_FAM == 2) | 538 #if (ANALOG == 2) |
538 ABB_SetPage(PAGE1); | 539 ABB_SetPage(PAGE1); |
539 | 540 |
540 // update the Delay needed by the ABB before going in deep sleep, and clear previous delay value. | 541 // update the Delay needed by the ABB before going in deep sleep, and clear previous delay value. |
541 reg = ABB_ReadRegister(VRPCCFG) & 0x1e0; | 542 reg = ABB_ReadRegister(VRPCCFG) & 0x1e0; |
542 | 543 |
543 ABB_WriteRegister(VRPCCFG, (SLPDLY | reg)); | 544 ABB_WriteRegister(VRPCCFG, (SLPDLY | reg)); |
544 | 545 |
545 // update the ABB mask sleep register (regulator disabled in deep sleep), and clear previous mask value. | 546 // update the ABB mask sleep register (regulator disabled in deep sleep), and clear previous mask value. |
546 reg = ABB_ReadRegister(VRPCMSK) & 0x1e0; | 547 reg = ABB_ReadRegister(VRPCMSK) & 0x1e0; |
547 ABB_WriteRegister(VRPCMSK, (MASK_SLEEP_MODE | reg)); | 548 ABB_WriteRegister(VRPCMSK, (MASK_SLEEP_MODE | reg)); |
548 #elif (ANLG_FAM == 3) | 549 #elif (ANALOG == 3) |
549 Syren_Sleep_Config(NORMAL_SLEEP,SLEEP_BG,SLPDLY); | 550 Syren_Sleep_Config(NORMAL_SLEEP,SLEEP_BG,SLPDLY); |
550 #endif | 551 #endif |
551 // This transmission changes the register page in the ABB for usp to pg0. | 552 // This transmission changes the register page in the ABB for usp to pg0. |
552 ABB_SetPage(PAGE0); | 553 ABB_SetPage(PAGE0); |
553 #endif | 554 #endif |
620 *Buff++ = ABB_ReadRegister(VBKPREG); | 621 *Buff++ = ABB_ReadRegister(VBKPREG); |
621 *Buff++ = ABB_ReadRegister(ADIN1REG); | 622 *Buff++ = ABB_ReadRegister(ADIN1REG); |
622 *Buff++ = ABB_ReadRegister(ADIN2REG); | 623 *Buff++ = ABB_ReadRegister(ADIN2REG); |
623 *Buff++ = ABB_ReadRegister(ADIN3REG); | 624 *Buff++ = ABB_ReadRegister(ADIN3REG); |
624 | 625 |
625 #if (ANLG_FAM ==1) | 626 #if (ANALOG ==1) |
626 *Buff++ = ABB_ReadRegister(ADIN4XREG); | 627 *Buff++ = ABB_ReadRegister(ADIN4XREG); |
627 *Buff++ = ABB_ReadRegister(ADIN5YREG); | 628 *Buff++ = ABB_ReadRegister(ADIN5YREG); |
628 #elif (ANLG_FAM ==2) | 629 #elif (ANALOG ==2) |
629 *Buff++ = ABB_ReadRegister(ADIN4REG); | 630 *Buff++ = ABB_ReadRegister(ADIN4REG); |
630 #elif (ANLG_FAM == 3) | 631 #elif (ANALOG == 3) |
631 *Buff++ = ABB_ReadRegister(ADIN4REG); | 632 *Buff++ = ABB_ReadRegister(ADIN4REG); |
632 *Buff++ = ABB_ReadRegister(ADIN5REG); | 633 *Buff++ = ABB_ReadRegister(ADIN5REG); |
633 #endif // ANLG_FAM | 634 #endif // ANALOG |
634 | 635 |
635 #if (ABB_SEMAPHORE_PROTECTION == 3) | 636 #if (ABB_SEMAPHORE_PROTECTION == 3) |
636 // release the semaphore only if it has correctly been created. | 637 // release the semaphore only if it has correctly been created. |
637 if(&abb_sem != 0) | 638 if(&abb_sem != 0) |
638 { | 639 { |
678 | 679 |
679 // This transmission changes the register page in the ABB for usp to pg0. | 680 // This transmission changes the register page in the ABB for usp to pg0. |
680 ABB_SetPage(PAGE0); | 681 ABB_SetPage(PAGE0); |
681 | 682 |
682 /* select ADC channels to be converted */ | 683 /* select ADC channels to be converted */ |
683 #if (ANLG_FAM == 1) | 684 #if (ANALOG == 1) |
684 ABB_WriteRegister(MADCCTRL1, Channels); | 685 ABB_WriteRegister(MADCCTRL1, Channels); |
685 #elif ((ANLG_FAM == 2) || (ANLG_FAM == 3)) | 686 #elif ((ANALOG == 2) || (ANALOG == 3)) |
686 ABB_WriteRegister(MADCCTRL, Channels); | 687 ABB_WriteRegister(MADCCTRL, Channels); |
687 #endif | 688 #endif |
688 | 689 |
689 reg_val = ABB_ReadRegister(ITMASK); | 690 reg_val = ABB_ReadRegister(ITMASK); |
690 | 691 |
730 volatile SYS_UWORD16 nb_it; | 731 volatile SYS_UWORD16 nb_it; |
731 SYS_UWORD16 reg_val; | 732 SYS_UWORD16 reg_val; |
732 | 733 |
733 // table for AFC allowed values during Sleep mode. First 5th elements | 734 // table for AFC allowed values during Sleep mode. First 5th elements |
734 // are related to positive AFC values, last 5th to negative ones. | 735 // are related to positive AFC values, last 5th to negative ones. |
735 SYS_UWORD32 Afcout_T[10]= {0x0f,0x1f,0x3f,0x7f,0xff,0x00,0x01,0x03,0x07,0x0f}; | 736 static const SYS_UWORD32 Afcout_T[10] = |
737 {0x0f,0x1f,0x3f,0x7f,0xff,0x00,0x01,0x03,0x07,0x0f}; | |
736 | 738 |
737 // Start spi clock, mask IT for RD and WR and read SPI_REG_STATUS to reset the RE and WE flags. | 739 // Start spi clock, mask IT for RD and WR and read SPI_REG_STATUS to reset the RE and WE flags. |
738 SPI_Ready_for_RDWR | 740 SPI_Ready_for_RDWR |
739 status = * (volatile SYS_UWORD16 *) SPI_REG_STATUS; | 741 status = * (volatile SYS_UWORD16 *) SPI_REG_STATUS; |
740 | 742 |
745 else | 747 else |
746 afcout_index = (afc + 512)>>10; | 748 afcout_index = (afc + 512)>>10; |
747 | 749 |
748 if (sleep_performed == FRAME_STOP) // Big sleep | 750 if (sleep_performed == FRAME_STOP) // Big sleep |
749 { | 751 { |
750 #if ((ANLG_FAM == 2) || (ANLG_FAM == 3)) | 752 #if ((ANALOG == 2) || (ANALOG == 3)) |
751 //////////// ADD HERE IOTA or SYREN CONFIGURATION FOR BIG SLEEP //////////////////////////// | 753 //////////// ADD HERE IOTA or SYREN CONFIGURATION FOR BIG SLEEP //////////////////////////// |
752 #endif | 754 #endif |
753 | 755 |
754 } | 756 } |
755 else // Deep sleep | 757 else // Deep sleep |
756 { | 758 { |
757 #if(ANLG_FAM == 1) | 759 #if(ANALOG == 1) |
758 // SELECTION OF AFC TEST MODE FOR OMEGA | 760 // SELECTION OF AFC TEST MODE FOR OMEGA |
759 //--------------------------------------------------- | 761 //--------------------------------------------------- |
760 // This test configuration allows access on the AFCOUT register | 762 // This test configuration allows access on the AFCOUT register |
761 ABB_SetPage(PAGE1); | 763 ABB_SetPage(PAGE1); |
762 | 764 |
769 // Set AFCOUT to 0. | 771 // Set AFCOUT to 0. |
770 ABB_WriteRegister(AFCOUT, 0x00 >> 6); | 772 ABB_WriteRegister(AFCOUT, 0x00 >> 6); |
771 | 773 |
772 ABB_SetPage(PAGE0); | 774 ABB_SetPage(PAGE0); |
773 | 775 |
774 #elif (ANLG_FAM == 2) | 776 #elif (ANALOG == 2) |
775 // This configuration allows access on the AFCOUT register | 777 // This configuration allows access on the AFCOUT register |
776 ABB_SetPage(PAGE1); | 778 ABB_SetPage(PAGE1); |
777 | 779 |
778 // Read AFCCTLADD value and enable USP access to AFCOUT register | 780 // Read AFCCTLADD value and enable USP access to AFCOUT register |
779 reg_val = (ABB_ReadRegister(AFCCTLADD) | 0x04); | 781 reg_val = (ABB_ReadRegister(AFCCTLADD) | 0x04); |
797 reg_val = ABB_ReadRegister(BCICTL1) & 0x03fe; | 799 reg_val = ABB_ReadRegister(BCICTL1) & 0x03fe; |
798 | 800 |
799 ABB_WriteRegister(BCICTL1, reg_val); | 801 ABB_WriteRegister(BCICTL1, reg_val); |
800 #endif | 802 #endif |
801 | 803 |
802 #if (ANLG_FAM == 3) // Nothing to be done as MB and BB measurement bridges are automatically disconnected | 804 #if (ANALOG == 3) // Nothing to be done as MB and BB measurement bridges are automatically disconnected |
803 // in Syren during sleep mode. BB charge stays enabled | 805 // in Syren during sleep mode. BB charge stays enabled |
804 ABB_SetPage(PAGE1); // Initialize transmit reg_num. This transmission | 806 ABB_SetPage(PAGE1); // Initialize transmit reg_num. This transmission |
805 // change the register page in IOTA for usp to pg1 | 807 // change the register page in IOTA for usp to pg1 |
806 | 808 |
807 ABB_WriteRegister(TAPCTRL, 0x00); // Disable Syren test mode | 809 ABB_WriteRegister(TAPCTRL, 0x00); // Disable Syren test mode |
812 // switch off MADC, AFC, AUXDAC, VOICE. | 814 // switch off MADC, AFC, AUXDAC, VOICE. |
813 ABB_WriteRegister(TOGBR1, 0x155); | 815 ABB_WriteRegister(TOGBR1, 0x155); |
814 | 816 |
815 // Switch off Analog supply LDO | 817 // Switch off Analog supply LDO |
816 //----------------------------- | 818 //----------------------------- |
817 #if (ANLG_FAM == 1) | 819 #if (ANALOG == 1) |
818 ABB_SetPage(PAGE1); | 820 ABB_SetPage(PAGE1); |
819 | 821 |
820 // Read VRPCCTL3 register value and switch off VR3. | 822 // Read VRPCCTL3 register value and switch off VR3. |
821 reg_val = ABB_ReadRegister(VRPCCTRL3) & 0x3df; | 823 reg_val = ABB_ReadRegister(VRPCCTRL3) & 0x3df; |
822 | 824 |
823 ABB_WriteRegister(VRPCCTRL3, reg_val); | 825 ABB_WriteRegister(VRPCCTRL3, reg_val); |
824 | 826 |
825 #elif (ANLG_FAM == 2) | 827 #elif (ANALOG == 2) |
826 // Read VRPCSTS register value and extract status of meaningfull inputs. | 828 // Read VRPCSTS register value and extract status of meaningfull inputs. |
827 reg_val = ABB_ReadRegister(VRPCSTS) & 0x0070; | 829 reg_val = ABB_ReadRegister(VRPCSTS) & 0x0070; |
828 | 830 |
829 if (reg_val == 0x30) | 831 if (reg_val == 0x30) |
830 { | 832 { |
833 } | 835 } |
834 | 836 |
835 // Dummy transmission to clean of ABB bus. This transmission accesses IOTA address 0 in "read". | 837 // Dummy transmission to clean of ABB bus. This transmission accesses IOTA address 0 in "read". |
836 ABB_WriteRegister(0x0000 | 0x0001, 0x0000); | 838 ABB_WriteRegister(0x0000 | 0x0001, 0x0000); |
837 | 839 |
838 #elif (ANLG_FAM == 3) | 840 #elif (ANALOG == 3) |
839 // In Syren there is no need to check for VRPCCFG as wake up prioritys are changed | 841 // In Syren there is no need to check for VRPCCFG as wake up prioritys are changed |
840 // start the SLPDLY counter in order to switch the ABB in sleep mode | 842 // start the SLPDLY counter in order to switch the ABB in sleep mode |
841 ABB_WriteRegister(VRPCDEV,0x02); // Initialize transmit reg_num. This transmission | 843 ABB_WriteRegister(VRPCDEV,0x02); // Initialize transmit reg_num. This transmission |
842 // set Syren sleep bit | 844 // set Syren sleep bit |
843 /* | 845 /* |
887 SPI_Ready_for_RDWR | 889 SPI_Ready_for_RDWR |
888 status = * (volatile SYS_UWORD16 *) SPI_REG_STATUS; | 890 status = * (volatile SYS_UWORD16 *) SPI_REG_STATUS; |
889 | 891 |
890 if (sleep_performed == FRAME_STOP) // Big sleep | 892 if (sleep_performed == FRAME_STOP) // Big sleep |
891 { | 893 { |
892 #if ((ANLG_FAM == 2) || (ANLG_FAM == 3)) | 894 #if ((ANALOG == 2) || (ANALOG == 3)) |
893 //////////// ADD HERE IOTA or SYREN CONFIGURATION FOR BIG SLEEP WAKEUP //////////////////////////// | 895 //////////// ADD HERE IOTA or SYREN CONFIGURATION FOR BIG SLEEP WAKEUP //////////////////////////// |
894 #endif | 896 #endif |
895 } | 897 } |
896 else // Deep sleep | 898 else // Deep sleep |
897 { | 899 { |
907 | 909 |
908 // Restitutes 13MHZ Clock to ABB | 910 // Restitutes 13MHZ Clock to ABB |
909 ABB_free_13M(); | 911 ABB_free_13M(); |
910 | 912 |
911 // Switch ON Analog supply LDO | 913 // Switch ON Analog supply LDO |
912 #if (ANLG_FAM == 1) | 914 #if (ANALOG == 1) |
913 ABB_SetPage(PAGE1); | 915 ABB_SetPage(PAGE1); |
914 | 916 |
915 // Read VRPCCTL3 register value and switch on VR3. | 917 // Read VRPCCTL3 register value and switch on VR3. |
916 reg_val = ABB_ReadRegister(VRPCCTRL3) | 0x020; | 918 reg_val = ABB_ReadRegister(VRPCCTRL3) | 0x020; |
917 | 919 |
926 ABB_WriteRegister(AUXAFC2, ((afc>>10) & 0x7)); | 928 ABB_WriteRegister(AUXAFC2, ((afc>>10) & 0x7)); |
927 | 929 |
928 // This transmission sets the AUXAFC1. | 930 // This transmission sets the AUXAFC1. |
929 ABB_WriteRegister(AUXAFC1, (afc & 0x3ff)); | 931 ABB_WriteRegister(AUXAFC1, (afc & 0x3ff)); |
930 | 932 |
931 #if (ANLG_FAM == 1) | 933 #if (ANALOG == 1) |
932 // Remove AFC test mode | 934 // Remove AFC test mode |
933 ABB_SetPage(PAGE1); | 935 ABB_SetPage(PAGE1); |
934 | 936 |
935 // This transmission select Omega test instruction. | 937 // This transmission select Omega test instruction. |
936 ABB_WriteRegister(TAPREG, TSPTEST1); | 938 ABB_WriteRegister(TAPREG, TSPTEST1); |
939 // This transmission disables Omega test register. | 941 // This transmission disables Omega test register. |
940 ABB_WriteRegister(TAPCTRL, 0x00 >> 6); | 942 ABB_WriteRegister(TAPCTRL, 0x00 >> 6); |
941 | 943 |
942 ABB_SetPage(PAGE0); | 944 ABB_SetPage(PAGE0); |
943 | 945 |
944 #elif (ANLG_FAM == 2) | 946 #elif (ANALOG == 2) |
945 ABB_SetPage(PAGE1); | 947 ABB_SetPage(PAGE1); |
946 | 948 |
947 // Read AFCCTLADD register value and disable USP access to AFCOUT register. | 949 // Read AFCCTLADD register value and disable USP access to AFCOUT register. |
948 reg_val = ABB_ReadRegister(AFCCTLADD) & ~0x04; | 950 reg_val = ABB_ReadRegister(AFCCTLADD) & ~0x04; |
949 | 951 |
969 reg_val = ABB_ReadRegister(BCICTL1) | 0x0001; | 971 reg_val = ABB_ReadRegister(BCICTL1) | 0x0001; |
970 | 972 |
971 ABB_WriteRegister(BCICTL1, reg_val); | 973 ABB_WriteRegister(BCICTL1, reg_val); |
972 #endif | 974 #endif |
973 | 975 |
974 #if (ANLG_FAM == 3) | 976 #if (ANALOG == 3) |
975 | 977 |
976 ABB_SetPage(PAGE1); | 978 ABB_SetPage(PAGE1); |
977 | 979 |
978 /* *************************************************************************************************** */ | 980 /* *************************************************************************************************** */ |
979 // update the Delay needed by the ABB before going in deep sleep, and clear previous delay value. | 981 // update the Delay needed by the ABB before going in deep sleep, and clear previous delay value. |
1028 } | 1030 } |
1029 #endif // ABB_SEMAPHORE_PROTECTION | 1031 #endif // ABB_SEMAPHORE_PROTECTION |
1030 | 1032 |
1031 ABB_SetPage(PAGE1); | 1033 ABB_SetPage(PAGE1); |
1032 | 1034 |
1033 #if (ANLG_FAM == 1) | 1035 #if (ANALOG == 1) |
1034 // This transmission initializes the VRPCCTL1 register. | 1036 // This transmission initializes the VRPCCTL1 register. |
1035 ABB_WriteRegister(VRPCCTRL1, value); | 1037 ABB_WriteRegister(VRPCCTRL1, value); |
1036 | 1038 |
1037 #elif (ANLG_FAM == 2) | 1039 #elif (ANALOG == 2) |
1038 // This transmission initializes the VRPCSIM register. | 1040 // This transmission initializes the VRPCSIM register. |
1039 ABB_WriteRegister(VRPCSIM, value); | 1041 ABB_WriteRegister(VRPCSIM, value); |
1040 | 1042 |
1041 #elif (ANLG_FAM == 3) | 1043 #elif (ANALOG == 3) |
1042 // This transmission initializes the VRPCSIMR register. | 1044 // This transmission initializes the VRPCSIMR register. |
1043 ABB_WriteRegister(VRPCSIMR, value); | 1045 ABB_WriteRegister(VRPCSIMR, value); |
1044 | 1046 |
1045 #endif | 1047 #endif |
1046 | 1048 |
1095 #endif | 1097 #endif |
1096 } | 1098 } |
1097 | 1099 |
1098 //////////////////////// IDEV-INLO integration of sleep mode for Syren /////////////////////////////////////// | 1100 //////////////////////// IDEV-INLO integration of sleep mode for Syren /////////////////////////////////////// |
1099 | 1101 |
1100 #if (ANLG_FAM == 3) | 1102 #if (ANALOG == 3) |
1101 | 1103 |
1102 // Syren Sleep configuration function -------------------------- | 1104 // Syren Sleep configuration function -------------------------- |
1103 void Syren_Sleep_Config(SYS_UWORD16 sleep_type,SYS_UWORD16 bg_select, SYS_UWORD16 sleep_delay) | 1105 void Syren_Sleep_Config(SYS_UWORD16 sleep_type,SYS_UWORD16 bg_select, SYS_UWORD16 sleep_delay) |
1104 { | 1106 { |
1105 volatile SYS_UWORD16 status,sl_ldo_stat; | 1107 volatile SYS_UWORD16 status,sl_ldo_stat; |
1132 NU_Sleep (30); | 1134 NU_Sleep (30); |
1133 | 1135 |
1134 // Wait also until <ON/OFF> key is released. | 1136 // Wait also until <ON/OFF> key is released. |
1135 // This is needed to avoid, if the power key is pressed for a long time, to switch | 1137 // This is needed to avoid, if the power key is pressed for a long time, to switch |
1136 // ON-switch OFF the mobile, until the power key is released. | 1138 // ON-switch OFF the mobile, until the power key is released. |
1137 #if((ANLG_FAM == 1) || (ANLG_FAM == 2)) | 1139 #if((ANALOG == 1) || (ANALOG == 2)) |
1138 while ((ABB_Read_Status() & ONREFLT) == PWR_OFF_KEY_PRESSED) { | 1140 while ((ABB_Read_Status() & ONREFLT) == PWR_OFF_KEY_PRESSED) { |
1139 #elif(ANLG_FAM == 3) | 1141 #elif(ANALOG == 3) |
1140 while ((ABB_Read_Register_on_page(PAGE1, VRPCCFG) & PWOND) == PWR_OFF_KEY_PRESSED) { | 1142 while ((ABB_Read_Register_on_page(PAGE1, VRPCCFG) & PWOND) == PWR_OFF_KEY_PRESSED) { |
1141 #endif | 1143 #endif |
1142 | 1144 |
1143 NU_Sleep (1); } | 1145 NU_Sleep (1); } |
1144 | 1146 |
1147 #if 0 // FreeCalypso | |
1145 BZ_KeyBeep_OFF(); | 1148 BZ_KeyBeep_OFF(); |
1146 | 1149 #endif |
1147 #if(ANLG_FAM == 1) | 1150 |
1151 #if(ANALOG == 1) | |
1148 ABB_Write_Register_on_page(PAGE0, VRPCCTL2, 0x00EE); | 1152 ABB_Write_Register_on_page(PAGE0, VRPCCTL2, 0x00EE); |
1149 #elif((ANLG_FAM == 2) || (ANLG_FAM == 3)) | 1153 #elif((ANALOG == 2) || (ANALOG == 3)) |
1150 ABB_Write_Register_on_page(PAGE0, VRPCDEV, 0x0001); | 1154 ABB_Write_Register_on_page(PAGE0, VRPCDEV, 0x0001); |
1151 #endif | 1155 #endif |
1152 } | 1156 } |
1153 #endif | 1157 #endif |
1154 | |
1155 | |
1156 |