[][src]Crate svd_expander

Expands arrays and resolves inheritance chains in CMSIS-SVD specifications.

Example usage:

use svd_expander::DeviceSpec;

fn main() {
  let xml = r##"
  <device>
    <name>CORTEX_DEVICE</name>
    <peripherals>

      <peripheral>
        <name>GPIOA</name>
        <baseAddress>0x40010000</baseAddress>
        <registers>
          <register>
            <name>IDR</name>
            <description>Input Data Register</description>
            <addressOffset>0x00</addressOffset>
            <fields>

              <!--
                This field is a template that will be expanded
                out to 16 input fields named D1 through D16.
              -->

              <field>
                <name>D%s</name>
                <bitWidth>1</bitWidth>
                <bitOffset>0</bitOffset>
                <dim>16</dim>
                <dimIndex>1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16</dimIndex>
                <dimIncrement>1</dimIncrement>
              </field>

            </fields>
          </register>
        </registers>
      </peripheral>

      <!--
        GPIOA will be copied to make GPIOB below, which is identical
        except for any overridden properties (just name and
        baseAddress in this case).
      -->

      <peripheral derivedFrom="GPIOA">
        <name>GPIOB</name>
        <baseAddress>0x40010100</baseAddress>
      </peripheral>

    </peripherals>
  </device>
  "##;

  let device = DeviceSpec::from_xml(xml).unwrap();

  // The IDR register on GPIOA has been expanded to 16 fields.
  assert_eq!(16, device.get_register("GPIOA.IDR").unwrap().fields.len());

  // Those fields each had their bit offset (location in the register)
  // incremented appropriately.
  assert_eq!(0, device.get_field("GPIOA.IDR.D1").unwrap().offset);
  assert_eq!(1, device.get_field("GPIOA.IDR.D2").unwrap().offset);
  // ...etc...
  assert_eq!(9, device.get_field("GPIOA.IDR.D10").unwrap().offset);
  // ...etc...

  // GPIOB also has an IDR register with 16 fields, which was inherited
  // from GPIOA.
  assert_eq!(16, device.get_register("GPIOB.IDR").unwrap().fields.len());

  // GPIOB kept its name and base address when it inherited properties
  // from GPIOA.
  assert_eq!("GPIOB", device.get_peripheral("GPIOB").unwrap().name);
  assert_eq!(
    0x40010100,
    device.get_peripheral("GPIOB").unwrap().base_address
  );
}

This crate is intended for use in code generators. It is under active development and bug reports and feature requests are welcome.

Structs

AddressBlockSpec

Describes an address range uniquely mapped to a peripheral.

ClusterSpec

Describes a cluster of registers that exist on a peripheral. Clusters may be top-level constructs of a peripheral or may be nested within other clusters.

CpuSpec

Describes the processor included in the microcontroller device.

DeviceSpec

Represents information about a device specified in a CMSIS-SVD file.

EnumeratedValueSetSpec

A set of values that can be written to and/or read from a field.

EnumeratedValueSpec

A value that can be written to or read from a field (or both).

FieldSpec

Describes a field on a register.

InterruptSpec

Describes an interrupt that exists on a peripheral.

PeripheralSpec

Describes a peripheral on a device.

RegisterSpec

Describes a register. Registers may be top-level constructs of a peripheral or may be nested within register clusters.

SvdExpanderError

Error struct for all errors thrown by this crate or the crates on which it depends.

WriteConstraintRangeSpec

A range of values that can be written to a field. Writable values are integers that fall within the min and max bounds (inclusive).

Enums

AccessSpec

Defines access rights for fields on the device, though it may be specified at a higher level than individual fields.

EndianSpec

Defines the endianness of a CPU.

EnumeratedValueUsageSpec

Defines whether an enumerated value may be read from a field, written to a field, or both.

EnumeratedValueValueSpec

The actual content that can be written to or read from a field as part of an enumerated value set.

ModifiedWriteValuesSpec

Describes the manipulation of data written to a field. If not specified, the values written to the field is the value stored in the field.

WriteConstraintSpec

Defines constraints for writing values to a field.

Type Definitions

SvdExpanderResult

Convenience type for a result that may contain an SvdExpanderError.