Difference between revisions of "Unit DMA"
From Ultibo.org
(9 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
---- | ---- | ||
− | '''Ultibo DMA | + | '''Ultibo DMA Interface unit''' |
The DMA interfaces are 1 tier (Host only) whereas the USB interface is 3 tier (Host, Device and Driver). | The DMA interfaces are 1 tier (Host only) whereas the USB interface is 3 tier (Host, Device and Driver). | ||
Line 31: | Line 31: | ||
| <code>DMA_TYPE_NONE = 0;</code> | | <code>DMA_TYPE_NONE = 0;</code> | ||
| style="width: 50%;"| | | style="width: 50%;"| | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>DMA_TYPE_MAX = 0;</code> | ||
+ | | | ||
|- | |- | ||
|} | |} | ||
Line 44: | Line 49: | ||
|- | |- | ||
| <code>DMA_STATE_ENABLED = 1;</code> | | <code>DMA_STATE_ENABLED = 1;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>DMA_STATE_MAX = 1;</code> | ||
| | | | ||
|- | |- | ||
Line 86: | Line 96: | ||
| <code>DMA_FLAG_BULK = $00000200;</code> | | <code>DMA_FLAG_BULK = $00000200;</code> | ||
| Host supports bulk transfer | | Host supports bulk transfer | ||
+ | |- | ||
+ | | <code>DMA_FLAG_LITE = $00000400;</code> | ||
+ | | Host supports "lite" transfer | ||
+ | |- | ||
+ | | <code>DMA_FLAG_40BIT = $00000800;</code> | ||
+ | | Host supports 40-bit address transfer | ||
|- | |- | ||
|} | |} | ||
Line 113: | Line 129: | ||
| <code>DMA_REQUEST_FLAG_CYCLIC = $00000002;</code> | | <code>DMA_REQUEST_FLAG_CYCLIC = $00000002;</code> | ||
| This is a cyclic request which loops around from tail to head | | This is a cyclic request which loops around from tail to head | ||
+ | |- | ||
+ | | <code>DMA_REQUEST_FLAG_COMPATIBLE = $00000004;</code> | ||
+ | | If set then all buffers supplied are host configuration compatible (Sizing, Alignment, Flags) | ||
|- | |- | ||
|} | |} | ||
Line 127: | Line 146: | ||
| <code>DMA_LOG_LEVEL_INFO = LOG_LEVEL_INFO;</code> | | <code>DMA_LOG_LEVEL_INFO = LOG_LEVEL_INFO;</code> | ||
| DMA informational messages, such as a device being attached or detached | | DMA informational messages, such as a device being attached or detached | ||
+ | |- | ||
+ | | <code>DMA_LOG_LEVEL_WARN = LOG_LEVEL_WARN;</code> | ||
+ | | DMA warning messages | ||
|- | |- | ||
| <code>DMA_LOG_LEVEL_ERROR = LOG_LEVEL_ERROR;</code> | | <code>DMA_LOG_LEVEL_ERROR = LOG_LEVEL_ERROR;</code> | ||
Line 172: | Line 194: | ||
| Maximum X length for 2D stride | | Maximum X length for 2D stride | ||
|- | |- | ||
− | | <code>MinStride: | + | | <code>MinStride:LongInt;</code> |
− | | Minimum stride value (Increment between rows) | + | | Minimum stride value (Increment between rows) May be negative. |
|- | |- | ||
| <code>MaxStride:LongWord;</code> | | <code>MaxStride:LongWord;</code> | ||
Line 427: | Line 449: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 442: | Line 464: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 454: | Line 476: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 466: | Line 488: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 478: | Line 500: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 490: | Line 512: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Return |
| Pointer to new DMA entry or nil if DMA could not be created | | Pointer to new DMA entry or nil if DMA could not be created | ||
|- | |- | ||
Line 502: | Line 524: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Size |
− | | Size in bytes to allocate for new DMA (Including the DMA entry | + | | Size in bytes to allocate for new DMA (Including the DMA entry) |
|- | |- | ||
− | ! | + | ! Return |
| Pointer to new DMA entry or nil if DMA could not be created | | Pointer to new DMA entry or nil if DMA could not be created | ||
|- | |- | ||
Line 517: | Line 539: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 529: | Line 551: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 541: | Line 563: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 553: | Line 575: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 565: | Line 587: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 577: | Line 599: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 592: | Line 614: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 604: | Line 626: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 616: | Line 638: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 631: | Line 653: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! DMA |
| The DMA host that the request will be sent to | | The DMA host that the request will be sent to | ||
|- | |- | ||
− | ! | + | ! Size |
| The size of the data buffer to allocate | | The size of the data buffer to allocate | ||
|- | |- | ||
− | ! | + | ! Return |
| The newly allocated buffer or nil on failure | | The newly allocated buffer or nil on failure | ||
|- | |- | ||
Line 649: | Line 671: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! DMA |
| The DMA host that the request will be sent to | | The DMA host that the request will be sent to | ||
|- | |- | ||
− | ! | + | ! Size |
| The size of the data buffer to allocate (Updated on return to actual size) | | The size of the data buffer to allocate (Updated on return to actual size) | ||
|- | |- | ||
− | ! | + | ! Return |
| The newly allocated buffer or nil on failure | | The newly allocated buffer or nil on failure | ||
|- | |- | ||
− | ! | + | ! Note |
| This differs from DMABufferAllocate in that it updates the size value to reflect the actual size of the buffer allocated which may be required for some uses | | This differs from DMABufferAllocate in that it updates the size value to reflect the actual size of the buffer allocated which may be required for some uses | ||
|- | |- | ||
Line 670: | Line 692: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! DMA |
| The DMA host that the request will be sent to | | The DMA host that the request will be sent to | ||
|- | |- | ||
− | ! | + | ! Buffer |
| The data buffer to validate | | The data buffer to validate | ||
|- | |- | ||
− | ! | + | ! Size |
| The size of the data buffer | | The size of the data buffer | ||
|- | |- | ||
− | ! | + | ! Return |
| ERROR_SUCCESS on success or another error code on failure (ERROR_NOT_COMPATIBLE if not compatible with host) | | ERROR_SUCCESS on success or another error code on failure (ERROR_NOT_COMPATIBLE if not compatible with host) | ||
|- | |- | ||
− | ! | + | ! Note |
− | | Does not check for cache coherency requirements (Shared, Non Cached) only alignment and size. Buffers used as the source of a DMA request do not | + | | Does not check for cache coherency requirements (Shared, Non Cached) only alignment and size. Buffers used as the source of a DMA request do not necessarily need to meet alignment and size requirements, however buffers used as a destination must meet these requirements or the caller must take appropriate actions to prevent undesirable side effects from cache invalidation. |
|- | |- | ||
|} | |} | ||
Line 694: | Line 716: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Data |
| The buffer to be released | | The buffer to be released | ||
|- | |- | ||
− | ! | + | ! Return |
| ERROR_SUCCESS on success or another error code on failure | | ERROR_SUCCESS on success or another error code on failure | ||
|- | |- | ||
Line 712: | Line 734: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! DMA |
| The DMA host this request will be sent to | | The DMA host this request will be sent to | ||
|- | |- | ||
− | ! | + | ! Data |
| A linked list of DMA data blocks for the transfer (Optional) | | A linked list of DMA data blocks for the transfer (Optional) | ||
|- | |- | ||
− | ! | + | ! Callback |
| The callback function to be called on completion of the request | | The callback function to be called on completion of the request | ||
|- | |- | ||
− | ! | + | ! DriverData |
| Driver private data for the callback (Optional) | | Driver private data for the callback (Optional) | ||
|- | |- | ||
− | ! | + | ! Direction |
| The direction of the DMA request (eg DMA_DIR_MEM_TO_MEM) | | The direction of the DMA request (eg DMA_DIR_MEM_TO_MEM) | ||
|- | |- | ||
− | ! | + | ! Peripheral |
| The peripheral ID for data request gating (eg DMA_DREQ_ID_NONE) | | The peripheral ID for data request gating (eg DMA_DREQ_ID_NONE) | ||
|- | |- | ||
− | ! | + | ! Flags |
| Additional flags for this request (eg DMA_REQUEST_FLAG_CYCLIC) | | Additional flags for this request (eg DMA_REQUEST_FLAG_CYCLIC) | ||
|- | |- | ||
− | ! | + | ! Return |
| The newly allocated request or nil on failure | | The newly allocated request or nil on failure | ||
|- | |- | ||
Line 745: | Line 767: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Request |
| The request to be released | | The request to be released | ||
|- | |- | ||
− | ! | + | ! Return |
| ERROR_SUCCESS on success or another error code on failure | | ERROR_SUCCESS on success or another error code on failure | ||
|- | |- | ||
Line 760: | Line 782: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Request |
| The request to be submitted | | The request to be submitted | ||
|- | |- | ||
− | ! | + | ! Return |
| ERROR_SUCCESS if completed or another error code on failure | | ERROR_SUCCESS if completed or another error code on failure | ||
|- | |- | ||
− | ! | + | ! Note |
| The request will be completed asynchronously by the DMA host and the completion callback will be called when the request has either succeeded or failed | | The request will be completed asynchronously by the DMA host and the completion callback will be called when the request has either succeeded or failed | ||
|- | |- | ||
Line 778: | Line 800: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Request |
| The request to be cancelled | | The request to be cancelled | ||
|- | |- | ||
− | ! | + | ! Return'' |
| ERROR_SUCCESS if completed or another error code on failure | | ERROR_SUCCESS if completed or another error code on failure | ||
|- | |- | ||
Line 793: | Line 815: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Request |
| The DMA request which has completed | | The DMA request which has completed | ||
|- | |- | ||
− | ! | + | ! Note |
| DMA host drivers may call this on a worker thread | | DMA host drivers may call this on a worker thread | ||
|- | |- | ||
Line 811: | Line 833: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! DMA |
| The DMA host to execute the request on | | The DMA host to execute the request on | ||
|- | |- | ||
− | ! | + | ! Data |
| A linked list of DMA data blocks for the transfer | | A linked list of DMA data blocks for the transfer | ||
|- | |- | ||
− | ! | + | ! Direction |
| The direction of the DMA request (eg DMA_DIR_MEM_TO_MEM) | | The direction of the DMA request (eg DMA_DIR_MEM_TO_MEM) | ||
|- | |- | ||
− | ! | + | ! Peripheral |
| The peripheral ID for data request gating (eg DMA_DREQ_ID_NONE) | | The peripheral ID for data request gating (eg DMA_DREQ_ID_NONE) | ||
|- | |- | ||
− | ! | + | ! Flags |
| Additional flags for this transfer request (eg DMA_REQUEST_FLAG_CYCLIC) | | Additional flags for this transfer request (eg DMA_REQUEST_FLAG_CYCLIC) | ||
|- | |- | ||
− | ! | + | ! Timeout |
| Milliseconds to wait for request to complete (INFINITE to wait forever) | | Milliseconds to wait for request to complete (INFINITE to wait forever) | ||
|- | |- | ||
− | ! | + | ! Note |
| An internal callback will be specified and the function will wait for the transfer to complete | | An internal callback will be specified and the function will wait for the transfer to complete | ||
|- | |- | ||
Line 841: | Line 863: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! DMA |
| The DMA host to execute the request on | | The DMA host to execute the request on | ||
|- | |- | ||
− | ! | + | ! Data |
| A linked list of DMA data blocks for the transfer | | A linked list of DMA data blocks for the transfer | ||
|- | |- | ||
− | ! | + | ! Callback |
| The callback function to be called on completion of the request | | The callback function to be called on completion of the request | ||
|- | |- | ||
− | ! | + | ! DriverData |
| Driver private data for the callback (Optional) | | Driver private data for the callback (Optional) | ||
|- | |- | ||
− | ! | + | ! Direction |
| The direction of the DMA request (eg DMA_DIR_MEM_TO_MEM) | | The direction of the DMA request (eg DMA_DIR_MEM_TO_MEM) | ||
|- | |- | ||
− | ! | + | ! Peripheral |
| The peripheral ID for data request gating (eg DMA_DREQ_ID_NONE) | | The peripheral ID for data request gating (eg DMA_DREQ_ID_NONE) | ||
|- | |- | ||
− | ! | + | ! Flags |
| Additional flags for this transfer request (eg DMA_REQUEST_FLAG_CYCLIC) | | Additional flags for this transfer request (eg DMA_REQUEST_FLAG_CYCLIC) | ||
|- | |- | ||
− | ! | + | ! Note |
| The request will be passed to the callback with the DriverData field set to the DriverData passed to this function. On completion of the callback the request will automatically be released by the internal callback handler. | | The request will be passed to the callback with the DriverData field set to the DriverData passed to this function. On completion of the callback the request will automatically be released by the internal callback handler. | ||
|- | |- | ||
Line 874: | Line 896: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Request |
| The DMA request which has completed | | The DMA request which has completed | ||
|- | |- | ||
− | ! | + | ! Note |
| This is the internal callback for DMATransferRequest | | This is the internal callback for DMATransferRequest | ||
|- | |- | ||
Line 892: | Line 914: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 904: | Line 926: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Data |
| A linked list of DMA data blocks for the transfer | | A linked list of DMA data blocks for the transfer | ||
|- | |- | ||
− | ! | + | ! Direction |
| The direction of the DMA request (eg DMA_DIR_MEM_TO_MEM) | | The direction of the DMA request (eg DMA_DIR_MEM_TO_MEM) | ||
|- | |- | ||
− | ! | + | ! Peripheral |
| The peripheral ID for data request gating (eg DMA_DREQ_ID_NONE) | | The peripheral ID for data request gating (eg DMA_DREQ_ID_NONE) | ||
|- | |- | ||
Line 922: | Line 944: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Dest |
| The address to start the memory fill | | The address to start the memory fill | ||
|- | |- | ||
− | ! | + | ! Size |
| The size of memory to fill in bytes | | The size of memory to fill in bytes | ||
|- | |- | ||
− | ! | + | ! Value |
| The value to fill the memory with | | The value to fill the memory with | ||
|- | |- | ||
Line 940: | Line 962: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Source |
| The source address to start the memory copy | | The source address to start the memory copy | ||
|- | |- | ||
− | ! | + | ! Dest |
| The destination address to start the memory copy | | The destination address to start the memory copy | ||
|- | |- | ||
− | ! | + | ! Size |
| The size of memory to copy in bytes | | The size of memory to copy in bytes | ||
|- | |- | ||
Line 958: | Line 980: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Address |
| The address of the periperhal register to read from | | The address of the periperhal register to read from | ||
|- | |- | ||
− | ! | + | ! Dest |
| The destination address to start writing to | | The destination address to start writing to | ||
|- | |- | ||
− | ! | + | ! Size |
| The size of the read in bytes | | The size of the read in bytes | ||
|- | |- | ||
− | ! | + | ! Peripheral |
| The peripheral ID for data request gating (eg DMA_DREQ_ID_UART_RX) | | The peripheral ID for data request gating (eg DMA_DREQ_ID_UART_RX) | ||
|- | |- | ||
Line 979: | Line 1,001: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Source |
| The source address to start reading from | | The source address to start reading from | ||
|- | |- | ||
− | ! | + | ! Address |
| The address of the peripheral register to write to | | The address of the peripheral register to write to | ||
|- | |- | ||
− | ! | + | ! Size |
| The size of the write in bytes | | The size of the write in bytes | ||
|- | |- | ||
− | ! | + | ! Peripheral |
| The peripheral ID for data request gating (eg DMA_DREQ_ID_UART_TX) | | The peripheral ID for data request gating (eg DMA_DREQ_ID_UART_TX) | ||
|- | |- | ||
Line 1,000: | Line 1,022: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Size |
| The size of the buffer to allocate | | The size of the buffer to allocate | ||
|- | |- | ||
Line 1,012: | Line 1,034: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Size |
| The size of the buffer to allocate (Updated on return to actual size) | | The size of the buffer to allocate (Updated on return to actual size) | ||
|- | |- | ||
Line 1,024: | Line 1,046: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Buffer |
| The buffer to be released | | The buffer to be released | ||
|- | |- | ||
Line 1,034: | Line 1,056: | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
− | <pre style="border: 0; padding-bottom:0px;">function DMAGetCount:LongWord | + | <pre style="border: 0; padding-bottom:0px;">function DMAGetCount:LongWord;</pre> |
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current DMA host count</div> | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current DMA host count</div> | ||
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 1,046: | Line 1,068: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
− | <pre style="border: 0; padding-bottom:0px;">function DMAHostGetDefault:PDMAHost | + | <pre style="border: 0; padding-bottom:0px;">function DMAHostGetDefault:PDMAHost;</pre> |
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current default DMA host</div> | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current default DMA host</div> | ||
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 1,063: | Line 1,085: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 1,075: | Line 1,097: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! '''Note''' | + | ! Note |
+ | | None documented | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function DMATypeToString(DMAType:LongWord):String;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a DMA type value to a string</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | None documented | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function DMAStateToString(DMAState:LongWord):String;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a DMA state value to a string</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
| None documented | | None documented | ||
|- | |- | ||
Line 1,087: | Line 1,133: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! ''' | + | ! Note |
+ | | None documented | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">procedure DMALogInfo(DMA:PDMAHost; const AText:String); inline;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
| None documented | | None documented | ||
|- | |- | ||
Line 1,094: | Line 1,152: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
− | <pre style="border: 0; padding-bottom:0px;">procedure | + | <pre style="border: 0; padding-bottom:0px;">procedure DMALogWarn(DMA:PDMAHost; const AText:String); inline;</pre> |
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div> | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div> | ||
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 1,106: | Line 1,164: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
− | <pre style="border: 0; padding-bottom:0px;">procedure DMALogError(DMA:PDMAHost; const AText:String);</pre> | + | <pre style="border: 0; padding-bottom:0px;">procedure DMALogError(DMA:PDMAHost; const AText:String); inline;</pre> |
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div> | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div> | ||
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 1,118: | Line 1,176: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
− | <pre style="border: 0; padding-bottom:0px;">procedure DMALogDebug(DMA:PDMAHost;const AText:String);</pre> | + | <pre style="border: 0; padding-bottom:0px;">procedure DMALogDebug(DMA:PDMAHost; const AText:String); inline;</pre> |
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div> | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div> | ||
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- |
Latest revision as of 04:51, 10 October 2023
Return to Unit Reference
Contents
[hide]Description
Ultibo DMA Interface unit
The DMA interfaces are 1 tier (Host only) whereas the USB interface is 3 tier (Host, Device and Driver).
Constants
[Expand]
DMA specific constants
DMA_*
[Expand]
DMA host type
DMA_TYPE_*
[Expand]
DMA host state
DMA_STATE_*
[Expand]
DMA host flag
DMA_FLAG_*
[Expand]
DMA data flag
DMA_DATA_FLAG_*
[Expand]
DMA request flag
DMA_REQUEST_FLAG_*
[Expand]
DMA logging
DMA_LOG_*
Type definitions
DMA properties
DMA enumeration callback
TDMAEnumerate = function(DMA:PDMAHost; Data:Pointer):LongWord;
|
DMA notification callback
TDMANotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;
|
DMA host start
TDMAHostStart = function(DMA:PDMAHost):LongWord;
|
DMA host stop
TDMAHostStop = function(DMA:PDMAHost):LongWord;
|
DMA host reset
TDMAHostReset = function(DMA:PDMAHost):LongWord;
|
DMA host submit
TDMAHostSubmit = function(DMA:PDMAHost; Request:PDMARequest):LongWord;
|
DMA host cancel
TDMAHostCancel = function(DMA:PDMAHost; Request:PDMARequest):LongWord;
|
DMA host properties
TDMAHostProperties = function(DMA:PDMAHost; Properties:PDMAProperties):LongWord;
|
DMA host
DMA request completed
TDMARequestCompleted = procedure(Request:PDMARequest);
|
DMA request
Public variables
DMA logging
DMA_DEFAULT_LOG_LEVEL:LongWord = DMA_LOG_LEVEL_DEBUG;
|
Minimum level for DMA messages. Only messages with level greater than or equal to this will be printed. |
DMA_LOG_ENABLED:Boolean;
|
Function declarations
Initialization functions
DMA host functions
[Expand]
function DMAHostProperties(DMA:PDMAHost; Properties:PDMAProperties):LongWord;
Description: To be documented
[Expand]
function DMAHostRegister(DMA:PDMAHost):LongWord;
Description: Register a new DMA in the DMA host table
[Expand]
function DMAHostDeregister(DMA:PDMAHost):LongWord;
Description: Deregister a DMA from the DMA host table
[Expand]
function DMAHostEnumerate(Callback:TDMAEnumerate; Data:Pointer):LongWord;
Description: To be documented
[Expand]
function DMAHostNotification(DMA:PDMAHost; Callback:TDMANotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
Description: To be documented
DMA data functions
[Expand]
function DMADataCount(Data:PDMAData):LongWord;
Description: Return the total number of data blocks in the linked list
[Expand]
function DMADataFlags(Data:PDMAData):LongWord;
Description: Return the combined flags of the data blocks in the linked list
[Expand]
function DMADataMaximum(Data:PDMAData):LongWord;
Description: Return the size of the largest data block in the linked list
DMA buffer functions
[Expand]
function DMABufferAllocate(DMA:PDMAHost; Size:LongWord):Pointer; inline;
Description: Allocate a data buffer for a DMA request
[Expand]
function DMABufferAllocateEx(DMA:PDMAHost; var Size:LongWord):Pointer;
Description: Allocate a data buffer for a DMA request
[Expand]
function DMABufferValidate(DMA:PDMAHost; Buffer:Pointer; Size:LongWord):LongWord;
Description: Validate a data buffer for a DMA request against the DMA host requirements
[Expand]
function DMABufferRelease(Buffer:Pointer):LongWord;
Description: Release a data buffer from a DMA request
DMA request functions
[Expand]
function DMARequestAllocate(DMA:PDMAHost; Data:PDMAData; Callback:TDMARequestCompleted; DriverData:Pointer; Direction,Peripheral,Flags:LongWord):PDMARequest;
Description: Allocate a new DMA request
[Expand]
function DMARequestRelease(Request:PDMARequest):LongWord;
Description: Release and destroy a DMA request
[Expand]
function DMARequestSubmit(Request:PDMARequest):LongWord;
Description: Submit a DMA request to a DMA host
[Expand]
function DMARequestCancel(Request:PDMARequest):LongWord;
Description: Cancel a DMA request previously submitted to a DMA host
[Expand]
procedure DMARequestComplete(Request:PDMARequest);
Description: Called by a DMA host when a DMA request completes
DMA transfer functions
[Expand]
function DMATransferRequest(DMA:PDMAHost; Data:PDMAData; Direction,Peripheral,Flags,Timeout:LongWord):LongWord;
Description: Perform a DMA transfer request with the supplied data blocks on the supplied host
[Expand]
function DMATransferRequestEx(DMA:PDMAHost; Data:PDMAData; Callback:TDMARequestCompleted; DriverData:Pointer; Direction,Peripheral,Flags:LongWord):LongWord;
Description: Perform a DMA transfer request with the supplied data blocks on the supplied host
[Expand]
procedure DMATransferRequestComplete(Request:PDMARequest);
Description: Called when a DMA transfer request completes
RTL DMA functions
[Expand]
function SysDMATransfer(Data:PDMAData; Direction,Peripheral:LongWord):LongWord;
Description: Perform a DMA transfer using the list of DMA data blocks provided
[Expand]
function SysDMAFillMemory(Dest:Pointer; Size:LongWord; Value:Byte):LongWord;
Description: Fill memory at the destination address using DMA
[Expand]
function SysDMACopyMemory(Source,Dest:Pointer; Size:LongWord):LongWord;
Description: Copy memory from the source to the destination address using DMA
[Expand]
function SysDMAReadPeripheral(Address,Dest:Pointer; Size,Peripheral:LongWord):LongWord;
Description: Read from a periperal address to the destination address using DMA
[Expand]
function SysDMAWritePeripheral(Source,Address:Pointer; Size,Peripheral:LongWord):LongWord;
Description: Write to a peripheral address from the source address using DMA
[Expand]
function SysDMAAllocateBuffer(Size:LongWord):Pointer;
Description: Allocate a buffer compatible with DMA memory reads or writes
[Expand]
function SysDMAAllocateBufferEx(var Size:LongWord):Pointer;
Description: Allocate a buffer compatible with DMA memory reads or writes
[Expand]
function SysDMAReleaseBuffer(Buffer:Pointer):LongWord;
Description: Release a buffer allocated with DMAAllocateBuffer
DMA helper functions
[Expand]
function DMAHostSetDefault(DMA:PDMAHost):LongWord;
Description: Set the current default DMA device
[Expand]
function DMAHostCheck(DMA:PDMAHost):PDMAHost;
Description: Check if the supplied DMA is in the DMA host table
[Expand]
function DMATypeToString(DMAType:LongWord):String;
Description: Convert a DMA type value to a string
[Expand]
function DMAStateToString(DMAState:LongWord):String;
Description: Convert a DMA state value to a string
[Expand]
procedure DMALog(Level:Integer; DMA:PDMAHost; const AText:String);
Description: To be documented
[Expand]
procedure DMALogInfo(DMA:PDMAHost; const AText:String); inline;
Description: To be documented
[Expand]
procedure DMALogWarn(DMA:PDMAHost; const AText:String); inline;
Description: To be documented
[Expand]
procedure DMALogError(DMA:PDMAHost; const AText:String); inline;
Description: To be documented
[Expand]
procedure DMALogDebug(DMA:PDMAHost; const AText:String); inline;
Description: To be documented
Return to Unit Reference