void CPU_Sleep(SLEEP_LEVEL level, UINT64 wakeEvents) { UINT16 iprUsart = 0; UINT16 iprSocket = 0; int return_value; /* Detecting if Keypad is pushed.*/ #if 0 return_value = g_GPIO_KEYPAD_Driver.KeyPad_Search(); if(return_value != -1 ) trapa(32); #endif /* */ if (0 != (wakeEvents & SYSTEM_EVENT_FLAG_COM_IN)) { iprUsart = IPR16; IPR16 |= 0xDDD0; } if (0 != (wakeEvents & SYSTEM_EVENT_FLAG_SOCKET)) { iprSocket = IPR19; IPR19 |= 0x00D0; } switch(level) { case SLEEP_LEVEL__DEEP_SLEEP: STBCR = 8; break; default: STBCR = 0; break; } UINT8 mask = get_imask(); set_imask(0xC); sleep(); set_imask( mask ); if (0 != (wakeEvents & SYSTEM_EVENT_FLAG_COM_IN)) { IPR16 = iprUsart; } if (0 != (wakeEvents & SYSTEM_EVENT_FLAG_SOCKET)) { IPR19 = iprSocket; } }
void CPU_Sleep(SLEEP_LEVEL level, UINT64 wakeEvents) { UINT16 iprUsart = 0; UINT16 iprSocket = 0; int return_value; /* Detecting if Keypad is pushed.*/ return_value = g_SH7264_Keypad_Driver.Key_Press(); if(return_value != -1 ) trapa(32); if (0 != (wakeEvents & SYSTEM_EVENT_FLAG_COM_IN)) { iprUsart = IPR17; IPR17 |= 0xDDDD; } if (0 != (wakeEvents & SYSTEM_EVENT_FLAG_SOCKET)){ iprSocket = IPR01; IPR01 |= 0x0D00; } switch(level) { case SLEEP_LEVEL__DEEP_SLEEP: STBCR = 8; break; default: STBCR = 0; break; } UINT8 mask = get_imask(); set_imask(0xC); sleep(); set_imask( mask ); if (0 != (wakeEvents & SYSTEM_EVENT_FLAG_COM_IN)) { IPR17 = iprUsart; } if (0 != (wakeEvents & SYSTEM_EVENT_FLAG_SOCKET)){ IPR01 = iprSocket; } }
void vPortYield( void ) { long lInterruptMask; /* Ensure the yield trap runs at the same priority as the other interrupts that can cause a context switch. */ lInterruptMask = get_imask(); /* taskYIELD() can only be called from a task, not an interrupt, so the current interrupt mask can only be 0 or portKERNEL_INTERRUPT_PRIORITY and the mask can be set without risk of accidentally lowering the mask value. */ set_imask( portKERNEL_INTERRUPT_PRIORITY ); trapa( portYIELD_TRAP_NO ); /* Restore the interrupt mask to whatever it was previously (when the function was entered). */ set_imask( ( int ) lInterruptMask ); }
portBASE_TYPE xPortStartScheduler( void ) { extern void vApplicationSetupTimerInterrupt( void ); /* Call an application function to set up the timer that will generate the tick interrupt. This way the application can decide which peripheral to use. A demo application is provided to show a suitable example. */ vApplicationSetupTimerInterrupt(); /* Start the first task. This will only restore the standard registers and not the flop registers. This does not really matter though because the only flop register that is initialised to a particular value is fpscr, and it is only initialised to the current value, which will still be the current value when the first task starts executing. */ trapa( portSTART_SCHEDULER_TRAP_NO ); /* Should not get here. */ return pdFAIL; }