Data Sheet Errata
                            
            Documentation Errata for ADSP-BF54x Blackfin® Processor Hardware Reference
Doc ID: DOC-1506
Change
In Listings 18-5 and 18-6, the sequences for entering hibernate mode using the bfrom_SysControl ROM function are incorrect in that they implicitly set the VLEV field in the VRCTL register to 0, a reserved value. Failure to set VLEV explicitly can result in an unknown value of VDDINT on wakeup from hibernate. The corrected code is as follows:
Listing 18-5. Configuring Regulator Wakeups and Entering Hibernate State (C)
void hibernate(void)
{
ADI_SYSCTRL_VALUES hibernate;
/* SCLKELOW = 1: Enable Drive CKE Low During Reset */
/* Protect DDR contents during reset after wakeup */
hibernate.uwVrCtl = SCKELOW |
        WAKE      | /* RTC/Reset Wake-Up Enable */
        nCANWE    | /* CAN Wake-Up Disable */
        nGPWE     | /*General-Purpose Wake-Up Disable/*
        nUSBWE    | /* USB Wake-Up Disable */
        nKPADWE   | /* Keypad Wake-Up Disable */
        nROTWE    | /* Rotary Wake-Up Disable */
        nCLKBUFOE | /* CLKIN Buffer Output Disable */
        HIBERNATE | /* Powerdown/Bypass On-Board Regulation */
        VLEV;       /* Value of VLEV field determines the VDDINT value after wake up from hibernate */
bfrom_SysControl( SYSCTRL_VRCTL | SYSCTRL_INTVOLTAGE | SYSCTRL_WRITE |
SYSCTRL_HIBERNATE, &hibernate, NULL );
/* Hibernate State: no code executes until wakeup triggers reset */ } 
Listing 18-6. Configuring Regulator Wakeups and Entering Hibernate State (ASM)
__hibernate:
link sizeof(ADI_SYSCTRL_VALUES)+2;
[--SP] = (R7:0,P5:0);
SP += -12;
cli R6; /* disable interrupts, copy IMASK to R6 */
/* SCLKELOW = 1: Enable Drive CKE Low During Reset */
/* Protect DDR contents during reset after wakeup */
R0.L = SCKELOW   |
       WAKE      | /* RTC/Reset Wake-Up Enable */
       nCANWE    | /* CAN Wake-Up Disable */
       nGPWE     | /* General-Purpose Wake-Up Disable */
       nUSBWE    | /* USB Wake-Up Disable */
       nKPADWE   | /* Keypad Wake-Up Disable */
       nROTWE    | /* Rotary Wake-Up Disable */
       nCLKBUFOE | /* CLKIN Buffer Output Disable */
       HIBERNATE | /* Powerdown/Bypass On-Board Regulation */
       VLEV;       /* Value of VLEV field determines the VDDINT value after wake up from hibernate */
w[FP+-sizeof(ADI_SYSCTRL_VALUES)+
offsetof(ADI_SYSCTRL_VALUES,uwVrCtl)] = R0;
R0 = ( SYSCTRL_VRCTL | SYSCTRL_INTVOLTAGE | SYSCTRL_WRITE | SYSCTRL_HIBERNATE );
R1 = FP;
R1 += -sizeof(ADI_SYSCTRL_VALUES);
R2 = 0 (z);
IMM32(P4,BFROM_SYSCONTROL);
call(P4);
/* Hibernate State: no code executes until wakeup triggers reset */
__hibernate.end:
Last Update Date: 2017年05月08日
