URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 566 to Rev 567
- ↔ Reverse comparison
Rev 566 → Rev 567
/trunk/or1ksim/pic/pic.c
49,12 → 49,6
unsigned long picpr; |
unsigned long sr; |
|
/* CZ 020901: Someone had previously noted that this routine was |
wrong, and there were 2 sets of code, one commented out, and |
both were broken. I have rewritten this so it works as I think |
it should. Someone needs to correct this if there is something |
I am missing... */ |
|
/* From Sections 16.3 & 16.4, bits 0 & 1 are reserved */ |
picsr = mfspr(SPR_PICSR); |
picpr = mfspr(SPR_PICPR) | 0x00000003; |
64,35 → 58,10
if((sr & (SPR_SR_EIR | SPR_SR_EXR)) != (SPR_SR_EIR | SPR_SR_EXR)) |
return; |
|
/* From Sections 16.3 & 16.4, bits 0 & 1 are reserved */ |
picsr = mfspr(SPR_PICSR) & 0xFFFFFFFC; |
picpr = mfspr(SPR_PICPR) & 0xFFFFFFFC; |
|
if(picsr & picpr) /* Report High Priority Interrupts first */ |
except_handle(EXCEPT_HPINT, 0); |
else if(picsr) /* Report a Low Priority Interrupt otherwise */ |
except_handle(EXCEPT_LPINT, 0); |
|
#if 0 /* CZ -- both of these routines are broken */ |
/* SIMON: This is a bug */ |
/* if (picsr & picpr) { |
if ((mfspr(SPR_SR) & (SPR_SR_EIR | SPR_SR_EXR)) == (SPR_SR_EIR | SPR_SR_EXR) |
) |
except_handle(EXCEPT_HPINT, 0); |
} else |
if ((mfspr(SPR_SR) & (SPR_SR_EIR | SPR_SR_EXR)) == (SPR_SR_EIR | SPR_SR_EXR) |
) |
except_handle(EXCEPT_LPINT, 0); |
*/ |
if ((picsr & (SPR_SR_EIR | SPR_SR_EXR)) == (SPR_SR_EIR | SPR_SR_EXR)) { |
if (picsr & picpr) { |
except_handle(EXCEPT_HPINT, 0); |
} else if(picsr) { |
except_handle(EXCEPT_LPINT, 0); |
} |
} |
#endif |
|
} |
|
/* Asserts interrupt to the PIC. */ |