OpenCores
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. */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.