Documentation Errata for ADSP-BF54x Blackfin® Processor Hardware Reference

Chapter: 18 / Page 41

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: May 8 2017