I am trying to put the PPC405 asleep on a VirtexIIPro ML310 Xilinx development board and not have a lot of luck. I'm running VxWorks and have written a little application that toggles an LED so that I know the task is running. I've tried two methods--with drastically different results-- but neither of which do everything I need.
First try:
I loaded my app that toggles LEDs via a Tornado shell.
Spawn the LED toggler.
Note that via Tornado shell, I see LED toggler in the task list at an "i" command. Note that via the serial shell, I cannot see LED toggler in the task list at an "i" command.
Disable PIT, so only a UART or network source interrupt will awaken me (ie no sysClk/timer interrupts)
Put to sleep via MSR[WE]. Observed LED quits toggle-- as expected.
Then, via a SERIAL shell, I type "i", and vxWorks awoke and printed the tasks data as expected-but the LED toggler did not resume execution.
Second try:
I moved all this code into UsrAppInit and then programmatically, spawned the LED toggler. Wait a few secs (so I can observe LED on scope). Then Disable PIT and put to sleep.
Now, I try to awaken the PPC405 via the serial connection. I cannot seem to waken the PPC at all. If/when it wakens, the next line of code in usrAppInit would have printed out an "Awoken" message--but I never see this happen.
Note that the Msr register is set to 0x00069200 to initiate the sleep-which should set the sleep bits, and enable critical and external interrupts (though the PIT as a possible feeder to External Interrupt has been disabled via a write to TCR of 0x00040000...)
Someone else had mentioned to me the need for possible sync and orderly execution before putting the PPC to sleep, so I added "sync, isync, and eieio" code immediately prior to the set MSR[WE] bit, but this made no difference. Any ideas?
Thanks
Paul