Harmony v3 Drivers on SAM C21 Using FreeRTOS: Step 2

Step 2.1: Configure I²C Driver and I²C Pins

1

Under the Available Components tab, expand Harmony > Drivers.

  • Select and double click on I²C to add the I²C driver to the project.
i2c_driver_select.png
core_activation.png
freertos_activation.png
i2c_core_freertos.png

Select FreeRTOS and view the Configuration Options on the right. Depending on the requirements of the application, the FreeRTOS default configuration can be changed using the GUI. For this tutorial, you will use the default configuration.

freertos_default.png

Adding FreeRTOS maps all the Operating System Abstraction Layer (OSAL) Application Programming Interface (API) calls used by the Harmony drivers and system services to FreeRTOS APIs.

  • Associate I²C driver with I²C instance 0 (SERCOM2) peripheral by right clicking on the red diamond.
i2c_driver_instance.png
i2c_driver_project_graph_plib_linked.png
  • Click on Instance 0 under I²C Driver to view the Configuration Options. Change the Number of Clients to 2.
i2c_driver_client_changes.png
  • The above configuration allows the same instance of driver to be used by two different clients. The first application client interfaces with the Temperature Sensor thread and the second application client interfaces with the EEPROM thread.
  • The Number of Clients for each driver instance is automatically set to one. MPLAB® Harmony Configurator (MHC) assumes a minimum of one client for each instance of the driver.
i2c_driver_multiclient.png

If the application had two or more devices that were interfaced through different I²C peripherals, then the driver had to be configured to enable multiple instance support. Multiple instance support is enabled by clicking on the + sign on the I²C driver block. Every click on the + sign adds a new instance to the driver. Each instance can be configured separately.

  • Click on I²C to verify the driver is configured in Synchronous mode.
i2c_sync.png
  • Select SERCOM2 Peripheral Library and notice the default configuration by expanding Hardware Settings.
sercom2_plib_conf.png
  • The SERCOM2 (as I²C) retains the default 100 kHz speed because the temperature sensor chip on the I/O1 Xplained Pro Extension Kit can operate at 100 kHz I²C speed.
  • The SERCOM2 (as I²C) retains the default 50-100 nanoseconds hold time for Serial Data (SDA) Hold Time because it aligns with the minimum (50 nanoseconds) start hold time stated in the specification of the temperature sensor chip (AT30TSE758).
  • The SERCOM2 (as I²C) retains the default 100 nanoseconds for I²C Trise time because it aligns with the maximum (300 nanoseconds) input rise time stated in the specification of the temperature sensor chip (AT30TSE758).

2

Open the Pin Configuration tabs by clicking Standalone Window > Tools > Pin Configuration.

open_pin_configuration.png

3

Select the MHC Pin Settings tab and sort the entries by Ports.

sercom2_pins_setup_1.png

Now, select the MHC Pin Table tab and then scroll down to the SERCOM2 module.

  • Enable I²C Data (SDA)(SERCOM2_PAD0) on PA12 (Pin #29)
  • Enable I²C Clock (SCL)(SERCOM2_PAD1) on PA13 (Pin #30)
sercom2_pins_setup_2.png

This completes the configuration of the I²C driver. The application code will use the I²C driver APIs to read the temperature from the temperature sensor and store it in EEPROM. The application also retrieves the last five temperature values stored in the EEPROM.

Step 2.2: Configure Universal Synchronous Asynchronous Receiver Transmitter (USART) Driver and USART Pins

1

Under the Available Components tab, expand Harmony > Drivers.

  • Double click on USART to add the Universal Synchronous Asynchronous Receiver Transmitter (USART) driver to the project.
usart_driver_select.png
usart_driver_project_graph.png
  • Associate USART Driver with USART instance (SERCOM4) peripheral by right clicking on the red diamond.
usart_driver_instance.png
usart_driver_project_graph_plib_linked.png
  • Verify USART driver is configured to run in Synchronous mode by clicking on the USART block.
usart_sync.png
  • Click on Instance 0 under USART Driver to view the Configuration Options. Change the USART driver Instance 0 number of clients to 3. The User Input Thread will use the USART driver to read the character input on the serial terminal. The Sensor and EEPROM threads will use the USART driver to print temperature values on the serial terminal.
usart_driver_instance_changes.png
  • Select the SERCOM4 Peripheral Library in the Project Graph and configure it for USART protocol, including setting the baud rate to 115200 Hz.
usart_plib_conf.png

2

Select the Pin Table tab and then scroll down to the SERCOM4 module.

Enable USART_TX on PB10 (Pin #23)
Enable USART_RX on PB11 (pin #24)

usart_pins_setup.png

The application will use the USART driver for printing messages on the serial terminal and receiving input from the user to retrieve the last five stored values from the EEPROM.



Next Step >

© 2024 Microchip Technology, Inc.
Notice: ARM and Cortex are the registered trademarks of ARM Limited in the EU and other countries.
Information contained on this site regarding device applications and the like is provided only for your convenience and may be superseded by updates. It is your responsibility to ensure that your application meets with your specifications. MICROCHIP MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED, WRITTEN OR ORAL, STATUTORY OR OTHERWISE, RELATED TO THE INFORMATION, INCLUDING BUT NOT LIMITED TO ITS CONDITION, QUALITY, PERFORMANCE, MERCHANTABILITY OR FITNESS FOR PURPOSE. Microchip disclaims all liability arising from this information and its use. Use of Microchip devices in life support and/or safety applications is entirely at the buyer's risk, and the buyer agrees to defend, indemnify and hold harmless Microchip from any and all damages, claims, suits, or expenses resulting from such use. No licenses are conveyed, implicitly or otherwise, under any Microchip intellectual property rights.