DSP: Add minor delay to initial AIDMA interrupt
When AIDMA begins, the first thing it does is load the source address and length into internal registers. It then triggers the AID interrupt. Some begin the AIDMA process without all the data necessary for the interrupt callback being set up already - they require a few more cycles to set it up (the delay between the DMA being set to begin and the interrupt firing). The value of this delay was approximated by tests on real hardware.
This commit is contained in:
parent
a4bc15e7ba
commit
adf2ae2ac9
|
@ -406,8 +406,7 @@ void RegisterMMIO(MMIO::Mapping* mmio, u32 base)
|
||||||
// We make the samples ready as soon as possible
|
// We make the samples ready as soon as possible
|
||||||
void *address = Memory::GetPointer(g_audioDMA.SourceAddress);
|
void *address = Memory::GetPointer(g_audioDMA.SourceAddress);
|
||||||
AudioCommon::SendAIBuffer((short*)address, g_audioDMA.AudioDMAControl.NumBlocks * 8);
|
AudioCommon::SendAIBuffer((short*)address, g_audioDMA.AudioDMAControl.NumBlocks * 8);
|
||||||
|
CoreTiming::ScheduleEvent_Threadsafe(80, et_GenerateDSPInterrupt, INT_AID | (1 << 16));
|
||||||
GenerateDSPInterrupt(DSP::INT_AID);
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue