Hello,
Below is the isr code snippet I took from valley tech PCI dsp firmware. We are
using this to understand DSP/BIOS. We are able to generate interrupt from the
HOST but it hangs at " SEM_ipost(&PciDmaDataAvail);" and never goes further.
Any idea what might be the reason and does extern far keyword has any
implication on this hang? "extern far SEM_Obj PciDmaDataAvail;"
What does extern far means? We are using internal SRAM to download the code.
//CODE SNIPPET
extern far SEM_Obj PciDmaDataAvail;
/*
* ======== isr ======= * interrupt service routine is runtime pluged in
*/
static Void isr(Void)
{
ChanHandle chan;
IOM_Packet *oldPacket;
C64XX_PCI_Request *oldReq;
Int status = IOM_EBADIO;
if (PCI_FGET(PCIIS, MASTEROK)) {
/* pci master transfer complete */
PCI_FSET(PCIIS, MASTEROK, 1);
status = IOM_COMPLETED;
}
else if (PCI_FGET(PCIIS, PCIMASTER)) {
/* pci master abort */
PCI_FSET(PCIIS, PCIMASTER, 1);
}
else if (PCI_FGET(PCIIS, PCITARGET)) {
/* pci target abort */
PCI_FSET(PCIIS, PCITARGET, 1);
}
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // VTI change
// TO BE USED ONLY AS AN EXAMPLE/REFERENCE
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- /*
* VTI NOTE: Modifications done to this file are for example and referenece
purposes ONLY.
* Such modifications have NOT been fully tested. VTI makes NO
guarantee as to their
* correctness and validity.
*/
else if (PCI_FGET(PCIIS, HOSTSW)) {
/* pci host software generated int */
PCI_RSET(PCIIS, (PCI_PCIIS_HOSTSW_CLR << _PCI_PCIIS_HOSTSW_SHIFT));
//PCI_FSET(PCIIS, HOSTSW, 1);
SEM_ipost(&PciDmaDataAvail);
return;
}
_____________________________________