| /****************************************************************************** |
| * Filename: hw_udma_h |
| * Revised: 2016-03-14 09:20:59 +0100 (Mon, 14 Mar 2016) |
| * Revision: 45924 |
| * |
| * Copyright (c) 2015 - 2016, Texas Instruments Incorporated |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are met: |
| * |
| * 1) Redistributions of source code must retain the above copyright notice, |
| * this list of conditions and the following disclaimer. |
| * |
| * 2) Redistributions in binary form must reproduce the above copyright notice, |
| * this list of conditions and the following disclaimer in the documentation |
| * and/or other materials provided with the distribution. |
| * |
| * 3) Neither the name of the ORGANIZATION nor the names of its contributors may |
| * be used to endorse or promote products derived from this software without |
| * specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
| * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| * POSSIBILITY OF SUCH DAMAGE. |
| * |
| ******************************************************************************/ |
| |
| #ifndef __HW_UDMA_H__ |
| #define __HW_UDMA_H__ |
| |
| //***************************************************************************** |
| // |
| // This section defines the register offsets of |
| // UDMA component |
| // |
| //***************************************************************************** |
| // Status |
| #define UDMA_O_STATUS 0x00000000 |
| |
| // Configuration |
| #define UDMA_O_CFG 0x00000004 |
| |
| // Channel Control Data Base Pointer |
| #define UDMA_O_CTRL 0x00000008 |
| |
| // Channel Alternate Control Data Base Pointer |
| #define UDMA_O_ALTCTRL 0x0000000C |
| |
| // Channel Wait On Request Status |
| #define UDMA_O_WAITONREQ 0x00000010 |
| |
| // Channel Software Request |
| #define UDMA_O_SOFTREQ 0x00000014 |
| |
| // Channel Set UseBurst |
| #define UDMA_O_SETBURST 0x00000018 |
| |
| // Channel Clear UseBurst |
| #define UDMA_O_CLEARBURST 0x0000001C |
| |
| // Channel Set Request Mask |
| #define UDMA_O_SETREQMASK 0x00000020 |
| |
| // Clear Channel Request Mask |
| #define UDMA_O_CLEARREQMASK 0x00000024 |
| |
| // Set Channel Enable |
| #define UDMA_O_SETCHANNELEN 0x00000028 |
| |
| // Clear Channel Enable |
| #define UDMA_O_CLEARCHANNELEN 0x0000002C |
| |
| // Channel Set Primary-Alternate |
| #define UDMA_O_SETCHNLPRIALT 0x00000030 |
| |
| // Channel Clear Primary-Alternate |
| #define UDMA_O_CLEARCHNLPRIALT 0x00000034 |
| |
| // Set Channel Priority |
| #define UDMA_O_SETCHNLPRIORITY 0x00000038 |
| |
| // Clear Channel Priority |
| #define UDMA_O_CLEARCHNLPRIORITY 0x0000003C |
| |
| // Error Status and Clear |
| #define UDMA_O_ERROR 0x0000004C |
| |
| // Channel Request Done |
| #define UDMA_O_REQDONE 0x00000504 |
| |
| // Channel Request Done Mask |
| #define UDMA_O_DONEMASK 0x00000520 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_STATUS |
| // |
| //***************************************************************************** |
| // Field: [31:28] TEST |
| // |
| // |
| // 0x0: Controller does not include the integration test logic |
| // 0x1: Controller includes the integration test logic |
| // 0x2: Undefined |
| // ... |
| // 0xF: Undefined |
| #define UDMA_STATUS_TEST_W 4 |
| #define UDMA_STATUS_TEST_M 0xF0000000 |
| #define UDMA_STATUS_TEST_S 28 |
| |
| // Field: [20:16] TOTALCHANNELS |
| // |
| // Register value returns number of available uDMA channels minus one. For |
| // example a read out value of: |
| // |
| // 0x00: Show that the controller is configured to use 1 uDMA channel |
| // 0x01: Shows that the controller is configured to use 2 uDMA channels |
| // ... |
| // 0x1F: Shows that the controller is configured to use 32 uDMA channels |
| // (32-1=31=0x1F) |
| #define UDMA_STATUS_TOTALCHANNELS_W 5 |
| #define UDMA_STATUS_TOTALCHANNELS_M 0x001F0000 |
| #define UDMA_STATUS_TOTALCHANNELS_S 16 |
| |
| // Field: [7:4] STATE |
| // |
| // Current state of the control state machine. State can be one of the |
| // following: |
| // |
| // 0x0: Idle |
| // 0x1: Reading channel controller data |
| // 0x2: Reading source data end pointer |
| // 0x3: Reading destination data end pointer |
| // 0x4: Reading source data |
| // 0x5: Writing destination data |
| // 0x6: Waiting for uDMA request to clear |
| // 0x7: Writing channel controller data |
| // 0x8: Stalled |
| // 0x9: Done |
| // 0xA: Peripheral scatter-gather transition |
| // 0xB: Undefined |
| // ... |
| // 0xF: Undefined. |
| #define UDMA_STATUS_STATE_W 4 |
| #define UDMA_STATUS_STATE_M 0x000000F0 |
| #define UDMA_STATUS_STATE_S 4 |
| |
| // Field: [0] MASTERENABLE |
| // |
| // Shows the enable status of the controller as configured by CFG.MASTERENABLE: |
| // |
| // 0: Controller is disabled |
| // 1: Controller is enabled |
| #define UDMA_STATUS_MASTERENABLE 0x00000001 |
| #define UDMA_STATUS_MASTERENABLE_BITN 0 |
| #define UDMA_STATUS_MASTERENABLE_M 0x00000001 |
| #define UDMA_STATUS_MASTERENABLE_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_CFG |
| // |
| //***************************************************************************** |
| // Field: [7:5] PRTOCTRL |
| // |
| // Sets the AHB-Lite bus protocol protection state by controlling the AHB |
| // signal HProt[3:1] as follows: |
| // |
| // Bit [7] Controls HProt[3] to indicate if a cacheable access is occurring. |
| // Bit [6] Controls HProt[2] to indicate if a bufferable access is occurring. |
| // Bit [5] Controls HProt[1] to indicate if a privileged access is occurring. |
| // |
| // When bit [n] = 1 then the corresponding HProt bit is high. |
| // When bit [n] = 0 then the corresponding HProt bit is low. |
| // |
| // This field controls HProt[3:1] signal for all transactions initiated by uDMA |
| // except two transactions below: |
| // - the read from the address indicated by source address pointer |
| // - the write to the address indicated by destination address pointer |
| // HProt[3:1] for these two exceptions can be controlled by dedicated fields in |
| // the channel configutation descriptor. |
| #define UDMA_CFG_PRTOCTRL_W 3 |
| #define UDMA_CFG_PRTOCTRL_M 0x000000E0 |
| #define UDMA_CFG_PRTOCTRL_S 5 |
| |
| // Field: [0] MASTERENABLE |
| // |
| // Enables the controller: |
| // |
| // 0: Disables the controller |
| // 1: Enables the controller |
| #define UDMA_CFG_MASTERENABLE 0x00000001 |
| #define UDMA_CFG_MASTERENABLE_BITN 0 |
| #define UDMA_CFG_MASTERENABLE_M 0x00000001 |
| #define UDMA_CFG_MASTERENABLE_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_CTRL |
| // |
| //***************************************************************************** |
| // Field: [31:10] BASEPTR |
| // |
| // This register point to the base address for the primary data structures of |
| // each DMA channel. This is not stored in module, but in system memory, thus |
| // space must be allocated for this usage when DMA is in usage |
| #define UDMA_CTRL_BASEPTR_W 22 |
| #define UDMA_CTRL_BASEPTR_M 0xFFFFFC00 |
| #define UDMA_CTRL_BASEPTR_S 10 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_ALTCTRL |
| // |
| //***************************************************************************** |
| // Field: [31:0] BASEPTR |
| // |
| // This register shows the base address for the alternate data structures and |
| // is calculated by module, thus read only |
| #define UDMA_ALTCTRL_BASEPTR_W 32 |
| #define UDMA_ALTCTRL_BASEPTR_M 0xFFFFFFFF |
| #define UDMA_ALTCTRL_BASEPTR_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_WAITONREQ |
| // |
| //***************************************************************************** |
| // Field: [31:0] CHNLSTATUS |
| // |
| // Channel wait on request status: |
| // |
| // Bit [Ch] = 0: Once uDMA receives a single or burst request on channel Ch, |
| // this channel may come out of active state even if request is still present. |
| // Bit [Ch] = 1: Once uDMA receives a single or burst request on channel Ch, it |
| // keeps channel Ch in active state until the requests are deasserted. This |
| // handshake is necessary for channels where the requester is in an |
| // asynchronous domain or can run at slower clock speed than uDMA |
| #define UDMA_WAITONREQ_CHNLSTATUS_W 32 |
| #define UDMA_WAITONREQ_CHNLSTATUS_M 0xFFFFFFFF |
| #define UDMA_WAITONREQ_CHNLSTATUS_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_SOFTREQ |
| // |
| //***************************************************************************** |
| // Field: [31:0] CHNLS |
| // |
| // Set the appropriate bit to generate a software uDMA request on the |
| // corresponding uDMA channel |
| // |
| // Bit [Ch] = 0: Does not create a uDMA request for channel Ch |
| // Bit [Ch] = 1: Creates a uDMA request for channel Ch |
| // |
| // Writing to a bit where a uDMA channel is not implemented does not create a |
| // uDMA request for that channel |
| #define UDMA_SOFTREQ_CHNLS_W 32 |
| #define UDMA_SOFTREQ_CHNLS_M 0xFFFFFFFF |
| #define UDMA_SOFTREQ_CHNLS_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_SETBURST |
| // |
| //***************************************************************************** |
| // Field: [31:0] CHNLS |
| // |
| // Returns the useburst status, or disables individual channels from generating |
| // single uDMA requests. The value R is the arbitration rate and stored in the |
| // controller data structure. |
| // |
| // Read as: |
| // |
| // Bit [Ch] = 0: uDMA channel Ch responds to both burst and single requests on |
| // channel C. The controller performs 2^R, or single, bus transfers. |
| // |
| // Bit [Ch] = 1: uDMA channel Ch does not respond to single transfer requests. |
| // The controller only responds to burst transfer requests and performs 2^R |
| // transfers. |
| // |
| // Write as: |
| // Bit [Ch] = 0: No effect. Use the CLEARBURST.CHNLS to set bit [Ch] to 0. |
| // Bit [Ch] = 1: Disables single transfer requests on channel Ch. The |
| // controller performs 2^R transfers for burst requests. |
| // |
| // Writing to a bit where a uDMA channel is not implemented has no effect |
| #define UDMA_SETBURST_CHNLS_W 32 |
| #define UDMA_SETBURST_CHNLS_M 0xFFFFFFFF |
| #define UDMA_SETBURST_CHNLS_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_CLEARBURST |
| // |
| //***************************************************************************** |
| // Field: [31:0] CHNLS |
| // |
| // Set the appropriate bit to enable single transfer requests. |
| // |
| // Write as: |
| // |
| // Bit [Ch] = 0: No effect. Use the SETBURST.CHNLS to disable single transfer |
| // requests. |
| // |
| // Bit [Ch] = 1: Enables single transfer requests on channel Ch. |
| // |
| // Writing to a bit where a DMA channel is not implemented has no effect. |
| #define UDMA_CLEARBURST_CHNLS_W 32 |
| #define UDMA_CLEARBURST_CHNLS_M 0xFFFFFFFF |
| #define UDMA_CLEARBURST_CHNLS_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_SETREQMASK |
| // |
| //***************************************************************************** |
| // Field: [31:0] CHNLS |
| // |
| // Returns the burst and single request mask status, or disables the |
| // corresponding channel from generating uDMA requests. |
| // |
| // Read as: |
| // Bit [Ch] = 0: External requests are enabled for channel Ch. |
| // Bit [Ch] = 1: External requests are disabled for channel Ch. |
| // |
| // Write as: |
| // Bit [Ch] = 0: No effect. Use the CLEARREQMASK.CHNLS to enable uDMA requests. |
| // Bit [Ch] = 1: Disables uDMA burst request channel [C] and uDMA single |
| // request channel [C] input from generating uDMA requests. |
| // |
| // Writing to a bit where a uDMA channel is not implemented has no effect |
| #define UDMA_SETREQMASK_CHNLS_W 32 |
| #define UDMA_SETREQMASK_CHNLS_M 0xFFFFFFFF |
| #define UDMA_SETREQMASK_CHNLS_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_CLEARREQMASK |
| // |
| //***************************************************************************** |
| // Field: [31:0] CHNLS |
| // |
| // Set the appropriate bit to enable DMA request for the channel. |
| // |
| // Write as: |
| // Bit [Ch] = 0: No effect. Use the SETREQMASK.CHNLS to disable channel C from |
| // generating requests. |
| // Bit [Ch] = 1: Enables channel [C] to generate DMA requests. |
| // |
| // Writing to a bit where a DMA channel is not implemented has no effect. |
| #define UDMA_CLEARREQMASK_CHNLS_W 32 |
| #define UDMA_CLEARREQMASK_CHNLS_M 0xFFFFFFFF |
| #define UDMA_CLEARREQMASK_CHNLS_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_SETCHANNELEN |
| // |
| //***************************************************************************** |
| // Field: [31:0] CHNLS |
| // |
| // Returns the enable status of the channels, or enables the corresponding |
| // channels. |
| // |
| // Read as: |
| // Bit [Ch] = 0: Channel Ch is disabled. |
| // Bit [Ch] = 1: Channel Ch is enabled. |
| // |
| // Write as: |
| // Bit [Ch] = 0: No effect. Use the CLEARCHANNELEN.CHNLS to disable a channel |
| // Bit [Ch] = 1: Enables channel Ch |
| // |
| // Writing to a bit where a DMA channel is not implemented has no effect |
| #define UDMA_SETCHANNELEN_CHNLS_W 32 |
| #define UDMA_SETCHANNELEN_CHNLS_M 0xFFFFFFFF |
| #define UDMA_SETCHANNELEN_CHNLS_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_CLEARCHANNELEN |
| // |
| //***************************************************************************** |
| // Field: [31:0] CHNLS |
| // |
| // Set the appropriate bit to disable the corresponding uDMA channel. |
| // |
| // Write as: |
| // Bit [Ch] = 0: No effect. Use the SETCHANNELEN.CHNLS to enable uDMA channels. |
| // Bit [Ch] = 1: Disables channel Ch |
| // |
| // Writing to a bit where a uDMA channel is not implemented has no effect |
| #define UDMA_CLEARCHANNELEN_CHNLS_W 32 |
| #define UDMA_CLEARCHANNELEN_CHNLS_M 0xFFFFFFFF |
| #define UDMA_CLEARCHANNELEN_CHNLS_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_SETCHNLPRIALT |
| // |
| //***************************************************************************** |
| // Field: [31:0] CHNLS |
| // |
| // Returns the channel control data structure status, or selects the alternate |
| // data structure for the corresponding uDMA channel. |
| // |
| // Read as: |
| // Bit [Ch] = 0: uDMA channel Ch is using the primary data structure. |
| // Bit [Ch] = 1: uDMA channel Ch is using the alternate data structure. |
| // |
| // Write as: |
| // Bit [Ch] = 0: No effect. Use the CLEARCHNLPRIALT.CHNLS to disable a channel |
| // Bit [Ch] = 1: Selects the alternate data structure for channel Ch |
| // |
| // Writing to a bit where a uDMA channel is not implemented has no effect |
| #define UDMA_SETCHNLPRIALT_CHNLS_W 32 |
| #define UDMA_SETCHNLPRIALT_CHNLS_M 0xFFFFFFFF |
| #define UDMA_SETCHNLPRIALT_CHNLS_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_CLEARCHNLPRIALT |
| // |
| //***************************************************************************** |
| // Field: [31:0] CHNLS |
| // |
| // Clears the appropriate bit to select the primary data structure for the |
| // corresponding uDMA channel. |
| // |
| // Write as: |
| // Bit [Ch] = 0: No effect. Use the SETCHNLPRIALT.CHNLS to select the alternate |
| // data structure. |
| // Bit [Ch] = 1: Selects the primary data structure for channel Ch. |
| // |
| // Writing to a bit where a uDMA channel is not implemented has no effect |
| #define UDMA_CLEARCHNLPRIALT_CHNLS_W 32 |
| #define UDMA_CLEARCHNLPRIALT_CHNLS_M 0xFFFFFFFF |
| #define UDMA_CLEARCHNLPRIALT_CHNLS_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_SETCHNLPRIORITY |
| // |
| //***************************************************************************** |
| // Field: [31:0] CHNLS |
| // |
| // Returns the channel priority mask status, or sets the channel priority to |
| // high. |
| // |
| // Read as: |
| // Bit [Ch] = 0: uDMA channel Ch is using the default priority level. |
| // Bit [Ch] = 1: uDMA channel Ch is using a high priority level. |
| // |
| // Write as: |
| // Bit [Ch] = 0: No effect. Use the CLEARCHNLPRIORITY.CHNLS to set channel Ch |
| // to the default priority level. |
| // Bit [Ch] = 1: Channel Ch uses the high priority level. |
| // |
| // Writing to a bit where a uDMA channel is not implemented has no effect |
| #define UDMA_SETCHNLPRIORITY_CHNLS_W 32 |
| #define UDMA_SETCHNLPRIORITY_CHNLS_M 0xFFFFFFFF |
| #define UDMA_SETCHNLPRIORITY_CHNLS_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_CLEARCHNLPRIORITY |
| // |
| //***************************************************************************** |
| // Field: [31:0] CHNLS |
| // |
| // Clear the appropriate bit to select the default priority level for the |
| // specified uDMA channel. |
| // |
| // Write as: |
| // Bit [Ch] = 0: No effect. Use the SETCHNLPRIORITY.CHNLS to set channel Ch to |
| // the high priority level. |
| // Bit [Ch] = 1: Channel Ch uses the default priority level. |
| // |
| // Writing to a bit where a uDMA channel is not implemented has no effect |
| #define UDMA_CLEARCHNLPRIORITY_CHNLS_W 32 |
| #define UDMA_CLEARCHNLPRIORITY_CHNLS_M 0xFFFFFFFF |
| #define UDMA_CLEARCHNLPRIORITY_CHNLS_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_ERROR |
| // |
| //***************************************************************************** |
| // Field: [0] STATUS |
| // |
| // Returns the status of bus error flag in uDMA, or clears this bit |
| // |
| // Read as: |
| // |
| // 0: No bus error detected |
| // 1: Bus error detected |
| // |
| // Write as: |
| // |
| // 0: No effect, status of bus error flag is unchanged. |
| // 1: Clears the bus error flag. |
| #define UDMA_ERROR_STATUS 0x00000001 |
| #define UDMA_ERROR_STATUS_BITN 0 |
| #define UDMA_ERROR_STATUS_M 0x00000001 |
| #define UDMA_ERROR_STATUS_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_REQDONE |
| // |
| //***************************************************************************** |
| // Field: [31:0] CHNLS |
| // |
| // Reflects the uDMA done status for the given channel, channel [Ch]. It's a |
| // sticky done bit. Unless cleared by writing a 1, it holds the value of 1. |
| // |
| // Read as: |
| // Bit [Ch] = 0: Request has not completed for channel Ch |
| // Bit [Ch] = 1: Request has completed for the channel Ch |
| // |
| // Writing a 1 to individual bits would clear the corresponding bit. |
| // |
| // Write as: |
| // Bit [Ch] = 0: No effect. |
| // Bit [Ch] = 1: The corresponding [Ch] bit is cleared and is set to 0 |
| #define UDMA_REQDONE_CHNLS_W 32 |
| #define UDMA_REQDONE_CHNLS_M 0xFFFFFFFF |
| #define UDMA_REQDONE_CHNLS_S 0 |
| |
| //***************************************************************************** |
| // |
| // Register: UDMA_O_DONEMASK |
| // |
| //***************************************************************************** |
| // Field: [31:0] CHNLS |
| // |
| // Controls the propagation of the uDMA done and active state to the assigned |
| // peripheral. Specifically used for software channels. |
| // |
| // Read as: |
| // Bit [Ch] = 0: uDMA done and active state for channel Ch is not blocked from |
| // reaching to the peripherals. |
| // Note that the uDMA done state for channel [Ch] is blocked from contributing |
| // to generation of combined uDMA done signal |
| // |
| // Bit [Ch] = 1: uDMA done and active state for channel Ch is blocked from |
| // reaching to the peripherals. |
| // Note that the uDMA done state for channel [Ch] is not blocked from |
| // contributing to generation of combined uDMA done signal |
| // |
| // Write as: |
| // Bit [Ch] = 0: Allows uDMA done and active stat to propagate to the |
| // peripherals. |
| // Note that this disables uDMA done state for channel [Ch] from contributing |
| // to generation of combined uDMA done signal |
| // |
| // Bit [Ch] = 1: Blocks uDMA done and active state to propagate to the |
| // peripherals. |
| // Note that this enables uDMA done for channel [Ch] to contribute to |
| // generation of combined uDMA done signal. |
| #define UDMA_DONEMASK_CHNLS_W 32 |
| #define UDMA_DONEMASK_CHNLS_M 0xFFFFFFFF |
| #define UDMA_DONEMASK_CHNLS_S 0 |
| |
| |
| #endif // __UDMA__ |