Skip to content

Arrays are not always expanded resulting in invalid subtype declarations. #106

@rowsail

Description

@rowsail

Running svd2ada on (for example) https://github.com/espressif/svd/blob/main/svd/esp32s3.svd does not always handle arrays correctly.

Taking the excerpt:

<register>
          <name>INT_RAW</name>
          <description>Raw interrupt status</description>
          <addressOffset>0x70</addressOffset>
          <size>0x20</size>
          <fields>
            <field>
              <dim>4</dim>
              <dimIncrement>0x1</dimIncrement>
              <dimIndex>0-3</dimIndex>
              <name>CH%s_TX_END</name>
              <description>The interrupt raw bit for CHANNEL%s. Triggered when transmission done.</description>
              <bitOffset>0</bitOffset>
              <bitWidth>1</bitWidth>
              <access>read-write</access>
            </field>
            <field>
              <dim>4</dim>
              <dimIncrement>0x1</dimIncrement>
              <dimIndex>0-3</dimIndex>
              <name>CH%s_TX_ERR</name>
              <description>The interrupt raw bit for CHANNEL%s. Triggered when error occurs.</description>
              <bitOffset>4</bitOffset>
              <bitWidth>1</bitWidth>
              <access>read-write</access>
            </field>

Will create:

subtype INT_RAW_CH%s_TX_END_Field is ESP32-S3.Bit;
  subtype INT_RAW_CH%s_TX_ERR_Field is ESP32-S3.Bit;
  subtype INT_RAW_CH%s_TX_THR_EVENT_Field is ESP32-S3.Bit;
  subtype INT_RAW_CH%s_TX_LOOP_Field is ESP32-S3.Bit;
  subtype INT_RAW_CH%s_RX_END_Field is ESP32-S3.Bit;
  subtype INT_RAW_CH%s_RX_ERR_Field is ESP32-S3.Bit;
  subtype INT_RAW_CH%s_RX_THR_EVENT_Field is ESP32-S3.Bit;
  subtype INT_RAW_TX_CH3_DMA_ACCESS_FAIL_Field is ESP32-S3.Bit;
  subtype INT_RAW_RX_CH7_DMA_ACCESS_FAIL_Field is ESP32-S3.Bit;

--  Raw interrupt status
  type INT_RAW_Register is record
     --  The interrupt raw bit for CHANNEL%s. Triggered when transmission
     --  done.
     CH%s_TX_END            : INT_RAW_CH%s_TX_END_Field := 16#0#;
     --  unspecified
     Reserved_1_3           : ESP32-S3.UInt3 := 16#0#;
     --  The interrupt raw bit for CHANNEL%s. Triggered when error occurs.
     CH%s_TX_ERR            : INT_RAW_CH%s_TX_ERR_Field := 16#0#;
     --  unspecified
     Reserved_5_7           : ESP32-S3.UInt3 := 16#0#;
     --  The interrupt raw bit for CHANNEL%s. Triggered when transmitter sent
     --  more data than configured value.
     CH%s_TX_THR_EVENT      : INT_RAW_CH%s_TX_THR_EVENT_Field := 16#0#;
     --  unspecified

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions