| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| |
| Copyright (c) 2013-2016 ARM Limited. All rights reserved. |
| |
| 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 |
| |
| 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. |
| |
| $Date: 04. September 2018 |
| $Revision: 1.3.5 |
| |
| Version 1.3.5: |
| - add CM35P as enumeration value for cpuNameType. |
| |
| Version 1.3.4: |
| - add dspPresent element to cpuType as SIMD instructions became optional for new processors. |
| |
| Version 1.3.3: |
| - update file header to Apache 2.0 License |
| - add dimableIdentifierType, as a copy of previous identifierType adding "%s", |
| - update identifierType to only allow names without %s included. |
| - remove enumerationNameType. |
| - add headerEnumName to enumerationType and to dimArrayIndexType for peripheral arrays |
| overwriting hierarchically generated names |
| - add dimName to dimElementGroup. Only valid in <cluster> context, ignored otherwise. |
| |
| Version 1.3.2: |
| adding dimIndexArray to peripheral-, cluster- and register-array to describe |
| enumeration of array indices. |
| |
| Version 1.3.1: |
| fixed peripheral name element type to identifierType to support %s for peripheral arrays |
| added optional protection element to addressBlockType and added p=privileged |
| |
| Version 1.3: |
| added dim to peripherals to describe an array of peripherals. |
| added nesting of clusters to support hierarchical register structures. |
| added protection element as part of the registerPropertiesGroup indicating |
| special permissions are required for accessing a register. |
| CPU Section extended with description of the Secure Attribution Unit. |
| |
| Version 1.2: |
| Cortex-M7 support items have been added as optional tags for the device header file generation: |
| fpuDP, icachePresent, dcachePresent, itcmPresent, dtcmPresent |
| |
| Version 1.1: |
| For backward compatibility all additional tags have been made optional. |
| Extensions may be mandatory for successful device header file generation |
| Other changes are related to some restructuring of the schema. |
| |
| Note that the memory section has been removed since this would limit the |
| reuse of descriptions for a series of devices. |
| --> |
| |
| <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified" version="1.3"> |
| <!-- stringType requires a none empty string of a least one character length --> |
| <xs:simpleType name="stringType"> |
| <xs:restriction base="xs:string"> |
| <xs:minLength value="1"/> |
| </xs:restriction> |
| </xs:simpleType> |
| |
| <xs:simpleType name="descriptionStringType"> |
| <xs:restriction base="xs:string"> |
| <xs:pattern value="[\p{IsBasicLatin}\p{IsLatin-1Supplement}]*" /> |
| </xs:restriction> |
| </xs:simpleType> |
| |
| <!-- cpuType specifies a selection of Cortex-M and Secure-Cores. This list will get extended as new processors are released --> |
| <xs:simpleType name="cpuNameType"> |
| <xs:restriction base="xs:token"> |
| <xs:enumeration value="CM0"/> |
| <xs:enumeration value="CM0PLUS"/> |
| <xs:enumeration value="CM0+"/> |
| <xs:enumeration value="CM1"/> |
| <xs:enumeration value="SC000"/> |
| <xs:enumeration value="CM23"/> |
| <xs:enumeration value="CM3"/> |
| <xs:enumeration value="CM33"/> |
| <xs:enumeration value="CM35P"/> |
| <xs:enumeration value="SC300"/> |
| <xs:enumeration value="CM4"/> |
| <xs:enumeration value="CM7"/> |
| <xs:enumeration value="ARMV8MML"/> |
| <xs:enumeration value="ARMV8MBL"/> |
| <xs:enumeration value="CA5"/> |
| <xs:enumeration value="CA7"/> |
| <xs:enumeration value="CA8"/> |
| <xs:enumeration value="CA9"/> |
| <xs:enumeration value="CA15"/> |
| <xs:enumeration value="CA17"/> |
| <xs:enumeration value="CA53"/> |
| <xs:enumeration value="CA57"/> |
| <xs:enumeration value="CA72"/> |
| <xs:enumeration value="other"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <!-- revisionType specifies the CPU revision format as defined by ARM (rNpM) --> |
| <xs:simpleType name="revisionType"> |
| <xs:restriction base="xs:string"> |
| <xs:pattern value="r[0-9]*p[0-9]*"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <!-- EndianType pre-defines the tokens for specifying the endianess of the device --> |
| <xs:simpleType name="endianType"> |
| <xs:restriction base="xs:token"> |
| <xs:enumeration value="little"/> |
| <xs:enumeration value="big"/> |
| <xs:enumeration value="selectable"/> |
| <xs:enumeration value="other"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <!-- dataType pre-defines the tokens in line with CMSIS data type definitions --> |
| <xs:simpleType name="dataTypeType"> |
| <xs:restriction base="xs:token"> |
| <xs:enumeration value="uint8_t"/> |
| <xs:enumeration value="uint16_t"/> |
| <xs:enumeration value="uint32_t"/> |
| <xs:enumeration value="uint64_t"/> |
| <xs:enumeration value="int8_t"/> |
| <xs:enumeration value="int16_t"/> |
| <xs:enumeration value="int32_t"/> |
| <xs:enumeration value="int64_t"/> |
| <xs:enumeration value="uint8_t *"/> |
| <xs:enumeration value="uint16_t *"/> |
| <xs:enumeration value="uint32_t *"/> |
| <xs:enumeration value="uint64_t *"/> |
| <xs:enumeration value="int8_t *"/> |
| <xs:enumeration value="int16_t *"/> |
| <xs:enumeration value="int32_t *"/> |
| <xs:enumeration value="int64_t *"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <!-- nvicPrioBitsType specifies the integer value range for the number of bits used in NVIC to encode priority levels --> |
| <xs:simpleType name="nvicPrioBitsType"> |
| <xs:restriction base="xs:integer"> |
| <xs:minInclusive value="2"/> |
| <xs:maxInclusive value="8"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <!-- dimableIdentifierType specifies the subset and sequence of characters used for specifying identifiers that may contain %s from dim. --> |
| <!-- this is particularly important as these are used in ANSI C Structures during the device header file generation --> |
| <xs:simpleType name="dimableIdentifierType"> |
| <xs:restriction base="xs:string"> |
| <xs:pattern value="((%s)|(%s)[_A-Za-z]{1}[_A-Za-z0-9]*)|([_A-Za-z]{1}[_A-Za-z0-9]*(\[%s\])?)|([_A-Za-z]{1}[_A-Za-z0-9]*(%s)?[_A-Za-z0-9]*)"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <!-- identifierType specifies the subset and sequence of characters used for specifying identifiers that must not contain %s from dim. --> |
| <!-- this is particularly important as these are used in ANSI C Structures during the device header file generation --> |
| <xs:simpleType name="identifierType"> |
| <xs:restriction base="xs:string"> |
| <xs:pattern value="[_A-Za-z0-9]*"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <!-- V1.3: Protection Access Attribute Strings --> |
| <xs:simpleType name="protectionStringType"> |
| <xs:restriction base="xs:string"> |
| <!-- s = Secure --> |
| <!-- n = Non-secure --> |
| <!-- p = Privileged --> |
| <xs:pattern value="[snp]"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <!-- V1.3: SAU Access Type --> |
| <xs:simpleType name="sauAccessType"> |
| <xs:restriction base="xs:string"> |
| <!-- c = non-secure Callable / Secure --> |
| <!-- n = Non-secure --> |
| <xs:pattern value="[cn]"/> |
| </xs:restriction> |
| </xs:simpleType> |
| |
| <!-- dimIndexType specifies the subset and sequence of characters used for specifying the sequence of indices in register arrays --> |
| <xs:simpleType name="dimIndexType"> |
| <xs:restriction base="xs:string"> |
| <xs:pattern value="[0-9]+\-[0-9]+|[A-Z]-[A-Z]|[_0-9a-zA-Z]+(,\s*[_0-9a-zA-Z]+)+"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <!-- scaledNonNegativeInteger specifies the format in which numbers are represented in hexadecimal or decimal format --> |
| <xs:simpleType name="scaledNonNegativeInteger"> |
| <xs:restriction base="xs:string"> |
| <xs:pattern value="[+]?(0x|0X|#)?[0-9a-fA-F]+[kmgtKMGT]?"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <!-- enumeratedValueDataType specifies the number formats for the values in enumeratedValues --> |
| <xs:simpleType name="enumeratedValueDataType"> |
| <xs:restriction base="xs:string"> |
| <xs:pattern value="[+]?(((0x|0X)[0-9a-fA-F]+)|([0-9]+)|((#|0b)[01xX]+))"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <!-- accessType specfies the pre-defined tokens for the available accesses --> |
| <xs:simpleType name="accessType"> |
| <xs:restriction base="xs:token"> |
| <xs:enumeration value="read-only"/> |
| <xs:enumeration value="write-only"/> |
| <xs:enumeration value="read-write"/> |
| <xs:enumeration value="writeOnce"/> |
| <xs:enumeration value="read-writeOnce"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <!-- modifiedWriteValuesType specifies the pre-defined tokens for the write side effects --> |
| <xs:simpleType name="modifiedWriteValuesType"> |
| <xs:restriction base="xs:token"> |
| <xs:enumeration value="oneToClear"/> |
| <xs:enumeration value="oneToSet"/> |
| <xs:enumeration value="oneToToggle"/> |
| <xs:enumeration value="zeroToClear"/> |
| <xs:enumeration value="zeroToSet"/> |
| <xs:enumeration value="zeroToToggle"/> |
| <xs:enumeration value="clear"/> |
| <xs:enumeration value="set"/> |
| <xs:enumeration value="modify"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <!-- readAction type specifies the pre-defined tokens for read side effects --> |
| <xs:simpleType name="readActionType"> |
| <xs:restriction base="xs:token"> |
| <xs:enumeration value="clear"/> |
| <xs:enumeration value="set"/> |
| <xs:enumeration value="modify"/> |
| <xs:enumeration value="modifyExternal"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <!-- enumUsageType specifies the pre-defined tokens for selecting what access types an enumeratedValues set is associated with --> |
| <xs:simpleType name="enumUsageType"> |
| <xs:restriction base="xs:token"> |
| <xs:enumeration value="read"/> |
| <xs:enumeration value="write"/> |
| <xs:enumeration value="read-write"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <!-- bitRangeType specifies the bit numbers to be restricted values from 0 - 69 --> |
| <xs:simpleType name="bitRangeType"> |
| <xs:restriction base="xs:token"> |
| <xs:pattern value="\[([0-4])?[0-9]:([0-4])?[0-9]\]"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <!-- writeContraintType specifies how to describe the restriction of the allowed values that can be written to a resource --> |
| <xs:complexType name="writeConstraintType"> |
| <xs:choice> |
| <xs:element name="writeAsRead" type="xs:boolean"/> |
| <xs:element name="useEnumeratedValues" type="xs:boolean"/> |
| <xs:element name="range"> |
| <xs:complexType> |
| <xs:sequence> |
| <xs:element name="minimum" type="scaledNonNegativeInteger"/> |
| <xs:element name="maximum" type="scaledNonNegativeInteger"/> |
| </xs:sequence> |
| </xs:complexType> |
| </xs:element> |
| </xs:choice> |
| </xs:complexType> |
| <!-- addressBlockType specifies the elements to describe an address block --> |
| <xs:complexType name="addressBlockType"> |
| <xs:sequence> |
| <xs:element name="offset" type="scaledNonNegativeInteger"/> |
| <xs:element name="size" type="scaledNonNegativeInteger"/> |
| <xs:element name="usage"> |
| <xs:simpleType> |
| <xs:restriction base="xs:token"> |
| <xs:enumeration value="registers"/> |
| <xs:enumeration value="buffer"/> |
| <xs:enumeration value="reserved"/> |
| </xs:restriction> |
| </xs:simpleType> |
| </xs:element> |
| <!-- Version 1.3.2: optional access protection for an address block s=secure n=non-secure p=privileged --> |
| <xs:element name="protection" type="protectionStringType" minOccurs="0"/> |
| </xs:sequence> |
| </xs:complexType> |
| <!-- interruptType specifies how to describe an interrupt associated with a peripheral --> |
| <xs:complexType name="interruptType"> |
| <xs:sequence> |
| <xs:element name="name" type="stringType"/> |
| <xs:element name="description" type="xs:string" minOccurs="0"/> |
| <xs:element name="value" type="xs:integer"/> |
| </xs:sequence> |
| </xs:complexType> |
| <!-- register properties group specifies register size, access permission and reset value |
| this is used in multiple locations. Settings are inherited downstream. --> |
| <xs:group name="registerPropertiesGroup"> |
| <xs:sequence> |
| <xs:element name="size" type="scaledNonNegativeInteger" minOccurs="0"/> |
| <xs:element name="access" type="accessType" minOccurs="0"/> |
| <!-- V 1.3: extended register access protection --> |
| <xs:element name="protection" type="protectionStringType" minOccurs="0"/> |
| <xs:element name="resetValue" type="scaledNonNegativeInteger" minOccurs="0"/> |
| <xs:element name="resetMask" type="scaledNonNegativeInteger" minOccurs="0"/> |
| </xs:sequence> |
| </xs:group> |
| <!-- bitRangeLsbMsbStyle specifies the bit position of a field within a register |
| by specifying the least significant and the most significant bit position --> |
| <xs:group name="bitRangeLsbMsbStyle"> |
| <xs:sequence> |
| <xs:element name="lsb" type="scaledNonNegativeInteger"/> |
| <xs:element name="msb" type="scaledNonNegativeInteger"/> |
| </xs:sequence> |
| </xs:group> |
| <!-- bitRangeOffsetWidthStyle specifies the bit position of a field within a register |
| by specifying the least significant bit position and the bitWidth of the field --> |
| <xs:group name="bitRangeOffsetWidthStyle"> |
| <xs:sequence> |
| <xs:element name="bitOffset" type="scaledNonNegativeInteger"/> |
| <xs:element name="bitWidth" type="scaledNonNegativeInteger" minOccurs="0"/> |
| </xs:sequence> |
| </xs:group> |
| |
| <!-- dimElementGroup specifies the number of array elements (dim), the address offset |
| between to consecutive array elements and an a comma seperated list of strings |
| being used for identifying each element in the array --> |
| <xs:group name="dimElementGroup"> |
| <xs:sequence> |
| <xs:element name="dim" type="scaledNonNegativeInteger"/> |
| <xs:element name="dimIncrement" type="scaledNonNegativeInteger"/> |
| <xs:element name="dimIndex" type="dimIndexType" minOccurs="0"/> |
| <xs:element name="dimName" type="identifierType" minOccurs="0"/> |
| <xs:element name="dimArrayIndex" type="dimArrayIndexType" minOccurs="0"/> |
| </xs:sequence> |
| </xs:group> |
| |
| <xs:complexType name="cpuType"> |
| <xs:sequence> |
| <!-- V1.1: ARM processor name: Cortex-Mx / SCxxx --> |
| <xs:element name="name" type="cpuNameType"/> |
| <!-- V1.1: ARM defined revision of the cpu --> |
| <xs:element name="revision" type="revisionType"/> |
| <!-- V1.1: Endian specifies the endianess of the processor/device --> |
| <xs:element name="endian" type="endianType"/> |
| <!-- V1.1: mpuPresent specifies whether or not a memory protection unit is physically present --> |
| <xs:element name="mpuPresent" type="xs:boolean" minOccurs="0"/> |
| <!-- V1.1: fpuPresent specifies whether or not a floating point hardware unit is physically present --> |
| <xs:element name="fpuPresent" type="xs:boolean" minOccurs="0"/> |
| <!-- V1.2: fpuDP specifies a double precision floating point hardware unit is physically present--> |
| <xs:element name="fpuDP" type="xs:boolean" minOccurs="0"/> |
| <!-- V1.3: dspPresent specifies whether the optional SIMD instructions are supported by processor --> |
| <xs:element name="dspPresent" type="xs:boolean" minOccurs="0"/> |
| <!-- V1.2: icachePresent specifies that an instruction cache is physically present--> |
| <xs:element name="icachePresent" type="xs:boolean" minOccurs="0"/> |
| <!-- V1.2: dcachePresent specifies that a data cache is physically present--> |
| <xs:element name="dcachePresent" type="xs:boolean" minOccurs="0"/> |
| <!-- V1.2: itcmPresent specifies that an instruction tightly coupled memory is physically present--> |
| <xs:element name="itcmPresent" type="xs:boolean" minOccurs="0"/> |
| <!-- V1.2: dtcmPresent specifies that an data tightly coupled memory is physically present--> |
| <xs:element name="dtcmPresent" type="xs:boolean" minOccurs="0"/> |
| <!-- V1.1: vtorPresent is used for Cortex-M0+ based devices only. It indicates whether the Vector --> |
| <!-- Table Offset Register is implemented in the device or not --> |
| <xs:element name="vtorPresent" type="xs:boolean" minOccurs="0"/> |
| <!-- V1.1: nvicPrioBits specifies the number of bits used by the Nested Vectored Interrupt Controller --> |
| <!-- for defining the priority level = # priority levels --> |
| <xs:element name="nvicPrioBits" type="scaledNonNegativeInteger"/> |
| <!-- V1.1: vendorSystickConfig is set true if a custom system timer is implemented in the device --> |
| <!-- instead of the ARM specified SysTickTimer --> |
| <xs:element name="vendorSystickConfig" type="xs:boolean"/> |
| <!-- V1.3: reports the total number of interrupts implemented by the device (optional) --> |
| <xs:element name="deviceNumInterrupts" type="scaledNonNegativeInteger" minOccurs="0"/> |
| <!-- V1.3: sauRegions specifies the available number of address regions --> |
| <!-- if not specified a value of zero is assumed --> |
| <xs:element name="sauNumRegions" type="scaledNonNegativeInteger" minOccurs="0"/> |
| <!-- V1.3: SAU Regions Configuration (if fully or partially predefined) --> |
| <xs:element name="sauRegionsConfig" minOccurs="0"> |
| <xs:complexType> |
| <xs:sequence> |
| <xs:element name="region" minOccurs="0" maxOccurs="unbounded"> |
| <!-- addressBlockType specifies the elements to describe an address block --> |
| <xs:complexType> |
| <xs:sequence minOccurs="1" maxOccurs="unbounded"> |
| <xs:element name="base" type="scaledNonNegativeInteger"/> |
| <xs:element name="limit" type="scaledNonNegativeInteger"/> |
| <xs:element name="access" type="sauAccessType"/> |
| </xs:sequence> |
| <xs:attribute name="enabled" type="xs:boolean" use="optional" default="true"/> |
| <xs:attribute name="name" type="xs:string" use="optional"/> |
| </xs:complexType> |
| </xs:element> |
| </xs:sequence> |
| <xs:attribute name="enabled" type="xs:boolean" use="optional" default="true"/> |
| <xs:attribute name="protectionWhenDisabled" type="protectionStringType" use="optional" default="s"/> |
| </xs:complexType> |
| </xs:element> |
| </xs:sequence> |
| </xs:complexType> |
| |
| <xs:complexType name="enumeratedValueType"> |
| <xs:sequence> |
| <!-- name is a ANSI C indentifier representing the value (C Enumeration) --> |
| <xs:element name="name" type="identifierType"/> |
| <!-- description contains the details about the semantics/behavior specified by this value --> |
| <xs:element name="description" type="stringType" minOccurs="0"/> |
| <xs:choice> |
| <xs:element name="value" type="enumeratedValueDataType"/> |
| <!-- isDefault specifies the name and description for all values that are not |
| specifically described individually --> |
| <xs:element name="isDefault" type="xs:boolean"/> |
| </xs:choice> |
| </xs:sequence> |
| </xs:complexType> |
| |
| <xs:complexType name="enumerationType"> |
| <xs:sequence> |
| <!-- name specfies a reference to this enumeratedValues section for reuse purposes |
| this name does not appear in the System Viewer nor the Header File. --> |
| <xs:element name="name" type="identifierType" minOccurs="0"/> |
| <!-- overrides the hierarchical enumeration type in the device header file. User is responsible for uniqueness across description --> |
| <xs:element name="headerEnumName" type="identifierType" minOccurs="0"/> |
| <!-- usage specifies whether this enumeration is to be used for read or write or |
| (read and write) accesses --> |
| <xs:element name="usage" type="enumUsageType" minOccurs="0"/> |
| <!-- enumeratedValue derivedFrom=<identifierType> --> |
| <xs:element name="enumeratedValue" type="enumeratedValueType" minOccurs="1" maxOccurs="unbounded"/> |
| </xs:sequence> |
| <xs:attribute name="derivedFrom" type="identifierType" use="optional"/> |
| </xs:complexType> |
| |
| <xs:complexType name="dimArrayIndexType"> |
| <xs:sequence> |
| <xs:element name="headerEnumName" type="identifierType" minOccurs="0"/> |
| <xs:element name="enumeratedValue" type="enumeratedValueType" minOccurs="1" maxOccurs="unbounded"/> |
| </xs:sequence> |
| </xs:complexType> |
| |
| <xs:complexType name="fieldType"> |
| <xs:sequence> |
| <xs:group ref="dimElementGroup" minOccurs="0"/> |
| <!-- name specifies a field's name. The System Viewer and the device header file will |
| use the name of the field as identifier --> |
| <xs:element name="name" type="dimableIdentifierType"/> |
| <!-- description contains reference manual level information about the function and |
| options of a field --> |
| <xs:element name="description" type="stringType" minOccurs="0"/> |
| <!-- alternative specifications of the bit position of the field within the register --> |
| <xs:choice minOccurs="1" maxOccurs="1"> |
| <!-- bit field described by lsb followed by msb tag --> |
| <xs:group ref="bitRangeLsbMsbStyle"/> |
| <!-- bit field described by bit offset relative to Bit0 + bit width of field --> |
| <xs:group ref="bitRangeOffsetWidthStyle"/> |
| <!-- bit field described by [<msb>:<lsb>] --> |
| <xs:element name="bitRange" type="bitRangeType"/> |
| </xs:choice> |
| <!-- access describes the predefined permissions for the field. --> |
| <xs:element name="access" type="accessType" minOccurs="0"/> |
| <!-- predefined description of write side effects --> |
| <xs:element name="modifiedWriteValues" type="modifiedWriteValuesType" minOccurs="0"/> |
| <!-- writeContstraint specifies the subrange of allowed values --> |
| <xs:element name="writeConstraint" type="writeConstraintType" minOccurs="0"/> |
| <!-- readAction specifies the read side effects. --> |
| <xs:element name="readAction" type="readActionType" minOccurs="0"/> |
| <!-- enumeratedValues derivedFrom=<identifierType> --> |
| <xs:element name="enumeratedValues" type="enumerationType" minOccurs="0" maxOccurs="2"> |
| </xs:element> |
| </xs:sequence> |
| <xs:attribute name="derivedFrom" type="dimableIdentifierType" use="optional"/> |
| </xs:complexType> |
| |
| <xs:complexType name="fieldsType"> |
| <xs:sequence> |
| <!-- field derivedFrom=<identifierType> --> |
| <xs:element name="field" type="fieldType" minOccurs="1" maxOccurs="unbounded"/> |
| </xs:sequence> |
| </xs:complexType> |
| |
| <xs:complexType name="registerType"> |
| <xs:sequence> |
| <xs:group ref="dimElementGroup" minOccurs="0"/> |
| <!-- name specifies the name of the register. The register name is used by System Viewer and |
| device header file generator to represent a register --> |
| <xs:element name="name" type="dimableIdentifierType"/> |
| <!-- display name specifies a register name without the restritions of an ANSIS C identifier. |
| The use of this tag is discouraged because it does not allow consistency between |
| the System View and the device header file. --> |
| <xs:element name="displayName" type="stringType" minOccurs="0"/> |
| <!-- description contains a reference manual level description about the register and it's purpose --> |
| <xs:element name="description" type="stringType" minOccurs="0"/> |
| <xs:choice> |
| <!-- alternateGroup specifies the identifier of the subgroup a register belongs to. |
| This is useful if a register has a different description per mode but a single name --> |
| <xs:element name="alternateGroup" type="identifierType" minOccurs="0"/> |
| <!-- V1.1: alternateRegister specifies an alternate register description for an address that is |
| already fully described. In this case the register name must be unique within the peripheral --> |
| <xs:element name="alternateRegister" type="dimableIdentifierType" minOccurs="0"/> |
| </xs:choice> |
| <!-- addressOffset describes the address of the register relative to the baseOffset of the peripheral --> |
| <xs:element name="addressOffset" type="scaledNonNegativeInteger"/> |
| <!-- registerPropertiesGroup elements specify the default values for register size, access permission and |
| reset value. These default values are inherited to all fields contained in this register --> |
| <xs:group ref="registerPropertiesGroup" minOccurs="0"/> |
| <!-- V1.1: dataType specifies a CMSIS compliant native dataType for a register (i.e. signed, unsigned, pointer) --> |
| <xs:element name="dataType" type="dataTypeType" minOccurs="0"/> |
| <!-- modifiedWriteValues specifies the write side effects --> |
| <xs:element name="modifiedWriteValues" type="modifiedWriteValuesType" minOccurs="0"/> |
| <!-- writeConstraint specifies the subset of allowed write values --> |
| <xs:element name="writeConstraint" type="writeConstraintType" minOccurs="0"/> |
| <!-- readAcction specifies the read side effects --> |
| <xs:element name="readAction" type="readActionType" minOccurs="0"/> |
| <!-- fields section contains all fields that belong to this register --> |
| <xs:element name="fields" type="fieldsType" minOccurs="0" maxOccurs="1"/> |
| </xs:sequence> |
| <xs:attribute name="derivedFrom" type="dimableIdentifierType" use="optional"/> |
| </xs:complexType> |
| |
| <!-- V1.1: A cluster is a set of registers that are composed into a C data structure in the device header file --> |
| <xs:complexType name="clusterType"> |
| <xs:sequence> |
| <xs:group ref="dimElementGroup" minOccurs="0"/> |
| <xs:element name="name" type="dimableIdentifierType"/> |
| <xs:element name="description" type="xs:string"/> |
| <!-- V1.1: alternateCluster specifies an alternative description for a cluster address range that is |
| already fully described. In this case the cluster name must be unique within the peripheral --> |
| <xs:element name="alternateCluster" type="dimableIdentifierType" minOccurs="0"/> |
| <!-- V1.1: headerStructName specifies the name for the cluster structure typedef |
| used in the device header generation instead of the cluster name --> |
| <xs:element name="headerStructName" type="identifierType" minOccurs="0"/> |
| <xs:element name="addressOffset" type="scaledNonNegativeInteger"/> |
| <!-- registerPropertiesGroup elements specify the default values for register size, access permission and |
| reset value. These default values are inherited to all registers contained in this peripheral --> |
| <xs:group ref="registerPropertiesGroup" minOccurs="0"/> |
| <xs:sequence> |
| <xs:choice minOccurs="1" maxOccurs="unbounded"> |
| <xs:element name="register" type="registerType" minOccurs="0" maxOccurs="unbounded"/> |
| <!-- 1.3: nesting of cluster is supported --> |
| <xs:element name="cluster" type="clusterType" minOccurs="0" maxOccurs="unbounded"/> |
| </xs:choice> |
| </xs:sequence> |
| </xs:sequence> |
| <xs:attribute name="derivedFrom" type="dimableIdentifierType" use="optional"/> |
| </xs:complexType> |
| |
| <!-- the registers section can have an arbitrary list of cluster and register sections --> |
| <xs:complexType name="registersType"> |
| <xs:choice minOccurs="1" maxOccurs="unbounded"> |
| <xs:element name="cluster" type="clusterType"/> |
| <xs:element name="register" type="registerType"/> |
| </xs:choice> |
| </xs:complexType> |
| |
| <xs:complexType name="peripheralType"> |
| <xs:sequence> |
| <!-- 1.3: specify uni-dimensional array of peripheral - requires name="<name>[%s]" --> |
| <xs:group ref="dimElementGroup" minOccurs="0"/> |
| <!-- name specifies the name of a peripheral. This name is used for the System View and device header file --> |
| <xs:element name="name" type="dimableIdentifierType"/> |
| <!-- version specifies the version of the peripheral descriptions --> |
| <xs:element name="version" type="stringType" minOccurs="0"/> |
| <!-- description provides a high level functional description of the peripheral --> |
| <xs:element name="description" type="stringType" minOccurs="0"/> |
| <!-- V1.1: alternatePeripheral specifies an alternative description for an address range that is |
| already fully by a peripheral described. In this case the peripheral name must be unique within the device description --> |
| <xs:element name="alternatePeripheral" type="dimableIdentifierType" minOccurs="0"/> |
| <!-- groupName assigns this peripheral to a group of peripherals. This is only used bye the System View --> |
| <xs:element name="groupName" type="xs:Name" minOccurs="0"/> |
| <!-- prependToName specifies a prefix that is placed in front of each register name of this peripheral. |
| The device header file will show the registers in a C-Struct of the peripheral without the prefix. --> |
| <xs:element name="prependToName" type="identifierType" minOccurs="0"/> |
| <!-- appendToName is a postfix that is appended to each register name of this peripheral. The device header |
| file will sho the registers in a C-Struct of the peripheral without the postfix --> |
| <xs:element name="appendToName" type="identifierType" minOccurs="0"/> |
| <!-- V1.1: headerStructName specifies the name for the peripheral structure typedef |
| used in the device header generation instead of the peripheral name --> |
| <xs:element name="headerStructName" type="dimableIdentifierType" minOccurs="0"/> |
| <!-- disableCondition contains a logical expression based on constants and register or bit-field values |
| if the condition is evaluated to true, the peripheral display will be disabled --> |
| <xs:element name="disableCondition" type="stringType" minOccurs="0"/> |
| <!-- baseAddress specifies the absolute base address of a peripheral. For derived peripherals it is mandatory |
| to specify a baseAddress. --> |
| <xs:element name="baseAddress" type="scaledNonNegativeInteger"/> |
| <!-- registerPropertiesGroup elements specify the default values for register size, access permission and |
| reset value. These default values are inherited to all registers contained in this peripheral --> |
| <xs:group ref="registerPropertiesGroup" minOccurs="0"/> |
| <!-- addressBlock specifies one or more address ranges that are assigned exclusively to this peripheral. |
| derived peripherals may have no addressBlock, however none-derived peripherals are required to specify |
| at least one address block --> |
| <xs:element name="addressBlock" type="addressBlockType" minOccurs="0" maxOccurs="unbounded"/> |
| <!-- interrupt specifies can specify one or more interrtupts by name, description and value --> |
| <xs:element name="interrupt" type="interruptType" minOccurs="0" maxOccurs="unbounded"/> |
| <!-- registers section contains all registers owned by the peripheral. In case a peripheral gets derived it does |
| not have its own registers section, hence this section is optional. A unique peripheral without a |
| registers section is not allowed --> |
| <xs:element name="registers" type="registersType" minOccurs="0" maxOccurs="1"> |
| </xs:element> |
| </xs:sequence> |
| <xs:attribute name="derivedFrom" type="dimableIdentifierType" use="optional"/> |
| </xs:complexType> |
| |
| <!-- ==================================================== --> |
| <!-- The top level element of a description is the device --> |
| <!-- ==================================================== --> |
| <xs:element name="device" nillable="true"> |
| <xs:complexType> |
| <xs:sequence> |
| <!-- V1.1: Vendor Name --> |
| <xs:element name="vendor" type="stringType" minOccurs="0"/> |
| <!-- V1.1: Vendor ID - a short name for referring to the vendor (e.g. Texas Instruments = TI) --> |
| <xs:element name="vendorID" type="identifierType" minOccurs="0"/> |
| <!-- name specifies the device name being described --> |
| <xs:element name="name" type="identifierType"/> |
| <!-- V1.1: series specifies the device series or family name --> |
| <xs:element name="series" type="stringType" minOccurs="0"/> |
| <!-- version specifies the version of the device description --> |
| <xs:element name="version" type="stringType"/> |
| <!-- description is a string describing the device features (e.g. memory size, peripherals, etc.) --> |
| <xs:element name="description" type="stringType"/> |
| <!-- V1.1: licenseText specifies the file header section to be included in any derived file --> |
| <xs:element name="licenseText" type="stringType" minOccurs="0"/> |
| <!-- V1.1: cpu specifies the details of the processor included in the device --> |
| <xs:element name="cpu" type="cpuType" minOccurs="0"/> |
| <!-- V1.1: the tag specifies the filename without extension of the CMSIS System Device include file. |
| This tag is used by the header file generator for customizing the include statement referencing the |
| CMSIS system file within the CMSIS device header file. By default the filename is "system_<device.name>" |
| In cases a device series shares a single system header file, the name of the series shall be used |
| instead of the individual device name. --> |
| <xs:element name="headerSystemFilename" type="identifierType" minOccurs="0"/> |
| <!-- V1.1: headerDefinitionPrefix specifies the string being prepended to all names of types defined in |
| generated device header file --> |
| <xs:element name="headerDefinitionsPrefix" type="identifierType" minOccurs="0"/> |
| <!-- addressUnitBits specifies the size of the minimal addressable unit in bits --> |
| <xs:element name="addressUnitBits" type="scaledNonNegativeInteger"/> |
| <!-- width specifies the number of bits for the maximum single transfer size allowed by the bus interface. |
| This sets the maximum size of a single register that can be defined for an address space --> |
| <xs:element name="width" type="scaledNonNegativeInteger"/> |
| <!-- registerPropertiesGroup elements specify the default values for register size, access permission and |
| reset value --> |
| <xs:group ref="registerPropertiesGroup" minOccurs="0"/> |
| |
| <!-- peripherals is containing all peripherals --> |
| <xs:element name="peripherals"> |
| <xs:complexType> |
| <xs:sequence> |
| <xs:element name="peripheral" type="peripheralType" minOccurs="1" maxOccurs="unbounded"/> |
| </xs:sequence> |
| </xs:complexType> |
| </xs:element> |
| |
| <!-- Vendor Extensions: this section captures custom extensions. This section will be ignored by default --> |
| <xs:element name="vendorExtensions" minOccurs="0" maxOccurs="1"> |
| <xs:complexType> |
| <xs:sequence> |
| <xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"> |
| </xs:any> |
| </xs:sequence> |
| </xs:complexType> |
| </xs:element> |
| </xs:sequence> |
| <xs:attribute name="schemaVersion" type="xs:decimal" use="required"/> |
| </xs:complexType> |
| </xs:element> |
| </xs:schema> |
| |
| <!-- END OF FILE --> |