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