Newer
Older
mbed-os / targets / TARGET_Cypress / TARGET_PSOC6 / mtb-pdl-cat1 / personalities / platform / dmac-1.0.cypersonality
@Dustin Crossman Dustin Crossman on 4 Jun 2021 18 KB Fix file modes.
<?xml version="1.0" encoding="utf-8"?>


<!--****************************************************************************
* \file dmac.cypersonality
* \version 1.0
*
* \brief
* DMAC personality description file.
*
********************************************************************************
* \copyright
* Copyright 2018-2019 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*****************************************************************************-->

<Personality id="mxs40dmac" name="DMAC" version="1.0" path="DMAС" xmlns="http://cypress.com/xsd/cyhwpersonality_v1">
  <Dependencies>
    <IpBlock name="m4cpuss,m4cpuss_ver2" />
    <Resource name="cpuss\.dmac\.chan" used="true" />
  </Dependencies>
  <ExposedMembers>
    <ExposedMember key="block" paramId="block" />
    <ExposedMember key="channel" paramId="channel" />
  </ExposedMembers>
  <Parameters>
    <!-- PDL documentation -->
    <ParamDoc id="pdlDoc" name="Configuration Help" group="Peripheral Documentation" default="file:///`${cy_libs_path()}`/docs/pdl_api_reference_manual/html/group__group__dmac.html" linkText="Open DMAC Documentation" visible="true" desc="Opens the Peripheral Driver Library Documentation" />
  
    <ParamString id="block" name="block number" group="Internal" default="`${&quot;dw0&quot; eq getBlockType(1) ? 0 : 1}`" visible="false" editable="false" desc="" />
    <ParamString id="base" name="base address" group="Internal" default="`${getBlockType(1)}`" visible="false" editable="false" desc="" />
    <ParamString id="channel" name="channel number" group="Internal" default="`${getInstNumber(&quot;chan&quot;)}`" visible="false" editable="false" desc="" />
    <ParamString id="version" name="version number" group="Internal" default="`${getVersion()}`" visible="false" editable="false" desc="" />

    <!--Channel-->
    <ParamSignal port="tr_in[0]" name="Trigger Input" group="Channel"  visible="true" desc="Sets up the trigger input signal for the DMA start." canBeEmpty="true" />
    <ParamSignal port="tr_out[0]" name="Trigger Output" group="Channel"  visible="true" desc="Sets up the trigger output signal for the DMA completion." canBeEmpty="true" />   
    <ParamRange id="CHANNEL_PRIORITY" name="Channel Priority" group="Channel" default="3" min="0" max="3" resolution="1" visible="true" editable="true" desc="Priority of the channel in the DMA block. Lower number takes precedence." />
    <ParamRange id="NUM_OF_DESCRIPTORS" name="Number of Descriptors" group="Channel" default="4" min="1" max="256" resolution="1" visible="true" editable="true" desc="The number of descriptors sets up rest of the customizer. Based on the number set in this parameter as many instances of Descriptors are created in the customizer." />
    <ParamBool id="BUFFERABLE" name="Bufferable" group="Channel" default="false" visible="true" editable="true" desc="Makes the channel data transactions bufferable." />

    <ParamChoice id="DESCR_SELECTION" name="Select the descriptor" group="Channel" default="0" visible="true" editable="true" desc="Select the descriptor to configure it.">
      <Entry name="Descriptor_$idx" value="$idx" visible="`${NUM_OF_DESCRIPTORS &gt; $idx}`" repeatCount="256" />
    </ParamChoice>

    <!--Descriptor-->
    <Repeat count="256">
        <ParamString id="DESCR_NAME_$idx" name="Descriptor_$idx Name" group="Descriptor" default="Descriptor_$idx" visible="false" editable="true" desc="This parameter sets up the instance name for the Descriptor."/>

        <ParamBool id="pDescrSelEqIdx_$idx" name="pDescrSelEqIdx_$idx" desc="pDescrSelEqIdx_$idx" group="Internal" default="`${DESCR_SELECTION eq $idx}`" visible="false" editable="false" />
        
        <ParamChoice id="TRIG_OUT_TYPE_$idx" name="Trigger output" group="Descriptor" default="CY_DMAC_1ELEMENT" visible="`${pDescrSelEqIdx_$idx}`" editable="true" desc="This is the selection for what event would trigger the DMA output.">
          <Entry name="Trigger on every element transfer completion" value="CY_DMAC_1ELEMENT" visible="true" />
          <Entry name="Trigger on every X loop transfer completion" value="CY_DMAC_X_LOOP" visible="true" />
          <Entry name="Trigger on descriptor completion" value="CY_DMAC_DESCR" visible="true" />
          <Entry name="Trigger on completion of entire descriptor chain" value="CY_DMAC_DESCR_CHAIN" visible="true" />
        </ParamChoice>
        <ParamChoice id="INTR_OUT_$idx" name="Interrupt type" group="Descriptor" default="CY_DMAC_1ELEMENT" visible="`${pDescrSelEqIdx_$idx}`" editable="true" desc="This is the selection for what event would trigger the DMA interrupt.">
          <Entry name="Trigger on every element transfer completion" value="CY_DMAC_1ELEMENT" visible="true" />
          <Entry name="Trigger on every X loop transfer completion" value="CY_DMAC_X_LOOP" visible="true" />
          <Entry name="Trigger on descriptor completion" value="CY_DMAC_DESCR" visible="true" />
          <Entry name="Trigger on completion of entire descriptor chain" value="CY_DMAC_DESCR_CHAIN" visible="true" />
        </ParamChoice>
        <ParamBool id="ENABLE_CHAINING_$idx" name="Enable Chaining" group="Descriptor" default="false" visible="`${pDescrSelEqIdx_$idx}`" editable="true" desc="Specifies whether or not the descriptor chains to another" />
        <ParamRange id="CHAIN_TO_$idx" name="Chain to descriptor" group="Descriptor" default="0" min="0" max="`${NUM_OF_DESCRIPTORS - 1}`" resolution="1" visible="`${pDescrSelEqIdx_$idx &amp;&amp; ENABLE_CHAINING_$idx}`" editable="true" desc="Defines the descriptor which is chained to this descriptor." />

        <ParamChoice id="CHAN_STATE_COMPL_$idx" name="Channel state on completion" group="Descriptor" default="CY_DMAC_CHANNEL_ENABLED" visible="`${pDescrSelEqIdx_$idx}`" editable="true" desc="This is the state of the channel when the descriptor is completed.">
          <Entry name="Disable" value="CY_DMAC_CHANNEL_DISABLED" visible="true" />
          <Entry name="Enable" value="CY_DMAC_CHANNEL_ENABLED" visible="true" />
        </ParamChoice>
        <ParamChoice id="TRIG_IN_TYPE_$idx" name="Trigger input type" group="Descriptor" default="CY_DMAC_1ELEMENT" visible="`${pDescrSelEqIdx_$idx}`" editable="true" desc="Trigger input type will set up the character of each trigger.">
          <Entry name="One transfer per trigger" value="CY_DMAC_1ELEMENT" visible="true" />
          <Entry name="One X loop transfer per trigger" value="CY_DMAC_X_LOOP" visible="true" />
          <Entry name="An entire descriptor transfer per trigger" value="CY_DMAC_DESCR" visible="true" />
          <Entry name="Entire descriptor chain per trigger" value="CY_DMAC_DESCR_CHAIN" visible="true" />
        </ParamChoice>
        <ParamChoice id="TRIG_DEACT_$idx" name="Trigger deactivation and retriggering" group="Descriptor" default="CY_DMAC_RETRIG_IM" visible="`${pDescrSelEqIdx_$idx}`" editable="true" desc="This parameter sets up the trigger deactivation options for the descriptor.">
          <Entry name="Retrigger immediately (pulse trigger)" value="CY_DMAC_RETRIG_IM" visible="true" />
          <Entry name="Retrigger after 4 Slow Clock cycles" value="CY_DMAC_RETRIG_4CYC" visible="true" />
          <Entry name="Retrigger after 16 Slow Clock cycles" value="CY_DMAC_RETRIG_16CYC" visible="true" />
          <Entry name="Wait for trigger reactivation" value="CY_DMAC_WAIT_FOR_REACT" visible="true" />
        </ParamChoice>
        
        <ParamBool id="DATA_PREFETCH_$idx" name="Data prefetch" group="Descriptor" default="false" visible="`${pDescrSelEqIdx_$idx}`" editable="true" desc="Source data transfers are initiated as soon as the channel is enabled, the current descriptor pointer is NOT &quot;0&quot; and there is space available in the channel's data FIFO." />
        
        <ParamChoice id="DATA_TRANSFER_WIDTH_$idx" name="Data transfer width" group="Descriptor" default="WordToWord" visible="`${pDescrSelEqIdx_$idx}`" editable="true" desc="This sets up the source and destination transfer size parameters.">
          <Entry name="Byte to Byte"                    value="ByteToByte" visible="true" />
          <Entry name="Halfword to Halfword"            value="HalfwordToHalfword" visible="true" />
          <Entry name="Word to Byte"                    value="WordToByte" visible="true" />
          <Entry name="Word to Halfword"                value="WordToHalfword" visible="true" />
          <Entry name="Byte to Word"                    value="ByteToWord" visible="true" />
          <Entry name="Halfword to Word"                value="HalfwordToWord" visible="true" />
          <Entry name="Word to Word (full 32 bit)"      value="WordToWord" visible="true" />
          <Entry name="Word to Word (16 bit masked)"    value="WordToWord16" visible="true" />
          <Entry name="Word to Word (8 bit masked)"     value="WordToWord8" visible="true" />
        </ParamChoice>

        <!--Descriptor X loop settings-->
        <ParamRange id="X_NUM_OF_ELEMENTS_$idx" name="Number of data elements to transfer" group="Descriptor X loop settings" default="1" min="1" max="65536" resolution="1" visible="`${pDescrSelEqIdx_$idx}`" editable="true" desc="This parameter configures how many transfers are effected in the X loops. If this number equals 1 – the descriptor is determined as &quot;single transfer&quot;, otherwise as &quot;1D&quot; or &quot;2D&quot; – dependent on &quot;Number of X-loops to execute&quot; parameter." />

        <ParamRange id="X_SRC_INCREMENT_$idx" name="Source increment every cycle by" group="Descriptor X loop settings" default="1" min="-32768" max="32767" resolution="1" visible="`${pDescrSelEqIdx_$idx}`" editable="true" desc="This integer determines the source address increment after each data transfer. When this value is set to zero, it is equivalent to disabling the source increment feature." /> 

        <ParamRange id="X_DST_INCREMENT_$idx" name="Destination increment every cycle by" group="Descriptor X loop settings" default="1" min="-32768" max="32767" resolution="1" visible="`${pDescrSelEqIdx_$idx}`" editable="true" desc="This integer determines the destination address increment after each transfer. When this value is set to zero, it is equivalent to disabling the destination increment feature." />
        
        <ParamBool id="SCATTER_$idx" name="Scatter transfer" group="Descriptor X loop settings" default="false" visible="`${(pDescrSelEqIdx_$idx) &amp;&amp; (version &gt; 1)}`" editable="true" desc="Specifies the 1D descriptor as a scatter transfer descriptor" />

        <!--Descriptor Y loop settings-->
        <ParamRange id="Y_NUM_OF_ELEMENTS_$idx" name="Number of X-loops to execute" group="Descriptor Y loop settings" default="1" min="1" max="65536" resolution="1" visible="`${pDescrSelEqIdx_$idx}`" editable="true" desc="This parameter configures how many X-loops are executed in each Y loop. If this number equals 1 – the descriptor is determined as &quot;1D&quot;, otherwise - &quot;2D&quot;." />

        <ParamRange id="Y_SRC_INCREMENT_$idx" name="Source increment every cycle by" group="Descriptor Y loop settings" default="1" min="-32768" max="32767" resolution="1" visible="`${pDescrSelEqIdx_$idx}`" editable="true" desc="This integer determines the source address increment after each X loop execution. When this value is set to zero, it is equivalent to disabling the source increment feature in Y loop." />

        <ParamRange id="Y_DST_INCREMENT_$idx" name="Destination increment every cycle by" group="Descriptor Y loop settings" default="1" min="-32768" max="32767" resolution="1" visible="`${pDescrSelEqIdx_$idx}`" editable="true" desc="This integer determines the destination address increment after each transfer. When this value is set to zero, it is equivalent to disabling the destination increment feature in Y loop." />

    </Repeat>


    <!--Config-->
    <ParamBool id="inFlash" name="Store Config in Flash" group="Advanced" default="true" visible="true" editable="true" desc="Controls whether the configuration structure is stored in flash (const, true) or SRAM (not const, false)." />
    
    <ParamString id="HWbase" name="base address" group="Internal" default="`${&quot;DMAC&quot;}`" visible="false" editable="false" desc="" />
  </Parameters>
  
  <DRCs>  
  </DRCs>
  
  <ConfigFirmware>
    <ConfigInclude value="cy_dmac.h" include="true" />
    <ConfigInclude value="cyhal_hwmgr.h" include="true" guard="defined (CY_USING_HAL)" />

    <ConfigDefine name="`${INST_NAME . &quot;_HW&quot;}`" value="`${HWbase}`" public="true" include="true" />
    <ConfigDefine name="`${INST_NAME . &quot;_CHANNEL&quot;}`" value="`${channel}`U" public="true" include="true" />
    
    <ConfigStruct name="`${INST_NAME . &quot;_&quot; . DESCR_NAME_$idx . &quot;_config&quot;}`" type="cy_stc_dmac_descriptor_config_t" const="`${inFlash}`" public="true" include="`${NUM_OF_DESCRIPTORS > $idx}`" repeatCount="8">
      <Member name="retrigger" value="`${TRIG_DEACT_$idx}`" />
      <Member name="interruptType" value="`${INTR_OUT_$idx}`" />
      <Member name="triggerOutType" value="`${TRIG_OUT_TYPE_$idx}`" />
      <Member name="channelState" value="`${CHAN_STATE_COMPL_$idx}`" />
      <Member name="triggerInType" value="`${TRIG_IN_TYPE_$idx}`" />
      <Member name="dataPrefetch" value="`${DATA_PREFETCH_$idx}`" />
      <Member name="dataSize" value="`${(DATA_TRANSFER_WIDTH_$idx eq WordToWord) ? &quot;CY_DMAC_WORD&quot; :
                                       ((DATA_TRANSFER_WIDTH_$idx eq ByteToByte) || 
                                        (DATA_TRANSFER_WIDTH_$idx eq WordToByte) || 
                                        (DATA_TRANSFER_WIDTH_$idx eq ByteToWord) || 
                                        (DATA_TRANSFER_WIDTH_$idx eq WordToWord8)) ? &quot;CY_DMAC_BYTE&quot; : &quot;CY_DMAC_HALFWORD&quot;}`" />
                                   
      <Member name="srcTransferSize" value="`${((DATA_TRANSFER_WIDTH_$idx eq WordToByte) ||
                                                (DATA_TRANSFER_WIDTH_$idx eq WordToHalfword) ||
                                                (DATA_TRANSFER_WIDTH_$idx eq WordToWord16) ||
                                                (DATA_TRANSFER_WIDTH_$idx eq WordToWord8) ||
                                                (DATA_TRANSFER_WIDTH_$idx eq WordToWord)) ? 
                                                &quot;CY_DMAC_TRANSFER_SIZE_WORD&quot; : &quot;CY_DMAC_TRANSFER_SIZE_DATA&quot;}`" />

      <Member name="dstTransferSize" value="`${((DATA_TRANSFER_WIDTH_$idx eq ByteToWord) ||
                                                (DATA_TRANSFER_WIDTH_$idx eq HalfwordToWord) ||
                                                (DATA_TRANSFER_WIDTH_$idx eq WordToWord16) ||
                                                (DATA_TRANSFER_WIDTH_$idx eq WordToWord8) ||
                                                (DATA_TRANSFER_WIDTH_$idx eq WordToWord)) ? 
                                                &quot;CY_DMAC_TRANSFER_SIZE_WORD&quot; : &quot;CY_DMAC_TRANSFER_SIZE_DATA&quot;}`" />

      <Member name="descriptorType" value="`${(SCATTER_$idx eq true) ? &quot;CY_DMAC_SCATTER_TRANSFER&quot; :
                                              (X_NUM_OF_ELEMENTS_$idx eq 1) ? &quot;CY_DMAC_SINGLE_TRANSFER&quot; : 
                                              (Y_NUM_OF_ELEMENTS_$idx ne 1) ? &quot;CY_DMAC_2D_TRANSFER&quot; : 
       ((X_SRC_INCREMENT_$idx eq 1) &amp;&amp; (X_DST_INCREMENT_$idx eq 1)) ? &quot;CY_DMAC_MEMORY_COPY&quot; :
                                                                              &quot;CY_DMAC_1D_TRANSFER&quot;}`" />

      <Member name="srcAddress" value="NULL" />
      <Member name="dstAddress" value="NULL" />
      <Member name="srcXincrement" value="`${X_SRC_INCREMENT_$idx}`" />
      <Member name="dstXincrement" value="`${X_DST_INCREMENT_$idx}`" />
      <Member name="xCount" value="`${X_NUM_OF_ELEMENTS_$idx}`" />
      <Member name="srcYincrement" value="`${Y_SRC_INCREMENT_$idx}`" />
      <Member name="dstYincrement" value="`${Y_DST_INCREMENT_$idx}`" />
      <Member name="yCount" value="`${Y_NUM_OF_ELEMENTS_$idx}`" />
      <Member name="nextDescriptor" value="`${ENABLE_CHAINING_$idx ? &quot;&amp;&quot; . INST_NAME . &quot;_&quot; . getParamValue(&quot;DESCR_NAME_&quot; . CHAIN_TO_$idx) : &quot;NULL&quot;}`" />
    </ConfigStruct>
    
    <ConfigStruct name="`${INST_NAME . &quot;_&quot; . DESCR_NAME_$idx}`" type="cy_stc_dmac_descriptor_t" const="false" public="true" include="`${NUM_OF_DESCRIPTORS &gt; $idx}`" repeatCount="256">
      <Member name="ctl" value="0UL" />
      <Member name="src" value="0UL" />
      <Member name="dst" value="0UL" />
      <Member name="xSize" value="0UL" />
      <Member name="xIncr" value="0UL" />
      <Member name="ySize" value="0UL" />
      <Member name="yIncr" value="0UL" />
      <Member name="nextPtr" value="0UL" />
    </ConfigStruct>

    <ConfigStruct name="`${INST_NAME . &quot;_channelConfig&quot;}`" type="cy_stc_dmac_channel_config_t" const="`${inFlash}`" public="true" include="true">
      <Member name="descriptor" value="&amp;`${INST_NAME}`_`${DESCR_NAME_0}`" />
      <Member name="priority" value="`${CHANNEL_PRIORITY}`" />
      <Member name="enable" value="false" />
      <Member name="bufferable" value="`${BUFFERABLE}`" />
    </ConfigStruct>
    
    <ConfigStruct name="`${INST_NAME}`_obj" type="cyhal_resource_inst_t" const="true" public="true" include="true" guard="defined (CY_USING_HAL)">
      <Member name="type" value="CYHAL_RSC_DMA" />
      <Member name="block_num" value="2U" />
      <Member name="channel_num" value="`${INST_NAME}`_CHANNEL" />
    </ConfigStruct>
    
    <ConfigInstruction value="cyhal_hwmgr_reserve(&amp;`${INST_NAME}`_obj);" include="true" guard="defined (CY_USING_HAL)" />
  </ConfigFirmware>
</Personality>