AT03248: SAM D/R/L/C Port (PORT) Driver. Introduction. SMART ARM-based Microcontrollers APPLICATION NOTE

Similar documents
AVR151: Setup and Use of the SPI. Introduction. Features. Atmel AVR 8-bit Microcontroller APPLICATION NOTE

SMARTCARD XPRO. Preface. SMART ARM-based Microcontrollers USER GUIDE

APPLICATION NOTE. Secure Personalization with Transport Key Authentication. ATSHA204A, ATECC108A, and ATECC508A. Introduction.

APPLICATION NOTE. AT07175: SAM-BA Bootloader for SAM D21. Atmel SAM D21. Introduction. Features

AT88CK490 Evaluation Kit

APPLICATION NOTE. AT16268: JD Smart Cloud Based Smart Plug Getting. Started Guide ATSAMW25. Introduction. Features

GCLK (Generic Clock Management) PM (Power Management) SYSCTRL (Clock Source Control) The following devices can use this module:

APPLICATION NOTE. Authentication Counting. Atmel CryptoAuthentication. Features. Introduction

CryptoAuth Xplained Pro

USER GUIDE EDBG. Description

AVR106: C Functions for Reading and Writing to Flash Memory. Introduction. Features. AVR 8-bit Microcontrollers APPLICATION NOTE

DACC (Digital-to-Analog Converter Controller) The outline of this documentation is as follows: Module Overview. Special Considerations

AVR1309: Using the XMEGA SPI. 8-bit Microcontrollers. Application Note. Features. 1 Introduction SCK MOSI MISO SS

AT09333: USB Host Interface (UHI) for Communication Class Device (CDC) Introduction. Atmel Microcontrollers APPLICATION NOTE

SN 132 SNAPstick QUICK START GUIDE

APPLICATION NOTE. Atmel AVR134: Real Time Clock (RTC) Using the Asynchronous Timer. Atmel AVR 8-bit Microcontroller. Introduction.

AVR32701: AVR32AP7 USB Performance. 32-bit Microcontrollers. Application Note. Features. 1 Introduction

AN AES encryption and decryption software on LPC microcontrollers. Document information

How To Use An Atmel Atmel Avr32848 Demo For Android (32Bit) With A Microcontroller (32B) And An Android Accessory (32D) On A Microcontroller (32Gb) On An Android Phone Or

AT11805: Capacitive Touch Long Slider Design with PTC. Introduction. Features. Touch Solutions APPLICATION NOTE

QT1 Xplained Pro. Preface. Atmel QTouch USER GUIDE

APPLICATION NOTE. AT12405: Low Power Sensor Design with PTC. Atmel MCU Integrated Touch. Introduction

APPLICATION NOTE. Atmel AT04389: Connecting SAMD20E to the AT86RF233 Transceiver. Atmel SAMD20. Description. Features

AVR1600: Using the XMEGA Quadrature Decoder. 8-bit Microcontrollers. Application Note. Features. 1 Introduction. Sensors

AVR317: Using the Master SPI Mode of the USART module. 8-bit Microcontrollers. Application Note. Features. Introduction

Application Note. Atmel ATSHA204 Authentication Modes. Prerequisites. Overview. Introduction

Using CryptoMemory in Full I 2 C Compliant Mode. Using CryptoMemory in Full I 2 C Compliant Mode AT88SC0104CA AT88SC0204CA AT88SC0404CA AT88SC0808CA

AVR311: Using the TWI Module as I2C Slave. Introduction. Features. AVR 8-bit Microcontrollers APPLICATION NOTE

Atmel AVR4903: ASF - USB Device HID Mouse Application. Atmel Microcontrollers. Application Note. Features. 1 Introduction

AT15007: Differences between ATmega328/P and ATmega328PB. Introduction. Features. Atmel AVR 8-bit Microcontrollers APPLICATION NOTE

Atmel AVR4921: ASF - USB Device Stack Differences between ASF V1 and V2. 8-bit Atmel Microcontrollers. Application Note. Features.

AVR1900: Getting started with ATxmega128A1 on STK bit Microcontrollers. Application Note. 1 Introduction

AVR127: Understanding ADC Parameters. Introduction. Features. Atmel 8-bit and 32-bit Microcontrollers APPLICATION NOTE

Dell One Identity Cloud Access Manager How to Configure vworkspace Integration

32-bit AVR UC3 Microcontrollers. 32-bit AtmelAVR Application Note. AVR32769: How to Compile the standalone AVR32 Software Framework in AVR32 Studio V2

AVR1510: Xplain training - XMEGA USART. 8-bit Microcontrollers. Application Note. Prerequisites. 1 Introduction

Introduction to Version Control in

Open Source Used In Cisco Instant Connect for ios Devices 4.9(1)

AVR131: Using the AVR s High-speed PWM. Introduction. Features. AVR 8-bit Microcontrollers APPLICATION NOTE

Using the RS232 serial evaluation boards on a USB port

AVR315: Using the TWI Module as I2C Master. Introduction. Features. AVR 8-bit Microcontrollers APPLICATION NOTE

AT03247: SAM D/R/L/C Non-Volatile Memory (NVM) Driver. Introduction. SMART ARM-based Microcontrollers APPLICATION NOTE

AVR033: Getting Started with the CodeVisionAVR C Compiler. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

AVR115: Data Logging with Atmel File System on ATmega32U4. Microcontrollers. Application Note. 1 Introduction. Atmel

APPLICATION NOTE Atmel AT02509: In House Unit with Bluetooth Low Energy Module Hardware User Guide 8-bit Atmel Microcontroller Features Description

AVR1922: Xplain Board Controller Firmware. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

Upgrading Intel AMT 5.0 drivers to Linux kernel v2.6.31

AVR319: Using the USI module for SPI communication. 8-bit Microcontrollers. Application Note. Features. Introduction

Dell Spotlight on Active Directory Server Health Wizard Configuration Guide

Microsoft SharePoint

Quest vworkspace Virtual Desktop Extensions for Linux

Application Note. 8-bit Microcontrollers. AVR270: USB Mouse Demonstration

AVR1318: Using the XMEGA built-in AES accelerator. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

System Center Virtual Machine Manager 2012 R2 Plug-In. Feature Description

AN11008 Flash based non-volatile storage

AVR32138: How to optimize the ADC usage on AT32UC3A0/1, AT32UC3A3 and AT32UC3B0/1 series. 32-bit Microcontrollers. Application Note.

formerly Help Desk Authority Quest Free Network Tools User Manual

TERMS AND CONDITIONS

AVR1301: Using the XMEGA DAC. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

8-bit. Application Note. Microcontrollers. AVR282: USB Firmware Upgrade for AT90USB

Spotlight Management Pack for SCOM

APPLICATION NOTE. Atmel AVR443: Sensor-based Control of Three Phase Brushless DC Motor. Atmel AVR 8-bit Microcontrollers. Features.

AVR287: USB Host HID and Mass Storage Demonstration. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

AVR125: ADC of tinyavr in Single Ended Mode. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

AGREEMENT BETWEEN USER AND Caduceon Environmental Laboratories Customer Portal

RSA Two Factor Authentication

Dell One Identity Cloud Access Manager How to Configure for SSO to SAP NetWeaver using SAML 2.0

AN Boot mode jumper settings for LPC1800 and LPC4300. Document information

USER GUIDE. ZigBit USB Stick User Guide. Introduction

APPLICATION NOTE. RF System Architecture Considerations ATAN0014. Description

APPLICATION NOTE. Atmel AT01095: Joystick Game Controller Reference Design. 8-/16-bit Atmel Microcontrollers. Features.

AN1991. Audio decibel level detector with meter driver

NetSuite End User License Agreement for Mobile Applications

Pervasive Software Inc. Pervasive PSQL v11 Insurance License Agreement

Fuse MQ Enterprise Broker Administration Tutorials

Third Party Software Used In PLEK500 (Utility for Win) v1.x.xx.xxx

Dell InTrust Preparing for Auditing Cisco PIX Firewall

BlackBerry Business Cloud Services. Version: Release Notes

ANZ TRANSACTIVE MOBILE for ipad

SAMA5D2. Scope. Reference Documents. Atmel SMART ARM-based MPU ERRATA

AT12181: ATWINC1500 Wi-Fi Network Controller - AP Provision Mode. Introduction. Features. Atmel SmartConnect APPLICATION NOTE

Designing Feature-Rich User Interfaces for Home and Industrial Controllers

AT91SAM ARM-based Flash MCU. Application Note

RSA Two Factor Authentication. Feature Description

TTL to RS232 Adapter User Guide

Dell InTrust Preparing for Auditing Microsoft SQL Server

Dell Migration Manager for Enterprise Social What Can and Cannot Be Migrated

More Secure, Less Costly IoT Edge Node Security Provisioning

APPLICATION NOTE. Atmel LF-RFID Kits Overview. Atmel LF-RFID Kit. LF-RFID Kit Introduction

Temperature & Humidity SMS Alert Controller

Pulse Redundancy. User Guide

Spotlight Management Pack for SCOM

Partners in Care Welch Allyn Connex Software Development Kit License Agreement

Introducing a platform to facilitate reliable and highly productive embedded developments

APPLICATION NOTE. AT05558: Wireless Manufacturing Test Kit. Atmel ATmega256RFR2. Description. Features

GEO Sticky DNS. GEO Sticky DNS. Feature Description

Terms & Conditions. Introduction. The following terms and conditions govern your use of this website (VirginiaHomeRepair.com).

DUAL MONITOR DRIVER AND VBIOS UPDATE

Application Note. Atmel CryptoAuthentication Product Uses. Atmel ATSHA204. Abstract. Overview

Capacitive Touch Technology Opens the Door to a New Generation of Automotive User Interfaces

Transcription:

SMART ARM-based Microcontrollers AT03248: SAM D/R/L/C Port (PORT) Driver APPLICATION NOTE Introduction This driver for Atmel SMART ARM -based microcontrollers provides an interface for the configuration and management of the device's General Purpose Input/Output (GPIO) pin functionality, for manual pin state reading and writing. The following peripheral is used by this module: PORT (GPIO Management) The following devices can use this module: Atmel SMART SAM D20/D21 Atmel SMART SAM R21 Atmel SMART SAM D09/D10/D11 Atmel SMART SAM L21/L22 Atmel SMART SAM DA1 Atmel SMART SAM C20/C21 The outline of this documentation is as follows: Prerequisites Module Overview Special Considerations Extra Information Examples API Overview

Table of Contents Introduction...1 1. Software License... 4 2. Prerequisites...5 3. Module Overview...6 3.1. Driver Feature Macro Definition...6 3.2. Physical and Logical GPIO Pins...6 3.3. Physical Connection...6 4. Special Considerations...7 5. Extra Information... 8 6. Examples...9 7. API Overview...10 7.1. Structure Definitions... 10 7.1.1. Struct port_config...10 7.1.2. Struct port_input_event_config... 10 7.2. Macro Definitions...10 7.2.1. Driver Feature Definition...10 7.2.2. PORT Alias Macros... 10 7.3. Function Definitions... 11 7.3.1. State Reading/Writing (Physical Group Orientated)...11 7.3.2. Configuration and Initialization...13 7.3.3. State Reading/Writing (Logical Pin Orientated)... 14 7.3.4. Port Input Event... 15 7.4. Enumeration Definitions... 17 7.4.1. Enum port_input_event...17 7.4.2. Enum port_input_event_action... 17 7.4.3. Enum port_pin_dir... 17 7.4.4. Enum port_pin_pull...17 8. Extra Information for PORT Driver...19 8.1. Acronyms...19 8.2. Dependencies...19 8.3. Errata...19 8.4. Module History...19 9. Examples for PORT Driver... 20 9.1. Quick Start Guide for PORT - Basic...20 9.1.1. Setup... 20 9.1.2. Use Case... 21 2

10. Document Revision History... 22 3

1. Software License Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of Atmel may not be used to endorse or promote products derived from this software without specific prior written permission. 4. This software may only be redistributed and used in connection with an Atmel microcontroller product. THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 4

2. Prerequisites There are no prerequisites for this module. 5

3. Module Overview The device GPIO (PORT) module provides an interface between the user application logic and external hardware peripherals, when general pin state manipulation is required. This driver provides an easy-touse interface to the physical pin input samplers and output drivers, so that pins can be read from or written to for general purpose external hardware control. 3.1. Driver Feature Macro Definition Driver Feature Macro FEATURE_PORT_INPUT_EVENT Supported devices SAM L21/L22/C20/C21 Note: The specific features are only available in the driver when the selected device supports those features. 3.2. Physical and Logical GPIO Pins SAM devices use two naming conventions for the I/O pins in the device; one physical and one logical. Each physical pin on a device package is assigned both a physical port and pin identifier (e.g. "PORTA. 0") as well as a monotonically incrementing logical GPIO number (e.g. "GPIO0"). While the former is used to map physical pins to their physical internal device module counterparts, for simplicity the design of this driver uses the logical GPIO numbers instead. 3.3. Physical Connection Figure 3-1 Physical Connection on page 6 shows how this module is interconnected within the device. Figure 3-1. Physical Connection Port Pad Peripheral MUX GPIO Module Other Peripheral Modules 6

4. Special Considerations The SAM port pin input sampler can be disabled when the pin is configured in pure output mode to save power; reading the pin state of a pin configured in output-only mode will read the logical output state that was last set. 7

5. Extra Information For extra information, see Extra Information for PORT Driver. This includes: Acronyms Dependencies Errata Module History 8

6. Examples For a list of examples related to this driver, see Examples for PORT Driver. 9

7. API Overview 7.1. Structure Definitions 7.1.1. Struct port_config Configuration structure for a port pin instance. This structure should be initialized by the port_get_config_defaults() function before being modified by the user application. Table 7-1. Members Type Name Description enum port_pin_dir direction Port buffer input/output direction enum port_pin_pull input_pull Port pull-up/pull-down for input pins bool powersave Enable lowest possible powerstate on the pin Note: All other configurations will be ignored, the pin will be disabled. 7.1.2. Struct port_input_event_config Configuration structure for a port input event. Table 7-2. Members Type Name Description enum port_input_event_action action Port input event action uint8_t gpio_pin GPIO pin 7.2. Macro Definitions 7.2.1. Driver Feature Definition Define port features set according to different device family. 7.2.1.1. Macro FEATURE_PORT_INPUT_EVENT #define FEATURE_PORT_INPUT_EVENT Event input control feature support for PORT group. 7.2.2. PORT Alias Macros 7.2.2.1. Macro PORTA #define PORTA Convenience definition for GPIO module group A on the device (if available). 10

7.2.2.2. Macro PORTB #define PORTB Convenience definition for GPIO module group B on the device (if available). 7.2.2.3. Macro PORTC #define PORTC Convenience definition for GPIO module group C on the device (if available). 7.2.2.4. Macro PORTD #define PORTD Convenience definition for GPIO module group D on the device (if available). 7.3. Function Definitions 7.3.1. State Reading/Writing (Physical Group Orientated) 7.3.1.1. Function port_get_group_from_gpio_pin() Retrieves the PORT module group instance from a given GPIO pin number. PortGroup * port_get_group_from_gpio_pin( const uint8_t gpio_pin) Retrieves the PORT module group instance associated with a given logical GPIO pin number. Table 7-3. Parameters [in] gpio_pin Index of the GPIO pin to convert Returns Base address of the associated PORT module. 7.3.1.2. Function port_group_get_input_level() Retrieves the state of a group of port pins that are configured as inputs. uint32_t port_group_get_input_level( const PortGroup *const port, const uint32_t mask) Reads the current logic level of a port module's pins and returns the current levels as a bitmask. Table 7-4. Parameters [in] port Base of the PORT module to read from [in] mask Mask of the port pin(s) to read 11

Returns Status of the port pin(s) input buffers. 7.3.1.3. Function port_group_get_output_level() Retrieves the state of a group of port pins that are configured as outputs. uint32_t port_group_get_output_level( const PortGroup *const port, const uint32_t mask) Reads the current logical output level of a port module's pins and returns the current levels as a bitmask. Table 7-5. Parameters [in] port Base of the PORT module to read from [in] mask Mask of the port pin(s) to read Returns Status of the port pin(s) output buffers. 7.3.1.4. Function port_group_set_output_level() Sets the state of a group of port pins that are configured as outputs. void port_group_set_output_level( PortGroup *const port, const uint32_t mask, const uint32_t level_mask) Sets the current output level of a port module's pins to a given logic level. Table 7-6. Parameters [out] port Base of the PORT module to write to [in] mask Mask of the port pin(s) to change [in] level_mask Mask of the port level(s) to set 7.3.1.5. Function port_group_toggle_output_level() Toggles the state of a group of port pins that are configured as an outputs. void port_group_toggle_output_level( PortGroup *const port, const uint32_t mask) Toggles the current output levels of a port module's pins. 12

Table 7-7. Parameters [out] port Base of the PORT module to write to [in] mask Mask of the port pin(s) to toggle 7.3.2. Configuration and Initialization 7.3.2.1. Function port_get_config_defaults() Initializes a Port pin/group configuration structure to defaults. void port_get_config_defaults( struct port_config *const config) Initializes a given Port pin/group configuration structure to a set of known default values. This function should be called on all new instances of these configuration structures before being modified by the user application. The default configuration is as follows: Input mode with internal pull-up enabled Table 7-8. Parameters [out] config Configuration structure to initialize to default values 7.3.2.2. Function port_pin_set_config() Writes a Port pin configuration to the hardware module. void port_pin_set_config( const uint8_t gpio_pin, const struct port_config *const config) Writes out a given configuration of a Port pin configuration to the hardware module. Note: If the pin direction is set as an output, the pull-up/pull-down input configuration setting is ignored. Table 7-9. Parameters [in] gpio_pin Index of the GPIO pin to configure [in] config Configuration settings for the pin 7.3.2.3. Function port_group_set_config() Writes a Port group configuration group to the hardware module. void port_group_set_config( PortGroup *const port, const uint32_t mask, const struct port_config *const config) Writes out a given configuration of a Port group configuration to the hardware module. 13

Note: If the pin direction is set as an output, the pull-up/pull-down input configuration setting is ignored. Table 7-10. Parameters [out] port Base of the PORT module to write to [in] mask Mask of the port pin(s) to configure [in] config Configuration settings for the pin group 7.3.3. State Reading/Writing (Logical Pin Orientated) 7.3.3.1. Function port_pin_get_input_level() Retrieves the state of a port pin that is configured as an input. bool port_pin_get_input_level( const uint8_t gpio_pin) Reads the current logic level of a port pin and returns the current level as a Boolean value. Table 7-11. Parameters [in] gpio_pin Index of the GPIO pin to read Returns Status of the port pin's input buffer. 7.3.3.2. Function port_pin_get_output_level() Retrieves the state of a port pin that is configured as an output. bool port_pin_get_output_level( const uint8_t gpio_pin) Reads the current logical output level of a port pin and returns the current level as a Boolean value. Table 7-12. Parameters [in] gpio_pin Index of the GPIO pin to read Returns Status of the port pin's output buffer. 7.3.3.3. Function port_pin_set_output_level() Sets the state of a port pin that is configured as an output. void port_pin_set_output_level( const uint8_t gpio_pin, const bool level) Sets the current output level of a port pin to a given logic level. 14

Table 7-13. Parameters [in] gpio_pin Index of the GPIO pin to write to [in] level Logical level to set the given pin to 7.3.3.4. Function port_pin_toggle_output_level() Toggles the state of a port pin that is configured as an output. void port_pin_toggle_output_level( const uint8_t gpio_pin) Toggles the current output level of a port pin. Table 7-14. Parameters [in] gpio_pin Index of the GPIO pin to toggle 7.3.4. Port Input Event 7.3.4.1. Function port_enable_input_event() Enable the port event input. enum status_code port_enable_input_event( const uint8_t gpio_pin, const enum port_input_event n) Enable the port event input with the given pin and event. Table 7-15. Parameters [in] gpio_pin Index of the GPIO pin [in] n Port input event Table 7-16. Return Values Return value STATUS_ERR_INVALID_ARG STATUS_OK Description Invalid parameter Successfully 7.3.4.2. Function port_disable_input_event() Disable the port event input. enum status_code port_disable_input_event( const uint8_t gpio_pin, const enum port_input_event n) Disable the port event input with the given pin and event. 15

Table 7-17. Parameters [in] gpio_pin Index of the GPIO pin [in] gpio_pin Port input event Table 7-18. Return Values Return value STATUS_ERR_INVALID_ARG STATUS_OK Description Invalid parameter Successfully 7.3.4.3. Function port_input_event_get_config_defaults() Retrieve the default configuration for port input event. void port_input_event_get_config_defaults( struct port_input_event_config *const config) Fills a configuration structure with the default configuration for port input event: Event output to pin Event action to be executed on PIN 0 Table 7-19. Parameters [out] config Configuration structure to fill with default values 7.3.4.4. Function port_input_event_set_config() Configure port input event. enum status_code port_input_event_set_config( const enum port_input_event n, struct port_input_event_config *const config) Configures port input event with the given configuration settings. Table 7-20. Parameters [in] config Port input even configuration structure containing the new config Table 7-21. Return Values Return value STATUS_ERR_INVALID_ARG STATUS_OK Description Invalid parameter Successfully 16

7.4. Enumeration Definitions 7.4.1. Enum port_input_event List of port input events. Table 7-22. Members Enum value Description PORT_INPUT_EVENT_0 Port input event 0 PORT_INPUT_EVENT_1 Port input event 1 PORT_INPUT_EVENT_2 Port input event 2 PORT_INPUT_EVENT_3 Port input event 3 7.4.2. Enum port_input_event_action List of port input events action on pin. Table 7-23. Members Enum value PORT_INPUT_EVENT_ACTION_OUT PORT_INPUT_EVENT_ACTION_SET PORT_INPUT_EVENT_ACTION_CLR PORT_INPUT_EVENT_ACTION_TGL Description Event out to pin Set output register of pin on event Clear output register pin on event Toggle output register pin on event 7.4.3. Enum port_pin_dir Enum for the possible pin direction settings of the port pin configuration structure, to indicate the direction the pin should use. Table 7-24. Members Enum value PORT_PIN_DIR_INPUT PORT_PIN_DIR_OUTPUT Description The pin's input buffer should be enabled, so that the pin state can be read The pin's output buffer should be enabled, so that the pin state can be set PORT_PIN_DIR_OUTPUT_WTH_READBACK The pin's output and input buffers should be enabled, so that the pin state can be set and read back 7.4.4. Enum port_pin_pull Enum for the possible pin pull settings of the port pin configuration structure, to indicate the type of logic level pull the pin should use. 17

Table 7-25. Members Enum value PORT_PIN_PULL_NONE PORT_PIN_PULL_UP PORT_PIN_PULL_DOWN Description No logical pull should be applied to the pin Pin should be pulled up when idle Pin should be pulled down when idle 18

8. Extra Information for PORT Driver 8.1. Acronyms Below is a table listing the acronyms used in this module, along with their intended meanings. Acronym GPIO MUX Description General Purpose Input/Output Multiplexer 8.2. Dependencies This driver has the following dependencies: System Pin Multiplexer Driver 8.3. Errata There are no errata related to this driver. 8.4. Module History An overview of the module history is presented in the table below, with details on the enhancements and fixes made to the module since its first release. The current version of this corresponds to the newest version in the table. Changelog Added input event feature Initial release 19

9. Examples for PORT Driver This is a list of the available Quick Start guides (QSGs) and example applications for SAM Port (PORT) Driver. QSGs are simple examples with step-by-step instructions to configure and use this driver in a selection of use cases. Note that a QSG can be compiled as a standalone application or be added to the user application. Quick Start Guide for PORT - Basic 9.1. Quick Start Guide for PORT - Basic 9.1.1. Setup In this use case, the PORT module is configured for: One pin in input mode, with pull-up enabled One pin in output mode This use case sets up the PORT to read the current state of a GPIO pin set as an input, and mirrors the opposite logical state on a pin configured as an output. 9.1.1.1. Prerequisites 9.1.1.2. Code There are no special setup requirements for this use-case. Copy-paste the following setup code to your user application: void configure_port_pins(void) { struct port_config config_port_pin; port_get_config_defaults(&config_port_pin); config_port_pin.direction = PORT_PIN_DIR_INPUT; config_port_pin.input_pull = PORT_PIN_PULL_UP; port_pin_set_config(button_0_pin, &config_port_pin); } config_port_pin.direction = PORT_PIN_DIR_OUTPUT; port_pin_set_config(led_0_pin, &config_port_pin); Add to user application initialization (typically the start of main()): configure_port_pins(); 9.1.1.3. Workflow 1. Create a PORT module pin configuration struct, which can be filled out to adjust the configuration of a single port pin. struct port_config config_port_pin; 2. Initialize the pin configuration struct with the module's default values. port_get_config_defaults(&config_port_pin); Note: This should always be performed before using the configuration struct to ensure that all values are initialized to known default settings. 20

3. Adjust the configuration struct to request an input pin. config_port_pin.direction = PORT_PIN_DIR_INPUT; config_port_pin.input_pull = PORT_PIN_PULL_UP; 4. Configure push button pin with the initialized pin configuration struct, to enable the input sampler on the pin. port_pin_set_config(button_0_pin, &config_port_pin); 5. Adjust the configuration struct to request an output pin. config_port_pin.direction = PORT_PIN_DIR_OUTPUT; Note: The existing configuration struct may be re-used, as long as any values that have been altered from the default settings are taken into account by the user application. 6. Configure LED pin with the initialized pin configuration struct, to enable the output driver on the pin. port_pin_set_config(led_0_pin, &config_port_pin); 9.1.2. Use Case 9.1.2.1. Code Copy-paste the following code to your user application: while (true) { bool pin_state = port_pin_get_input_level(button_0_pin); } port_pin_set_output_level(led_0_pin,!pin_state); 9.1.2.2. Workflow 1. Read in the current input sampler state of push button pin, which has been configured as an input in the use-case setup code. bool pin_state = port_pin_get_input_level(button_0_pin); 2. Write the inverted pin level state to LED pin, which has been configured as an output in the usecase setup code. port_pin_set_output_level(led_0_pin,!pin_state); 21

10. Document Revision History Doc. Rev. Date Comments 42113E 12/2015 Added input event feature. Added support for SAM L21/L22, SAM C21, SAM D09, and SAM DA1. 42113D 42113C 42113B 42113A 12/2014 Added support for SAM R21 and SAM D10/D11 01/2014 Added support for SAM D21 06/2013 Corrected documentation typos 06/2013 Initial document release 22

Atmel Corporation 1600 Technology Drive, San Jose, CA 95110 USA T: (+1)(408) 441.0311 F: (+1)(408) 436.4200 www.atmel.com 2015 Atmel Corporation. / Rev.: Atmel, Atmel logo and combinations thereof, Enabling Unlimited Possibilities, and others are registered trademarks or trademarks of Atmel Corporation in U.S. and other countries. ARM, ARM Connected logo, and others are registered trademarks of ARM Ltd. Other terms and product names may be trademarks of others. DISCLAIMER: The information in this document is provided in connection with Atmel products. No license, express or implied, by estoppel or otherwise, to any intellectual property right is granted by this document or in connection with the sale of Atmel products. EXCEPT AS SET FORTH IN THE ATMEL TERMS AND CONDITIONS OF SALES LOCATED ON THE ATMEL WEBSITE, ATMEL ASSUMES NO LIABILITY WHATSOEVER AND DISCLAIMS ANY EXPRESS, IMPLIED OR STATUTORY WARRANTY RELATING TO ITS PRODUCTS INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE, SPECIAL OR INCIDENTAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS AND PROFITS, BUSINESS INTERRUPTION, OR LOSS OF INFORMATION) ARISING OUT OF THE USE OR INABILITY TO USE THIS DOCUMENT, EVEN IF ATMEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Atmel makes no representations or warranties with respect to the accuracy or completeness of the contents of this document and reserves the right to make changes to specifications and products descriptions at any time without notice. Atmel does not make any commitment to update the information contained herein. Unless specifically provided otherwise, Atmel products are not suitable for, and shall not be used in, automotive applications. Atmel products are not intended, authorized, or warranted for use as components in applications intended to support or sustain life. SAFETY-CRITICAL, MILITARY, AND AUTOMOTIVE APPLICATIONS DISCLAIMER: Atmel products are not designed for and will not be used in connection with any applications where the failure of such products would reasonably be expected to result in significant personal injury or death ( Safety-Critical Applications ) without an Atmel officer's specific written consent. Safety-Critical Applications include, without limitation, life support devices and systems, equipment or systems for the operation of nuclear facilities and weapons systems. Atmel products are not designed nor intended for use in military or aerospace applications or environments unless specifically designated by Atmel as military-grade. Atmel products are not designed nor intended for use in automotive applications unless specifically designated by Atmel as automotive-grade.