blob: b7dda7a37938559a3cec2e5012703b142eb79247 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GPIO &mdash; Apache Mynewt latest documentation</title>
<link rel="shortcut icon" href="../../../../_static/mynewt-logo-only-newt32x32.png"/>
<link rel="stylesheet" href="../../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/css/sphinx_theme.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/css/bootstrap-3.0.3.min.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/css/v2.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/css/custom.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/css/restructuredtext.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/css/overrides.css" type="text/css" />
<link rel="index" title="Index"
href="../../../../genindex.html"/>
<link rel="search" title="Search" href="../../../../search.html"/>
<link rel="top" title="Apache Mynewt latest documentation" href="../../../../index.html"/>
<link rel="up" title="Hardware Abstraction Layer" href="../hal.html"/>
<link rel="next" title="UART" href="../hal_uart/hal_uart.html"/>
<link rel="prev" title="Timer" href="../hal_timer/hal_timer.html"/>
<script src="../../../../_static/js/modernizr.min.js"></script>
<script>
(function(i, s, o, g, r, a, m) {
i["GoogleAnalyticsObject"] = r;
(i[r] =
i[r] ||
function() {
(i[r].q = i[r].q || []).push(arguments);
}),
(i[r].l = 1 * new Date());
(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
})(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");
ga("create", "UA-72162311-1", "auto");
ga("send", "pageview");
</script>
</head>
<body class="not-front page-documentation" role="document" >
<div id="wrapper">
<div class="container">
<div id="banner" class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="../../../../_static/img/logo.png">
</a>
<div class="tagline-cell">
<h4 class="tagline">An OS to build, deploy and securely manage billions of devices</h4>
</div>
<div class="news-cell">
<div class="well">
<h4>Latest News:</h4> <a href="/download">Apache Mynewt 1.11.0, Apache NimBLE 1.6.0 </a> released September 7, 2023)
</div>
</div>
</div>
</div>
<header>
<nav id="navbar" class="navbar navbar-inverse" role="navigation">
<div class="container">
<!-- Collapsed navigation -->
<div class="navbar-header">
<!-- Expander button -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<!-- Expanded navigation -->
<div class="navbar-collapse collapse">
<!-- Main navigation -->
<ul class="nav navbar-nav navbar-right">
<li>
<a href="/"><i class="fa fa-home" style="font-size: larger;"></i></a>
</li>
<li class="important">
<a href="/quick-start/">Quick Start</a>
</li>
<li>
<a href="/about/">About</a>
</li>
<li>
<a href="/talks/">Talks</a>
</li>
<li class="active">
<a href="/documentation/">Documentation</a>
</li>
<li>
<a href="/download/">Download</a>
</li>
<li>
<a href="/community/">Community</a>
</li>
<li>
<a href="/events/">Events</a>
</li>
</ul>
<!-- Search, Navigation and Repo links -->
<ul class="nav navbar-nav navbar-right">
</ul>
</div>
</div>
</nav>
</header>
<!-- STARTS MAIN CONTENT -->
<div id="main-content">
<div id="breadcrumb">
<div class="container">
<a href="/documentation/">Docs</a> /
<a href="../../../os_user_guide.html">OS User Guide</a> /
<a href="../hal.html">Hardware Abstraction Layer</a> /
GPIO
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-core/edit/master/docs/os/modules/hal/hal_gpio/hal_gpio.rst" class="icon icon-github"
rel="nofollow"> Edit on GitHub</a>
</div>
</div>
</div>
<!-- STARTS CONTAINER -->
<div class="container">
<!-- STARTS .content -->
<div id="content" class="row">
<!-- STARTS .container-sidebar -->
<div class="container-sidebar col-xs-12 col-sm-3">
<div id="docSidebar" class="sticky-container">
<div role="search" class="sphinx-search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="Search documentation" class="search-documentation" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<!-- Note: only works when deployed -->
<select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest" selected>
Version: latest
</option>
<option value="/v1_11_0" >
Version: 1.11.0
</option>
<option value="/v1_10_0" >
Version: 1.10.0
</option>
<option value="/v1_9_0" >
Version: 1.9.0
</option>
<option value="/v1_8_0" >
Version: 1.8.0
</option>
<option value="/v1_7_0" selected="selected" >
Version: 1.7.0
</option>
<option value="/v1_6_0" >
Version: 1.6.0
</option>
<option value="/v1_5_0" >
Version: 1.5.0
</option>
<option value="/v1_4_0" >
Version: 1.4.0
</option>
<option value="/v1_3_0/os/introduction" >
Version: 1.3.0
</option>
<option value="/v1_2_0/os/introduction" >
Version: 1.2.0
</option>
<option value="/v1_1_0/os/introduction" >
Version: 1.1.0
</option>
<option value="/v1_0_0/os/introduction" >
Version: 1.0.0
</option>
<option value="/v0_9_0/os/introduction" >
Version: 0.9.0
</option>
</select>
<div class="region region-sidebar">
<div class="docs-menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../../../index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../get_started/index.html">Setup &amp; Get Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../concepts.html">Concepts</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../tutorials/tutorials.html">Tutorials</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../external_links.html">Third-party Resources</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../../../os_user_guide.html">OS User Guide</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../../../core_os/mynewt_os.html">Kernel</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../system_modules.html">System</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="../hal.html">Hardware Abstraction</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="../hal_timer/hal_timer.html">Timer</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">GPIO</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hal_uart/hal_uart.html">UART</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hal_spi/hal_spi.html">SPI</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hal_i2c/hal_i2c.html">I2C</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hal_flash/hal_flash.html">Flash</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hal_watchdog/hal_watchdog.html">Watchdog</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hal_bsp/hal_bsp.html">BSP</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../bootloader/bootloader.html">Secure Bootloader</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../split/split.html">Split Images</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../../core_os/porting/port_os.html">Porting Guide</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../baselibc.html">Baselibc</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../drivers/driver.html">Drivers</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../devmgmt/newtmgr.html">Device Management with Newt Manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../mcumgr/mcumgr.html">Device Management with MCUmgr</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../imgmgr/imgmgr.html">Image Manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sysinitconfig/sysinitconfig.html">Compile-Time Configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../fs/fs.html">File System</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../fcb/fcb.html">Flash Circular Buffer</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sensor_framework/sensor_framework.html">Sensor Framework</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../testutil/testutil.html">Test Utilities</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../json/json.html">JSON</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../mfg/mfg.html">Manufacturing support</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../../network/index.html">BLE User Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../newt/index.html">Newt Tool Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../newtmgr/index.html">Newt Manager Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../mynewt_faq/index.html">Mynewt FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../misc/index.html">Appendix</a></li>
</ul>
</div>
</div>
</div>
<!-- ENDS STICKY CONTAINER -->
</div>
<!-- ENDS .container-sidebar -->
<div class="col-xs-12 col-sm-9">
<div class="alert alert-warning">
<p>
Version 1.7.0 is not the most recent version of the
Apache Mynewt documentation. Click <a href="/latest">here</a> to
read the latest version.
</p>
</div>
<div class="">
<div class="rst-content">
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="gpio">
<h1>GPIO<a class="headerlink" href="#gpio" title="Permalink to this headline"></a></h1>
<p>This is the hardware independent GPIO (General Purpose Input Output)
Interface for Mynewt.</p>
<div class="section" id="description">
<h2>Description<a class="headerlink" href="#description" title="Permalink to this headline"></a></h2>
<p>Contains the basic operations to set and read General Purpose Digital
I/O Pins within a Mynewt system.</p>
<p>Individual GPIOs are referenced in the APIs as <code class="docutils literal notranslate"><span class="pre">pins</span></code>. However, in
this interface the <code class="docutils literal notranslate"><span class="pre">pins</span></code> are virtual GPIO pins. The MCU header file
maps these virtual <code class="docutils literal notranslate"><span class="pre">pins</span></code> to the physical GPIO ports and pins.</p>
<p>Typically, the BSP code may define named I/O pins in terms of these
virtual <code class="docutils literal notranslate"><span class="pre">pins</span></code> to describe the devices attached to the physical pins.</p>
<p>Here’s a brief example so you can get the gist of the translation.</p>
<p>Suppose my product uses the stm32F4xx processor. There already exists
support for this processor within Mynewt. The processor has N ports
(A,B,C..) of 16 GPIO pins per port. The MCU hal_gpio driver maps these
to a set of virtual pins 0-N where port A maps to 0-15, Port B maps to
16-31, Port C maps to 32-47 and so on. The exact number of physical port
(and virtual port pins) depends on the specific variant of the
stm32F4xx.</p>
<p>So if I want to turn on port B pin 3, that would be virtual pin 1*16 +
3 = 19. This translation is defined in the MCU implementation of
<a class="reference external" href="https://github.com/apache/mynewt-core/blob/master/hw/mcu/stm/stm32_common/src/hal_gpio.c">hal_gpio.c</a>
for the stm32. Each MCU will typically have a different translation
method depending on its GPIO architecture.</p>
<p>Now, when writing a BSP, it’s common to give names to the relevant port
pins that you are using. Thus, the BSP may define a mapping between a
function and a virtual port pin in the <code class="docutils literal notranslate"><span class="pre">bsp.h</span></code> header file for the
BSP. For example,</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">#</span>define<span class="w"> </span>SYSTEM_LED<span class="w"> </span><span class="o">(</span><span class="m">37</span><span class="o">)</span>
<span class="gp">#</span>define<span class="w"> </span>FLASH_SPI_CHIP_SELECT<span class="w"> </span><span class="o">(</span><span class="m">3</span><span class="o">)</span>
</pre></div>
</div>
<p>would map the system indicator LED to virtual pin 37 which on the
stm32F4xx would be Port C pin 5 and the chip select line for the
external SPI flash to virtual pin 3 which on the stm32F4xxis port A pin
3.</p>
<p>Said another way, in this specific system we get</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">SYSTEM_LED --&gt; hal_gpio virtual pin 37 --&gt; port C pin 5 on the stm34F4xx</span>
</pre></div>
</div>
</div>
<div class="section" id="api">
<h2>API<a class="headerlink" href="#api" title="Permalink to this headline"></a></h2>
<dl class="c enum">
<dt id="c.hal_gpio_mode_e">
<span class="target" id="group___h_a_l_gpio_1ga05d33c14218c9a540b36d8368cfccc4e"></span><em class="property"><span class="pre">enum</span> </em><code class="sig-name descname"><span class="pre">hal_gpio_mode_e</span></code><a class="headerlink" href="#c.hal_gpio_mode_e" title="Permalink to this definition"></a><br /></dt>
<dd><p>The “mode” of the gpio. </p>
<p>The gpio is either an input, output, or it is “not connected” (the pin specified is not functioning as a gpio) </p>
<p><em>Values:</em></p>
<dl class="c enumerator">
<dt id="c.hal_gpio_mode_e.HAL_GPIO_MODE_NC">
<span class="target" id="group___h_a_l_gpio_1gga05d33c14218c9a540b36d8368cfccc4ea7a0bc7ac854ea5d1d5cdd5afdb574943"></span><em class="property"><span class="pre">enumerator</span> </em><code class="sig-name descname"><span class="pre">HAL_GPIO_MODE_NC</span></code><a class="headerlink" href="#c.hal_gpio_mode_e.HAL_GPIO_MODE_NC" title="Permalink to this definition"></a><br /></dt>
<dd><p>Not connected. </p>
</dd></dl>
<dl class="c enumerator">
<dt id="c.hal_gpio_mode_e.HAL_GPIO_MODE_IN">
<span class="target" id="group___h_a_l_gpio_1gga05d33c14218c9a540b36d8368cfccc4ea1cdd3f47a122d021908af28514135b0d"></span><em class="property"><span class="pre">enumerator</span> </em><code class="sig-name descname"><span class="pre">HAL_GPIO_MODE_IN</span></code><a class="headerlink" href="#c.hal_gpio_mode_e.HAL_GPIO_MODE_IN" title="Permalink to this definition"></a><br /></dt>
<dd><p>Input. </p>
</dd></dl>
<dl class="c enumerator">
<dt id="c.hal_gpio_mode_e.HAL_GPIO_MODE_OUT">
<span class="target" id="group___h_a_l_gpio_1gga05d33c14218c9a540b36d8368cfccc4ea4c7f8a4977ea851187d600bc390e9e90"></span><em class="property"><span class="pre">enumerator</span> </em><code class="sig-name descname"><span class="pre">HAL_GPIO_MODE_OUT</span></code><a class="headerlink" href="#c.hal_gpio_mode_e.HAL_GPIO_MODE_OUT" title="Permalink to this definition"></a><br /></dt>
<dd><p>Output. </p>
</dd></dl>
</dd></dl>
<dl class="c enum">
<dt id="c.hal_gpio_pull">
<span class="target" id="group___h_a_l_gpio_1ga7d6c41232ae1659321fdb8d83ecb0602"></span><em class="property"><span class="pre">enum</span> </em><code class="sig-name descname"><span class="pre">hal_gpio_pull</span></code><a class="headerlink" href="#c.hal_gpio_pull" title="Permalink to this definition"></a><br /></dt>
<dd><p><em>Values:</em></p>
<dl class="c enumerator">
<dt id="c.hal_gpio_pull.HAL_GPIO_PULL_NONE">
<span class="target" id="group___h_a_l_gpio_1gga7d6c41232ae1659321fdb8d83ecb0602a1bf6748c4e1ad5b4ef9257f9146be798"></span><em class="property"><span class="pre">enumerator</span> </em><code class="sig-name descname"><span class="pre">HAL_GPIO_PULL_NONE</span></code><a class="headerlink" href="#c.hal_gpio_pull.HAL_GPIO_PULL_NONE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Pull-up/down not enabled. </p>
</dd></dl>
<dl class="c enumerator">
<dt id="c.hal_gpio_pull.HAL_GPIO_PULL_UP">
<span class="target" id="group___h_a_l_gpio_1gga7d6c41232ae1659321fdb8d83ecb0602a877c8cc65df5733424ba21e788890d08"></span><em class="property"><span class="pre">enumerator</span> </em><code class="sig-name descname"><span class="pre">HAL_GPIO_PULL_UP</span></code><a class="headerlink" href="#c.hal_gpio_pull.HAL_GPIO_PULL_UP" title="Permalink to this definition"></a><br /></dt>
<dd><p>Pull-up enabled. </p>
</dd></dl>
<dl class="c enumerator">
<dt id="c.hal_gpio_pull.HAL_GPIO_PULL_DOWN">
<span class="target" id="group___h_a_l_gpio_1gga7d6c41232ae1659321fdb8d83ecb0602a386567f3dec876c7b850a2a1359535c2"></span><em class="property"><span class="pre">enumerator</span> </em><code class="sig-name descname"><span class="pre">HAL_GPIO_PULL_DOWN</span></code><a class="headerlink" href="#c.hal_gpio_pull.HAL_GPIO_PULL_DOWN" title="Permalink to this definition"></a><br /></dt>
<dd><p>Pull-down enabled. </p>
</dd></dl>
</dd></dl>
<dl class="c enum">
<dt id="c.hal_gpio_irq_trigger">
<span class="target" id="group___h_a_l_gpio_1ga746d10c5b6de39dba3ba87ccf699c790"></span><em class="property"><span class="pre">enum</span> </em><code class="sig-name descname"><span class="pre">hal_gpio_irq_trigger</span></code><a class="headerlink" href="#c.hal_gpio_irq_trigger" title="Permalink to this definition"></a><br /></dt>
<dd><p><em>Values:</em></p>
<dl class="c enumerator">
<dt id="c.hal_gpio_irq_trigger.HAL_GPIO_TRIG_NONE">
<span class="target" id="group___h_a_l_gpio_1gga746d10c5b6de39dba3ba87ccf699c790ab293dbc504ffe6acfc94c10315934631"></span><em class="property"><span class="pre">enumerator</span> </em><code class="sig-name descname"><span class="pre">HAL_GPIO_TRIG_NONE</span></code><a class="headerlink" href="#c.hal_gpio_irq_trigger.HAL_GPIO_TRIG_NONE" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c enumerator">
<dt id="c.hal_gpio_irq_trigger.HAL_GPIO_TRIG_RISING">
<span class="target" id="group___h_a_l_gpio_1gga746d10c5b6de39dba3ba87ccf699c790a619f7fff6a04445a9bfee1942100dd98"></span><em class="property"><span class="pre">enumerator</span> </em><code class="sig-name descname"><span class="pre">HAL_GPIO_TRIG_RISING</span></code><a class="headerlink" href="#c.hal_gpio_irq_trigger.HAL_GPIO_TRIG_RISING" title="Permalink to this definition"></a><br /></dt>
<dd><p>IRQ occurs on rising edge. </p>
</dd></dl>
<dl class="c enumerator">
<dt id="c.hal_gpio_irq_trigger.HAL_GPIO_TRIG_FALLING">
<span class="target" id="group___h_a_l_gpio_1gga746d10c5b6de39dba3ba87ccf699c790a3418cf236fda37588bbcd7b230ca3f75"></span><em class="property"><span class="pre">enumerator</span> </em><code class="sig-name descname"><span class="pre">HAL_GPIO_TRIG_FALLING</span></code><a class="headerlink" href="#c.hal_gpio_irq_trigger.HAL_GPIO_TRIG_FALLING" title="Permalink to this definition"></a><br /></dt>
<dd><p>IRQ occurs on falling edge. </p>
</dd></dl>
<dl class="c enumerator">
<dt id="c.hal_gpio_irq_trigger.HAL_GPIO_TRIG_BOTH">
<span class="target" id="group___h_a_l_gpio_1gga746d10c5b6de39dba3ba87ccf699c790aa5113a87c39a27cc38924cd2f3f0fb13"></span><em class="property"><span class="pre">enumerator</span> </em><code class="sig-name descname"><span class="pre">HAL_GPIO_TRIG_BOTH</span></code><a class="headerlink" href="#c.hal_gpio_irq_trigger.HAL_GPIO_TRIG_BOTH" title="Permalink to this definition"></a><br /></dt>
<dd><p>IRQ occurs on either edge. </p>
</dd></dl>
<dl class="c enumerator">
<dt id="c.hal_gpio_irq_trigger.HAL_GPIO_TRIG_LOW">
<span class="target" id="group___h_a_l_gpio_1gga746d10c5b6de39dba3ba87ccf699c790a0868ce8b2ed4b9d0225d7a9cf7327105"></span><em class="property"><span class="pre">enumerator</span> </em><code class="sig-name descname"><span class="pre">HAL_GPIO_TRIG_LOW</span></code><a class="headerlink" href="#c.hal_gpio_irq_trigger.HAL_GPIO_TRIG_LOW" title="Permalink to this definition"></a><br /></dt>
<dd><p>IRQ occurs when line is low. </p>
</dd></dl>
<dl class="c enumerator">
<dt id="c.hal_gpio_irq_trigger.HAL_GPIO_TRIG_HIGH">
<span class="target" id="group___h_a_l_gpio_1gga746d10c5b6de39dba3ba87ccf699c790a616f9424f3760152478d96720f78cb82"></span><em class="property"><span class="pre">enumerator</span> </em><code class="sig-name descname"><span class="pre">HAL_GPIO_TRIG_HIGH</span></code><a class="headerlink" href="#c.hal_gpio_irq_trigger.HAL_GPIO_TRIG_HIGH" title="Permalink to this definition"></a><br /></dt>
<dd><p>IRQ occurs when line is high. </p>
</dd></dl>
</dd></dl>
<dl class="c type">
<dt id="c.hal_gpio_mode_t">
<span class="target" id="group___h_a_l_gpio_1ga5040ea4ce60b1fa001963143c56123d4"></span><em class="property"><span class="pre">typedef</span> </em><em class="property"><span class="pre">enum</span></em> <a class="reference internal" href="#c.hal_gpio_mode_e" title="hal_gpio_mode_e"><span class="pre">hal_gpio_mode_e</span></a> <code class="sig-name descname"><span class="pre">hal_gpio_mode_t</span></code><a class="headerlink" href="#c.hal_gpio_mode_t" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c type">
<dt id="c.hal_gpio_pull_t">
<span class="target" id="group___h_a_l_gpio_1gaa96291053d9fd1f8890ea1df9de686a3"></span><em class="property"><span class="pre">typedef</span> </em><em class="property"><span class="pre">enum</span></em> <a class="reference internal" href="#c.hal_gpio_pull" title="hal_gpio_pull"><span class="pre">hal_gpio_pull</span></a> <code class="sig-name descname"><span class="pre">hal_gpio_pull_t</span></code><a class="headerlink" href="#c.hal_gpio_pull_t" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c type">
<dt id="c.hal_gpio_irq_trig_t">
<span class="target" id="group___h_a_l_gpio_1ga49380279d2a339d21e9764e705ff6748"></span><em class="property"><span class="pre">typedef</span> </em><em class="property"><span class="pre">enum</span></em> <a class="reference internal" href="#c.hal_gpio_irq_trigger" title="hal_gpio_irq_trigger"><span class="pre">hal_gpio_irq_trigger</span></a> <code class="sig-name descname"><span class="pre">hal_gpio_irq_trig_t</span></code><a class="headerlink" href="#c.hal_gpio_irq_trig_t" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c type">
<dt id="c.hal_gpio_irq_handler_t">
<span class="target" id="group___h_a_l_gpio_1ga4e27cbc81cfeb6d4827f5789bffc1bf2"></span><em class="property"><span class="pre">typedef</span> </em><span class="pre">void</span> <span class="pre">(</span><span class="pre">*</span><code class="sig-name descname"><span class="pre">hal_gpio_irq_handler_t</span></code><span class="pre">)</span><span class="sig-paren">(</span><span class="pre">void</span> <span class="pre">*</span><span class="pre">arg</span><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_gpio_irq_handler_t" title="Permalink to this definition"></a><br /></dt>
<dd></dd></dl>
<dl class="c function">
<dt id="c.hal_gpio_init_in">
<span class="target" id="group___h_a_l_gpio_1ga6f871cb613f87d328f9098484d34982e"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">hal_gpio_init_in</span></code><span class="sig-paren">(</span><span class="pre">int</span> <em><span class="pre">pin</span></em>, <a class="reference internal" href="#c.hal_gpio_pull_t" title="hal_gpio_pull_t"><span class="pre">hal_gpio_pull_t</span></a> <em><span class="pre">pull</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_gpio_init_in" title="Permalink to this definition"></a><br /></dt>
<dd><p>Initializes the specified pin as an input. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>int 0: no error; -1 otherwise. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">pin</span></code>: Pin number to set as input </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pull</span></code>: pull type</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_gpio_init_out">
<span class="target" id="group___h_a_l_gpio_1ga7594e2079435ac6f3a6950bcd99b33c7"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">hal_gpio_init_out</span></code><span class="sig-paren">(</span><span class="pre">int</span> <em><span class="pre">pin</span></em>, <span class="pre">int</span> <em><span class="pre">val</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_gpio_init_out" title="Permalink to this definition"></a><br /></dt>
<dd><p>Initialize the specified pin as an output, setting the pin to the specified value. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>int 0: no error; -1 otherwise. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">pin</span></code>: Pin number to set as output </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">val</span></code>: Value to set pin</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_gpio_deinit">
<span class="target" id="group___h_a_l_gpio_1ga4fbfb72138789ad6aabea4ad0c572a82"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">hal_gpio_deinit</span></code><span class="sig-paren">(</span><span class="pre">int</span> <em><span class="pre">pin</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_gpio_deinit" title="Permalink to this definition"></a><br /></dt>
<dd><p>Deinitialize the specified pin to revert the previous initialization. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>int 0: no error; -1 otherwise. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">pin</span></code>: Pin number to unset</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_gpio_write">
<span class="target" id="group___h_a_l_gpio_1gaf84a65839b9b04225131714c9bd16049"></span><span class="pre">void</span> <code class="sig-name descname"><span class="pre">hal_gpio_write</span></code><span class="sig-paren">(</span><span class="pre">int</span> <em><span class="pre">pin</span></em>, <span class="pre">int</span> <em><span class="pre">val</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_gpio_write" title="Permalink to this definition"></a><br /></dt>
<dd><p>Write a value (either high or low) to the specified pin. </p>
<p><dl class="simple">
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">pin</span></code>: Pin to set </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">val</span></code>: Value to set pin (0:low 1:high) </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_gpio_read">
<span class="target" id="group___h_a_l_gpio_1ga4036d26c86d52e1f2e1e8d058126dae9"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">hal_gpio_read</span></code><span class="sig-paren">(</span><span class="pre">int</span> <em><span class="pre">pin</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_gpio_read" title="Permalink to this definition"></a><br /></dt>
<dd><p>Reads the specified pin. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>int 0: low, 1: high </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">pin</span></code>: Pin number to read</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_gpio_toggle">
<span class="target" id="group___h_a_l_gpio_1ga41cb6827b643d7b54da660987b280a85"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">hal_gpio_toggle</span></code><span class="sig-paren">(</span><span class="pre">int</span> <em><span class="pre">pin</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_gpio_toggle" title="Permalink to this definition"></a><br /></dt>
<dd><p>Toggles the specified pin. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>current gpio state int 0: low, 1: high </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">pin</span></code>: Pin number to toggle</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_gpio_irq_init">
<span class="target" id="group___h_a_l_gpio_1gaf2d98059c05b0b3867699f83675205fd"></span><span class="pre">int</span> <code class="sig-name descname"><span class="pre">hal_gpio_irq_init</span></code><span class="sig-paren">(</span><span class="pre">int</span> <em><span class="pre">pin</span></em>, <a class="reference internal" href="#c.hal_gpio_irq_handler_t" title="hal_gpio_irq_handler_t"><span class="pre">hal_gpio_irq_handler_t</span></a> <em><span class="pre">handler</span></em>, <span class="pre">void</span> <span class="pre">*</span><em><span class="pre">arg</span></em>, <a class="reference internal" href="#c.hal_gpio_irq_trig_t" title="hal_gpio_irq_trig_t"><span class="pre">hal_gpio_irq_trig_t</span></a> <em><span class="pre">trig</span></em>, <a class="reference internal" href="#c.hal_gpio_pull_t" title="hal_gpio_pull_t"><span class="pre">hal_gpio_pull_t</span></a> <em><span class="pre">pull</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_gpio_irq_init" title="Permalink to this definition"></a><br /></dt>
<dd><p>Initialize a given pin to trigger a GPIO IRQ callback. </p>
<p><dl class="simple">
<dt><strong>Return</strong></dt><dd><p>0 on success, non-zero error code on failure. </p>
</dd>
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">pin</span></code>: The pin to trigger GPIO interrupt on </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">handler</span></code>: The handler function to call </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">arg</span></code>: The argument to provide to the IRQ handler </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">trig</span></code>: The trigger mode (e.g. rising, falling) </p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pull</span></code>: The mode of the pin (e.g. pullup, pulldown)</p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_gpio_irq_release">
<span class="target" id="group___h_a_l_gpio_1ga233f5726dc049c11c02a7ea6e17bbe5c"></span><span class="pre">void</span> <code class="sig-name descname"><span class="pre">hal_gpio_irq_release</span></code><span class="sig-paren">(</span><span class="pre">int</span> <em><span class="pre">pin</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_gpio_irq_release" title="Permalink to this definition"></a><br /></dt>
<dd><p>Release a pin from being configured to trigger IRQ on state change. </p>
<p><dl class="simple">
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">pin</span></code>: The pin to release </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_gpio_irq_enable">
<span class="target" id="group___h_a_l_gpio_1gaf5a12227e02c35222b5c00b84bdf11a0"></span><span class="pre">void</span> <code class="sig-name descname"><span class="pre">hal_gpio_irq_enable</span></code><span class="sig-paren">(</span><span class="pre">int</span> <em><span class="pre">pin</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_gpio_irq_enable" title="Permalink to this definition"></a><br /></dt>
<dd><p>Enable IRQs on the passed pin. </p>
<p><dl class="simple">
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">pin</span></code>: The pin to enable IRQs on </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
<dl class="c function">
<dt id="c.hal_gpio_irq_disable">
<span class="target" id="group___h_a_l_gpio_1ga7762336b37c8f239085952ece2eb2941"></span><span class="pre">void</span> <code class="sig-name descname"><span class="pre">hal_gpio_irq_disable</span></code><span class="sig-paren">(</span><span class="pre">int</span> <em><span class="pre">pin</span></em><span class="sig-paren">)</span><a class="headerlink" href="#c.hal_gpio_irq_disable" title="Permalink to this definition"></a><br /></dt>
<dd><p>Disable IRQs on the passed pin. </p>
<p><dl class="simple">
<dt><strong>Parameters</strong></dt><dd><ul class="breatheparameterlist simple">
<li><p><code class="docutils literal notranslate"><span class="pre">pin</span></code>: The pin to disable IRQs on </p></li>
</ul>
</dd>
</dl>
</p>
</dd></dl>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="../hal_uart/hal_uart.html" class="btn btn-neutral float-right" title="UART" accesskey="n">Next: UART <span class="fa fa-arrow-circle-right"></span></a>
<a href="../hal_timer/hal_timer.html" class="btn btn-neutral" title="Timer" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: Timer</a>
</div>
</div>
</div>
</div>
<!-- ENDS CONTENT SECTION -->
</div>
<!-- ENDS .content -->
</div>
</div>
<footer>
<div class="container">
<div class="row">
<div class="col-xs-12">
<p class="copyright">Apache Mynewt is available under Apache License, version 2.0.</p>
</div>
<div class="col-xs-12">
<div class="logos">
<img src="../../../../_static/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
<small class="footnote">
Apache Mynewt, Mynewt, Apache, the Apache feather logo, and the Apache Mynewt project logo are either
registered trademarks or trademarks of the Apache Software Foundation in the United States and other countries.
</small>
<a href="">
<img src="../../../../_static/img/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
</div>
</div>
</footer>
</div>
<!-- ENDS #wrapper -->
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../../../../',
VERSION:'latest',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
LINK_SUFFIX: '.html'
};
</script>
<script type="text/javascript" src="../../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../../_static/js/bootstrap-3.0.3.min.js"></script>
<script type="text/javascript" src="../../../../_static/js/affix.js"></script>
<script type="text/javascript" src="../../../../_static/js/main.js"></script>
</body>
</html>