Showing changes from revision #0 to #1:
Added | Removed | Changed
Entry | |
---|---|
R11 | Value of R2 from DMA_QueueTransfer call |
R12 | Value of R5 from DMA_RegisterChannel call |
Exit | |
---|---|
R0 | 0 to continue transfer |
Otherwise, attempt to stop transfer after (at least) this many bytes | |
- | All other registers preserved |
Processor in IRQ or SVC mode |
IRQ & FIQ status undefined |
If a synchronised DMA transfer was requested (by setting bit 2 of R0 in the call to DMA_QueueTransfer) then this callback will be called every time the number of bytes specified in the sync gap (R6 of DMA_QueueTransfer) have been transferred.
As well as serving as a method of notifying the CPU of the progress of a transfer, this callback can also be used as a way to request early termination of a transfer, by returning with R0 set to a non-zero value. In this case DMAManager will attempt to terminate the transfer after the next R0 bytes have been transferred. However due to the asynchronous nature of DMA and the fact that the transfer will still be running in the background at the time this call is made, it is not possible for DMAManager to guarantee that the transfer will stop at the requested point. Instead DMAManager can only guarantee that a minimum of R0 bytes will be transferred before the transfer stops.
This documentation only covers the RISC OS 5 version of the DMAManager SWIs. For other OS versions, consult the appropriate PRM volume (e.g. volume 5a).