# User Interface ## Start Development wizard Upon starting Config Tools, you are automatically welcomed by a startup wizard. With this wizard, you can create a configuration or open an existing one. **Note:** To skip the wizard on subsequent startups, select the **Always open last configuration** checkbox below the **Open an existing configuration** option. You can also perform the same action by selecting the **Automatically open previously used configuration** checkbox in **Preferences**. ```{eval-rst} .. figure:: _images/start_dev_wizard_imx.png :scale: 60% :align: center **Start development wizard** ``` **Note:** The content of this wizard is similar to the wizard that you open by selecting **File > New** in the **Menu bar**. ## Creating, saving, and opening a configuration In this context, configuration stands for common tools settings stored in an MEX (Microcontrollers Export Configuration) file. This file contains settings of all available tools. The folder with the saved MEX file must contain exactly one project file to be able to parse the toolchain project. ### Creating a new configuration You can create a configuration from the **Start development** wizard or by selecting **File > New** from the **Menu bar**. If you start creating your development for any NXP board or kit, we recommended you start with example to create a configuration for a board or a kit. Such configuration contains board-specific settings. If you select a processor, the configuration will be empty. After the new configuration is created, you can continue by importing an existing configuration from an MEX file. It is useful if you already have a configuration available or if you want to reuse a previous configuration. To import an existing configuration from an MEX file, select **File > Import... > Import configuration (\*.mex)** from the **Menu bar**. #### Creating a new standalone configuration You can create a new configuration that is not part of any toolchain project. ```{eval-rst} .. figure:: _images/imxcreate.png :scale: 40% :align: center **Creating a new configuration** ``` To create a standalone configuration, do the following: 1. In the **Start development** wizard select **Create a new standalone configuration for processor, board, or kit**. Alternatively, in the **Menu bar**, select **File > New**. 2. Click **Next**. 3. Select the processor, board, or kit from the list. **Note:** If you are working offline, you will only see locally saved options. For more information, see the [Working offline](./advanced_features.md#working-offline) section. 4. Name your configuration. Optionally, you can select processor package, core, and SDK version. 5. Click **Finish**. ### Saving a configuration To save your configuration for future use, select **File > Save** from the **Menu bar**. To save a back-up of your configuration, do the following: 1. In the **Menu bar**, select **File > Save Copy As**. 2. In the dialog, specify the name and destination of the configuration. 3. Click **Save**. The folder with the saved MEX file must contain exactly one project file to be able to parse the toolchain project. ### Opening an existing configuration To open an existing configuration, do the following: 1. In the **Start development** wizard, select **Open an existing configuration**. Alternatively, in the **Menu bar**, select **File > Open**. 2. Click **Browse** to navigate to your configuration file. 3. Select the configuration file and click **Open**. 4. Optionally, select **Always open last configuration** to skip the **Start development** wizard and load the last-saved configuration by default. ### User templates You can export and store the current configuration as a user template for later use as a reference configuration file. ```{eval-rst} .. figure:: _images/n_exporttemplate.png :scale: 60% :align: center **Export template** ``` The exported template is available in the **New Configuration** wizard and can be used to create a configuration. You can also define custom labels for pins or identifiers prefixes for `#define` in generated code. You can export the configuration by selecting, in the **Menu bar**, **File > Export > Tools Configuration > Export Configuration as Template**. ```{eval-rst} .. figure:: _images/n_newtemplate.png :scale: 40% :align: center **Create a new configuration from the template** ``` **Note:** The templates are stored in at the following location on your local hard disk: `{$user}/.nxp/{tools_folder}/{version}/templates`. ### Importing sources You can import source code files to use as a basis for further configuration. **Note:** You can import only C or DTSI files containing valid YAML configuration blocks generated by the Config Tools. The configuration is reconstructed from the YAML block and the rest of the imported file is ignored. To import source code files, do the following: 1. In the **Menu bar**, select **File > Import...**. 2. From the list, select **MCUXpresso Config Tools > Import Source**. ```{eval-rst} .. figure:: _images/i_import.png :scale: 60% :align: center **Import Source wizard** ``` 3. Click **Next**. 4. On the next page, click **Browse** to specify the location of the source file. 5. Select the source file that you wish to import and click **Open**. 6. On the next page, select which functional groups to import (based on tools) by selecting the checkbox in the left column. 7. Define how to import the functional groups by selecting one of the two available options in the dropdown menu in the right column: - **Rename** – All files are merged into the current configuration. It imports all the functions only. If the imported function has the same name as an existing one, it is automatically renamed to the indexed one. For example, if `BOARD_InitPins` exists in the configuration then the imported function is renamed to `BOARD_InitPins1`. - **Overwrite** – All files are merged into the current configuration. It imports all the functions only. If the imported function has the same name as an existing one, then the existing one is replaced with the imported one. 8. Click **Finish**. #### Importing configuration To import an existing configuration from an MEX file, do the following: 1. In the **Menu bar**, select **File > Import...>**. 2. In the **Import** wizard, select **MCUXpresso Config Tools > Import configuration (\*.mex)**. 3. Click **Next**. 4. On the next page, click **Browse** to specify the location of the registers file. 5. Select the MEX file that you wish to import and click **Open**. 6. On the next page, select which functional groups to import (based on tools) by selecting the checkbox in the left column. 7. Define how to import the functional groups by selecting one of the two available options in the dropdown menu in the right column: - **Rename** – All files are merged into the current configuration. It imports all the functions only. If the imported function has the same name as an existing one, it is automatically renamed to the indexed one. For example, if `BOARD_InitPins` exists in the configuration then the imported function is renamed to `BOARD_InitPins1`. - **Overwrite** – All files are merged into the current configuration. It imports all the functions only. If the imported function has the same name as an existing one, then the existing one is replaced with the imported one. 8. Click **Finish**. ```{eval-rst} .. figure:: _images/imximport.png :scale: 60% :align: center **Import Wizard** ``` ```{eval-rst} .. figure:: _images/mcux7import.png :scale: 60% :align: center **Import configuration** ``` #### Importing Board/Kit Configuration Use import settings from default board/kit templates provided within CFG tools data for further configuration. To import board/kit configuration, do the following: 1. In the **Menu bar**, select **File > Import...>**. 2. In the **Import** wizard, select **Config Tools for i.MX > Import Board/Kit Configuration**. 3. Click **Next**. 4. On the next page, select the board/kit variant from the dropdown menu. 5. Select which functional groups to import (based on tools) by selecting the checkbox in the left column. 6. Define how to import the functional groups by selecting one of the two available options in the dropdown menu in the right column: - **Rename** – All files are merged into the current configuration. It imports all the functions only. If the imported function has the same name as an existing one, it is automatically renamed to the indexed one. For example, if BOARD\_InitPins exists in the configuration then the imported function is renamed to BOARD\_InitPins1. - **Overwrite** – All files are merged into the current configuration. It imports all the functions only. If the imported function has the same name as an existing one, then the existing one is replaced with the imported one. 7. Click **Finish**. ### Exporting sources It's possible to export the generated source using the Export wizard. To launch the Export wizard: 1. Select **File > Export** from the **Menu bar**. 2. Select **Export Source Files**. ```{eval-rst} .. figure:: _images/n_ui_exportpage1.png :scale: 60% :align: center **Export wizard** ``` 3. Click **Next**. 4. Select the target folder where you want to store the generated files. ```{eval-rst} .. figure:: _images/n_userinterface_exportsourcesselecttargetfolder.png :scale: 60% :align: center **Export sources – Select target folder** ``` 5. In case of multicore processors, select the cores you want to export. 6. Click **Finish**. ## Menu bar The **Menu bar** contains six menus: **File, Edit, Tools, Views, Help, and** a **tool-specific menu**. The **File** menu contains file management items. |Menu item|Description| |---------|-----------| |**New...**|Create a configuration. For more information, see the [Creating, saving, and opening a configuration](#creating-saving-and-opening-a-configuration) section.| |**Open**|Open a configuration from an MEX file.| |**Save**|Save the current configuration.| |**Save Copy As...**|Create a backup copy of the current configuration.| |**Switch processor**|Switch to a different processor. For more information, see the [Switching processor](./advanced_features.md#switching-the-processor) section.| |**Switch package**|Switch to a different processor package. For more information, see the [Switching processor](./advanced_features.md#switching-the-processor) section.| |**Select Core**|Select a processor core for further configuration.| |**Data Manager**|Manage local data. For more information, see the [Managing data and working offline](./advanced_features.md#managing-data-and-working-offline) section.| |**Import...**|Import settings from source files. For more information, see the [Advanced Features](./advanced_features.md) section.| |**Export...**|Export source files and other tool information. For more information, see the [Advanced Features](advanced_features.md) section.| |**Exit**|Exit the application. If there are any unsaved changes, you are prompted to save the changes.| The **Edit** menu contains basic editing actions as well as items modifying the appearance and behavior of the whole framework. |Menu item|Description| |---------|-----------| |**Open Update Code Dialog**|Update code after configuration change. For more information, see the [Update code](#update-code) section.| |**Undo (...)**|Cancel a previous action. The action to be undone is always appended.| |**Redo (...)**|Cancel a previous undo action. The action to be redone is always appended.| |**Copy**|Copy the selected text to the clipboard.| |**Select All**|Select the whole text in the current field/view.| |**Call from default initialization function**|Set the currently selected functional group to be called from the default initialization function.| |**Functional Group Properties**|Edit functional group properties.| |**Preferences**|Edit preferences. For more information, see the [Preferences](#preferences) section.| |**Configuration Preferences**|Edit configuration preferences. For more information, see the [Configuration Preferences](#configuration-preferences) section.| The **Tools** menu lists all the tools available in the tools framework. Use this menu to switch between the tools. The **Tool-specific** menu contains items tailor-made for individual tools. Only items relevant to the currently active tool are displayed. The menu name copies the name of the currently active tool. |Item|Description| |----|-----------| |**Functional Groups**|Edit functional group properties.| |**Automatic Routing**|Attempt to resolve routing issues. Opens the **Automatic Routing** dialog, which displays routing issues that have been resolved and the ones that require manual correction.| |**Apply Expansion Board**|Apply an expansion board to an already created expansion header| |**Create the Default Routing**|Open a dialog for the creation of a new functional group containing the after-reset state of pins and internal signals.| |**Refresh**|Refresh both the generated code and the whole GUI.| |**Reset to Board Defaults**|Reset the configuration of the Board/Kit defaults.| |**Reset to Processor Defaults**|Reset the configuration of the processor's defaults.| The **Views** menu contains a tool-specific list of available views. Select a view from the list to open it. Select an already opened view to highlight it. Choose **Reset views** to reset the current tool perspective to its default state. The **Help** menu contains assistance and general information-related items. |Item|Description| |----|-----------| |**Contents**|Display the User Guide.| |**Quick Start guide**|Open a PDF file of the Quick Start guide.| |**Release Notes**|Display release notes of the installed version.| |**Community**|Display web pages of the product-related community forums.| |**Processor Information**|Display web pages containing information about the currently used processor.| |**Kit/Board Information**|Display web pages containing information about the currently used board or kit.| |**Check for updates**|Check for a newer version of the product. If a new version is available, you are prompted to confirm and perform the update| |**Open Cheat Sheet**|Display a cheat sheet to help with using the tools. You can also load a cheat sheet from a file, or from a URL.| |**About**|Display general product information.| ## Toolbar The toolbar is on the top of the window and includes buttons/menus of frequently used actions common to all tools. See the following sections for more information. |Item|Description| |----|-----------| |**Config Tools Overview**|Open the **Overview** dialog with information about currently used tools.| |**Show Problems View**|Open the **Problems** view.| |**Update Code**|Open the update dialog allowing you to update generated peripheral initialization code directly within specified toolchain project.| |**Generate Code**|Regenerate source code when "Enable Code Preview" preference is disabled.| |**Functional group selection**|Select functional group. Functional group in the Peripherals tool represents a group of peripherals that are initialized as a group. The tool generates a C function for each function group that contains the initialization code.| |**Call from default initialization**|Set the current functional group to be initialized by the default initialization function.| |**Functional group properties**|Open the **Functional group properties** dialog to modify name and other properties of the function group.| |**Tool selection**|Display icons of individual tools. Use them to switch between tools.| |**Undo/Redo**|Undo/Redo last action.| In addition, the toolbar may contain additional items depending on the selected tool. See the chapters dedicated to individual tools for more information. ### Config tools overview The **Config Tools Overview** provides you with general information about your currently active configuration, hardware, and project. It also provides a quick overview of the used/active and unused/inactive tools, generated code, and functional groups. By default, the **Config Tools Overview** icon is on the left side of the toolbar. **Config Tools Overview** contains several items. |Item|Description| |----|-----------| |**Configuration – General Info**|Displays the name of and the path to the MEX file of the current configuration. Click the link to open the folder containing the MEX file. To import additional settings, click the **Import additional settings into current configuration** button.| |**Configuration – HW Info**|Displays the processor, part number, core, and SDK-version information of the current configuration.| |**Project**|Displays toolchain project information.| |**Pins/Clocks/Peripherals/DDR/SERDES/PBL/TEE**|Displays basic information about **Pins, Clocks, Peripherals, DDR, SERDES, PBL, TEE** tools.| To enable/disable the tools, click the toggle button. You can navigate to the tools by clicking their icons. Following information about the tools is also available: |Item|Description| |----|-----------| |**Generated code**|Contains the list of source-code files. Click the links to open the files in the **Code Preview** view.| |**Functional groups**|Contains the list of the currently active functional groups. To select the groups in the **Functional groups** tab in the toolbar, select the relevant links.| ```{eval-rst} .. figure:: _images/imxoverview.png :scale: 30% :align: center **Config Tools Overview** ``` **Note:** Unsupported tools are not displayed in the overview. ### Update code To update the project without opening the **Update Files** dialog, deselect the **Always show details before Update Code** checkbox. To access the **Update Code** dialog from the **Update Code** dropdown menu, select **Open Update Code Dialog**. ```{eval-rst} .. figure:: _images/updatecode.png :scale: 60% :align: center **Update Code dropdown menu** ``` **Note:** The generated code is always overwritten. The **Update Code** action is enabled under following conditions: - If the MEX configuration is saved in a toolchain project, the processor selected in the tool matches with processor selected in the toolchain project - Core is selected (for multicore processors) ### Functional groups Every **Pins** configuration can contain several functional groups. These groups represent functions which will be generated into source code. Use the dropdown menu to switch between functional groups and configure them. ```{eval-rst} .. figure:: _images/mcux7fungus.png :scale: 60% :align: center **Functional groups** ``` You can use two additional buttons to further configure functional groups: |Icon|Description| |----|-----------| |![](_images/n_toolbar_init_button.png)|Toggle "Called from default initialization function" feature (in source code)| |![](_images/n_toolbar_properties_button.png)|Opens the **Functional group properties** window| **Note:** Red/orange background indicates errors/warnings in the configuration. #### Functional group properties In the **Functional Group Properties** window, you can configure several options for functions and code generation. Each setting is applicable for the selected function. You can specify generated function name, select core (for multicore processors only) that is affecting the generated source code, or write function description (this description is generated in the C file). You can also add, copy, and remove functional groups as needed. Aside from name and description, you can choose to set parameters for selected functional groups. Functional group properties are specific for individual Config Tools: The Pins tool: - **Set custom #define prefix**- If this property is set, the specific custom prefix is used for macros generated into the `pin_mux.h.` Otherwise the name of the functional group is used as the prefix. - **Prefix** - The custom prefix string. If it is empty, no prefix is used. - **Clocks gate enable** - If this property is enabled, the clock gate is enabled in the generated code. The clock gate is needed for access to the peripherals, so have it enabled elsewhere. - **Core**(for multicore processors only) - Selects the core that is used for executing this function. - **Full pins initialization** - If this property is set, all features of the pins are fully initialized in the generated function even if matches the after-reset state of the processor. If it is not set, values "Not specified" or "No init" can be selected. - **De-initialization function** - If this feature is set, an additional function that sets all pins and peripheral signals in this functional group to their after-reset state is generated. The new function has a suffix `_deinit` by default. - **Set custom de-initialization function name** - Allows specifying a user-defined name of the de-initialization function. Clocks tool: - **Set custom #define prefix** - If this property is set, the custom prefix is used for macros define in `clock_config.h` Otherwise the name of the functional group is used as the prefix. - **Prefix** - The custom prefix string. If it is empty, no prefix is used. - **Other settings** - The processor-specific settings are specific for each processor. See the tooltips for details. Peripherals tool: - **Prefix** - It is used for identifiers, constants, and functions related to the functional group that is used in generated code. If it is not specified, no prefix is used. TEE tool: - **Set custom #define prefix** - If this property is checked, the custom prefix is used for macros define in generate code. Otherwise the name of the functional group is used as the prefix. ```{eval-rst} .. figure:: _images/fig_16_new_imx.png :scale: 60% :align: center **Functional group properties for the Pins tool** ``` ### Undo/Redo actions You can reverse your actions by using Undo/Redo buttons available in the **Toolbar**. You can also perform these actions from the **Edit** menu in the **Menu bar**. |Icon|Description| |----|-----------| |![](_images/undo_icon.png)|Cancels the previous action| |![](_images/redo_icon.png)|Cancels the previous undo action| ## Preferences To configure preferences in the **Preferences** dialog, select **Edit>Preferences** from the **Menu bar**. **Note:** You can restore settings to default by selecting **Restore Defaults** in the lower right corner of the dialog. ```{eval-rst} .. figure:: _images/preferences_imx.png :scale: 60% :align: center **Preferences** ``` Several settings are available. |Item|Description| |----|-----------| |**Line ending style**|Select between **Windows (CR + LF)**, **(LF)**, or **Default (based on host)**.| |**Always overwrite files without asking**|Update existing files automatically, without prompting.| |**Always show details before Update Code**|Review changes before the project is updated.| |**Undo history size**|Enter the maximum number of steps that can be undone. Enter 0 to disable.| |**Proxy connection**|- **Direct** – Connect directly and avoid a proxy connection.
- **Native** – Use system proxy configuration for network connection.

**Note:** The proxy settings are copied from operating system settings. In case of error, you can specify proxy information in the tools.ini file, located in the /bin/ folder. Make sure that the file contains the following lines:

- Djava.net.useSystemProxies=true (already present by default)
- Dhttp.proxyHost=
- Dhttp.proxyPort=80

**Note:** Authentication is not supported.| |**Work Offline**|Disable both the connection to NXP cloud and the download of processor/board/kit data.| |**Processor data update**|Select from the following options:- **Auto Update** – Update the processor data automatically.
- **Manual** – Update processor data after confirmation.
- **Disabled** – Disable processor data update.| |**Check for application updates**|Check for application updates on a weekly basis| |**Show pin label & identifier table columns (Pins Tool)**|Select to show the pin label and the label identifier in the relevant views.| |**Require an identifier for Pins (Pins Tool)**|Controls generation of pins "Identifier" related warnings. With this preference enabled, warnings will be generated for bidirectional signals that have no Identifier set.| |**Help us improve the tool**|Send device-configuration and tool-use information to NXP. Sending this information to NXP helps fix issues and improve the tools| |**Show Overview window on opening configuration for the first time**|Open the Overview dialog on opening configuration for the first time.| |**Automatically load last configuration on startup**|Avoid the startup window and load the last used configuration instead.| |**Enable animations**|Enables animations in the user interface, such as smoother scrolling or opening a drop-down menu.| ## Configuration preferences The configuration preferences are general preferences stored within the configuration storage file (MEX). To configure the preferences related to the configuration, select **Edit > Configuration Preferences** from the main menu. ```{eval-rst} .. figure:: _images/config_preferences.png :scale: 60% :align: center **Configuration preferences** ``` The following preferences are available: |Item|Description| |----|-----------| |**Generate YAML**|Select to generate YAML into C source files.| |**Custom toolchain project link**|Select to set the path to the toolchain project folder, otherwise the default path in the same folder as the configuration is used. An absolute path or a relative path to a saved configuration (MEX) can be used. Only for standalone Config Tools.| |**Custom source file copyright header**|Select to add a custom copyright header to generated source files that do not already contain copyright.| |**Output path overrides**|Rules that are used to override the path of the output files are generated by the tools. They are applied in the **Update code** and **Exports** commands. A special dialog allows editing.| |**Generate code only for registers that are different from the after-reset state**|Select to generate code for registers that are different from the after-reset state.| |**Enable Code Preview**|Controls how the code is generated. When this preference is enabled, code generation is performed automatically after every change in the configuration and the Code Preview is updated accordingly. When this preference is disabled, code generation is stopped, warning message is displayed in Code Preview window, and the action can be manually triggered by using one of the available options: - By pressing the "generate code" link highlighted in the warning message from the Code Preview window.
- By pressing the **Update Code** button in the toolbar, where code update is preceded by code generation.| **Warning:** When the source does not contain YAML code, it cannot be imported. ## Problems view The **Problems** view displays issues in individual tools and in the inter-dependencies between the tools. ```{eval-rst} .. figure:: _images/problemsview.png :scale: 30% :align: center **Problems view** ``` To open the **Problems** view, click the **Show Problems view** button in the **Toolbar**, or select **Views > Problems** from the **Menu bar**. The **Problems** table contains the following information: |Item|Description| |----|-----------| |**Level**|Severity of the problem: Information, Warning, or Error.| |**Resource**|Resource related to the problem, such as signal name, the clock signal.| |**Issue**|Description of the problem.| |**Origin**|Information on the dependency source.| |**Target**|Tool that handles the dependency and its resolution.| |**Type**|Type of the problem. It is either the validation checking dependencies between tools, or a single tool issue.| Every issue comes with a context menu accessible by right-clicking the table row. Use this menu to access information about the problem or to apply a quick fix where applicable. You can also copy the rows for later use by right-clicking the row and selecting **Copy** or by using the **Ctrl+C** shortcut. You can use the **Ctrl+left-click** shortcut to add additional rows to the selection. **Note:** Quick fix is only available for problems highlighted with the "light bulb" icon. Filter buttons are available on the right side of the **Problems** view ribbon. |Button|Description| |------|-----------| |![](_images/n_problems_filter_tool.png)|Filters messages in the **Problems** view. If selected, only problems for the active tool are displayed. See [Configuration preferences](#configuration-preferences) section for details.| ## Registers view The **Registers** view lists the registers handled by the tool models. You can see the state of the processor registers that correspond to the current configuration settings and also the state that is in the registers by default after the reset. The values of the registers are displayed in the hexadecimal and binary form. If the value of the register (or bit) is not defined, an interrogation mark "?" is displayed instead of the value. ```{eval-rst} .. figure:: _images/registers_view_from_the_pins_general.png :scale: 60% :align: center **Registers view** ``` The **Registers view** contains several items. |Item|Description| |----|-----------| |**Peripheral filter** drop-down list|List the registers only for the selected peripheral. Select **all** to list registers for all the peripherals.| |**Show modified registers only** checkbox|Hide the registers that are left in their after-reset state or are not configured.| |**Text filter**|Filter content by text.| |**Import/Export registers**|Import/Export registers from/to CSV (Import is available only for the Clocks tool)| The following table lists the color highlighting styles used in the **Registers** view. |Color|Description| |-----|-----------| |Yellow background|Indicates that the bitfield has been affected by the last change made in the tool.| |Gray text color|Indicates that the bitfield is not edited and the value is the after-reset value.| |Black text|Indicates the bit-fields that the tool modifies.| **Note:** When the Peripherals tool is active and register initialization components are used, the user can perform manual changes to some of the displayed values. ## Log view The **Log** view shows user-specific information about Tools operations. The **Log** view can show up to 100 records across all tools in chronological order. Each log entry consists of a timestamp, the name of the tool responsible for the entry, severity level, and the actual message. If no tool name is specified, the entry was triggered by shared functionality. You can filter the content of the **Log** view using the combo boxes to display only specific tool and/or severity level information. Filters in different tools can be set independently. Buffered log records are cleared using the clear button. It affects **Log** views across all tools. ```{eval-rst} .. figure:: _images/mcuxlog.png :scale: 60% :align: center **Log view** ```