First of all: according to the Architecture Reference, a non-zero EXCAUSE does actually trigger an interrupt! (See p.47)
Also, don't write to EXCAUSE!
EXCAUSE is merely used by to differentiate between the following:misaligned load/store,FPU exception, unimplemented, no exception and so on
Rather, use SWI in conjunction with general purpose registers, as is common on x86 and arm platforms, such that a software interrupt handler may differentiate between: a) Something _really_ bad happened (EXCAUSE != 1)
b) a syscall (EXCAUSE==1), in this case check the relevant gp-registers (a good idea would be to simply adopt the standard calling convention, with the exception of using IRET instead of the link register)
//edit I was using an outdated reference manual, why the hell does the link on adapteva.com still point to
http://www.adapteva.com/wp-content/uplo ... .12.18.pdf ?