//Enter HIB mode (dual CPU). Puts CPU2 in STANDBY first. Alternately, //CPU2 may be in reset. void HIB() { #if defined(CPU2) STANDBY(); #elif defined(CPU1) EALLOW; CpuSysRegs.LPMCR.bit.LPM = LPM_HIB; EDIS; while (DevCfgRegs.LPMSTAT.bit.CPU2LPMSTAT == 0x0 && DevCfgRegs.RSTSTAT.bit.CPU2RES == 1) {;} DisablePeripheralClocks(); EALLOW; ClkCfgRegs.SYSPLLCTL1.bit.PLLCLKEN = 0; ClkCfgRegs.SYSPLLCTL1.bit.PLLEN = 0; EDIS; asm(" IDLE"); #endif }
// // Main // void main(void) { // // Step 1. Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks // This example function is found in the F2837xS_SysCtrl.c file. // InitSysCtrl(); // // Step 2. Initialize GPIO: // This example function is found in the F2837xS_Gpio.c file and // illustrates how to set the GPIO to it's default state. // InitGpio(); // // GPIO0 is the external wake-up source // GPIO_SetupPinMux(0,GPIO_MUX_CPU1,0); GPIO_SetupPinOptions(0,GPIO_INPUT,GPIO_PULLUP|GPIO_ASYNC); // // GPIO1 is an output // GPIO_SetupPinMux(1,GPIO_MUX_CPU1,0); GPIO_SetupPinOptions(1,GPIO_OUTPUT,0); EALLOW; // // Use GPIO0 to wake the CPU from Standby // CpuSysRegs.GPIOLPMSEL0.bit.GPIO0 = 1; // // The wakeup signal should be (2+QUALSTBY) OSCCLKs wide // CpuSysRegs.LPMCR.bit.QUALSTDBY = 2; EDIS; // // Step 3. Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts // DINT; // // Initialize the PIE control registers to their default state. // The default state is all PIE interrupts disabled and flags // are cleared. // This function is found in the F2837xS_PieCtrl.c file. // InitPieCtrl(); // // Disable CPU interrupts and clear all CPU interrupt flags: // IER = 0x0000; IFR = 0x0000; // // Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR). // This will populate the entire table, even if the interrupt // is not used in this example. This is useful for debug purposes. // The shell ISR routines are found in F2837xS_DefaultIsr.c. // This function is found in F2837xS_PieVect.c. // InitPieVectTable(); // // Interrupts that are used in this example are re-mapped to // ISR functions found within this file. // EALLOW; PieVectTable.WAKE_INT = &local_WAKE_ISR; EDIS; // // Step 4. Initialize all the Device Peripherals: // // // Not applicable for this example. // // // Step 5. User specific code, enable interrupts: // // // Enable CPU INT1 which is connected to WakeInt: // IER |= M_INT1; // // Enable WAKEINT in the PIE: Group 1 interrupt 4 // PieCtrlRegs.PIEIER1.bit.INTx8 = 1; PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // // Enable global Interrupts: // EINT; // // Ensure there are no subsequent flash accesses to wake up the pump and // bank Power down the flash bank and pump // SeizeFlashPump_Bank0(); FlashOff_Bank0(); ReleaseFlashPump(); SeizeFlashPump_Bank1(); FlashOff_Bank1(); ReleaseFlashPump(); // // enter STANDBY mode // STANDBY(); // // loop forever // while(1); }