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