add: Microblaze V5 exception handling
This commit is contained in:
@@ -23,15 +23,16 @@
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/asm.h>
|
||||
|
||||
void _hw_exception_handler (void)
|
||||
{
|
||||
int address = 0;
|
||||
int state = 0;
|
||||
/* loading address of exception EAR */
|
||||
__asm__ __volatile ("mfs %0,rear"::"r" (address):"memory");
|
||||
MFSEAR(address);
|
||||
/* loading excetpion state register ESR */
|
||||
__asm__ __volatile ("mfs %0,resr"::"r" (state):"memory");
|
||||
MFSESR(state);
|
||||
printf ("Hardware exception at 0x%x address\n", address);
|
||||
switch (state & 0x1f) { /* mask on exception cause */
|
||||
case 0x1:
|
||||
@@ -49,6 +50,11 @@ void _hw_exception_handler (void)
|
||||
case 0x5:
|
||||
puts ("Divide by zero exception\n");
|
||||
break;
|
||||
#ifdef MICROBLAZE_V5
|
||||
case 0x1000:
|
||||
puts ("Exception in delay slot\n");
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
puts ("Undefined cause\n");
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user