> Which works fine. However, the following almost identical code causes the
> machine to lock up (not generate an exception, just go silent).
>
> la t0,except_vec3 # begining of general exception
> la t1,end_except # end of general exception code
> la t2,0x80000080 # where the code should live
> 1: sw t3,(t2) # put it where it should go
During the first loop iteration t3 in uninitialized ...
> addiu t0,4 # increment both pointers
> addiu t2,4
> lw t3,(t0) # will be in the delay slot
> bne t0,t1,1b
>
> The lock up occurs as soon as the sw t3,(t2) is executed (well at least if I
> put a 'j kernel_entry' just before the sw I get an exception in later code,
> but
> if I put it after it I never get anything more out of it). Given that I am
> about 8km away from the machine, the only way I have of unwedging it is to
> powercycle it remotely, which I don't like doing very often. Wish I could get
> it to reset from the serial line.
With a messed up exception handler you will never catch exceptions ...
I assume you have disabled interrupts and ensured that the BEV flag in
c0_status is cleared?
Maybe somebody from the hardware fraction can give you some hints about how
to reset the machine from remote? (One of the nice features of the RM200 -
you can power it up/down and reset from the serial interface.)
Ralf
|