blob: beb14315fa3ebdae225837030527ce7cd4357402 [file] [log] [blame]
<!--
Documentation/_templates/layout.html
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the
License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Microchip DA/DB family &mdash; NuttX latest documentation</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css" />
<link rel="stylesheet" type="text/css" href="../../../_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="../../../_static/sphinx_collapse.css" />
<link rel="stylesheet" type="text/css" href="../../../_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css" />
<link rel="shortcut icon" href="../../../_static/favicon.ico"/>
<script src="../../../_static/jquery.js"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/doctools.js"></script>
<script src="../../../_static/sphinx_highlight.js"></script>
<script src="../../../_static/clipboard.min.js"></script>
<script src="../../../_static/copybutton.js"></script>
<script src="../../../_static/design-tabs.js"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
<link rel="next" title="AVR128DA28 on breadboard" href="boards/breadxavr/index.html" />
<link rel="prev" title="Elegoo Mega2560 Rev3" href="../atmega/atmega2560/boards/elegoo-mega2560r3/index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home"> NuttX
</a>
<!-- this version selector is quite ugly, should be probably replaced by something
more modern -->
<div class="version-selector">
<select onchange="javascript:location.href = this.value;">
<option value="../../../../latest" selected="selected">latest</option>
<option value="../../../../10.0.0" >10.0.0</option>
<option value="../../../../10.0.1" >10.0.1</option>
<option value="../../../../10.1.0" >10.1.0</option>
<option value="../../../../10.2.0" >10.2.0</option>
<option value="../../../../10.3.0" >10.3.0</option>
<option value="../../../../11.0.0" >11.0.0</option>
<option value="../../../../12.0.0" >12.0.0</option>
<option value="../../../../12.1.0" >12.1.0</option>
<option value="../../../../12.2.0" >12.2.0</option>
<option value="../../../../12.2.1" >12.2.1</option>
<option value="../../../../12.3.0" >12.3.0</option>
<option value="../../../../12.4.0" >12.4.0</option>
<option value="../../../../12.5.0" >12.5.0</option>
<option value="../../../../12.5.1" >12.5.1</option>
<option value="../../../../12.6.0" >12.6.0</option>
<option value="../../../../12.7.0" >12.7.0</option>
<option value="../../../../12.8.0" >12.8.0</option>
<option value="../../../../12.9.0" >12.9.0</option>
<option value="../../../../12.10.0" >12.10.0</option>
<option value="../../../../12.11.0" >12.11.0</option>
</select>
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Table of Contents</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">Supported Platforms</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../../arm/index.html">ARM</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../arm64/index.html">ARM64</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Microchip AVR</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="../at32uc3/index.html">Microchip AT32UC3</a></li>
<li class="toctree-l3"><a class="reference internal" href="../at90usb/index.html">Microchip AT90USB</a></li>
<li class="toctree-l3"><a class="reference internal" href="../atmega/index.html">Microchip Atmega</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Microchip DA/DB family</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#supported-chips">Supported chips</a></li>
<li class="toctree-l4"><a class="reference internal" href="#clock-configuration">Clock Configuration</a></li>
<li class="toctree-l4"><a class="reference internal" href="#system-timer">System Timer</a></li>
<li class="toctree-l4"><a class="reference internal" href="#peripheral-support">Peripheral Support</a><ul>
<li class="toctree-l5"><a class="reference internal" href="#gpio">GPIO</a></li>
<li class="toctree-l5"><a class="reference internal" href="#uart">UART</a></li>
<li class="toctree-l5"><a class="reference internal" href="#twi">TWI</a></li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="#supported-boards">Supported Boards</a><ul>
<li class="toctree-l5"><a class="reference internal" href="boards/breadxavr/index.html">AVR128DA28 on breadboard</a></li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="#other-documents">Other documents</a><ul>
<li class="toctree-l5"><a class="reference internal" href="docs/gpio_intr_mux.html">GPIO interrupt multiplexer</a></li>
<li class="toctree-l5"><a class="reference internal" href="docs/twi.html">Two Wire Interface in AVR DA/DB</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../common/constants-in-progmem.html">Keeping constants in program memory</a></li>
<li class="toctree-l3"><a class="reference internal" href="../common/context-switch-notes.html">Notes on AVR context switch</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../ceva/index.html">CEVA</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../hc/index.html">HC</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../mips/index.html">MIPS</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../misco/index.html">Misoc</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../or1k/index.html">OpenRISC</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../renesas/index.html">Renesas</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../risc-v/index.html">RISC-V</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sim/index.html">Simulators</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sim/network_linux.html">Network Support on Linux</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sim/network_vpnkit.html">Network support with VPNKit</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../sparc/index.html">SPARC</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../tricore/index.html">TriCore</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../x86/index.html">Intel 80x86</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../x86_64/index.html">Intel 80x86_64</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../xtensa/index.html">Xtensa</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../z16/index.html">Z16</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../z80/index.html">Z80</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../components/index.html">OS Components</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../implementation/index.html">Implementation Details</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../faq/index.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../debugging/index.html">Debugging</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../standards/index.html">Standards</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../logos/index.html">NuttX Logos</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../_tags/tagsindex.html">Tags</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">NuttX</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../../index.html">Supported Platforms</a></li>
<li class="breadcrumb-item"><a href="../index.html">Microchip AVR</a></li>
<li class="breadcrumb-item active">Microchip DA/DB family</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/apache/nuttx/blob/master/Documentation/platforms/avr/avrdx/index.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="microchip-da-db-family">
<h1>Microchip DA/DB family<a class="headerlink" href="#microchip-da-db-family" title="Permalink to this heading"></a></h1>
<p>This is an attempt to support AVR DA/DB family of MCUs</p>
<section id="supported-chips">
<h2>Supported chips<a class="headerlink" href="#supported-chips" title="Permalink to this heading"></a></h2>
<p>The code was developed using AVR128DA28 MCU on a breadboard. Currently,
all testing was done with that chip. The chips in DA family are quite
similar, the main differences are pin count and flash size. (Pin count
also corresponds to supported peripherals, chips with more pins have
more instances of the same peripheral, eg. more USARTs.)</p>
<p>Chips in DB family are fairly similar to DA as well,
some peripherals are missing, some features are added.</p>
<p>This means that support for other chips is fairly easy to add,
all that is needed is to provide interrupt vector definitions
and similar data describing the chip. All architecture code should
otherwise be written in a way to automatically support the chip.</p>
<p>Currently, <code class="docutils literal notranslate"><span class="pre">AVR128DA64</span></code> and <code class="docutils literal notranslate"><span class="pre">AVR128DB64</span></code> chips are supported
this way (ie. definitions describing the chip are provided
but there is no board.)</p>
</section>
<section id="clock-configuration">
<h2>Clock Configuration<a class="headerlink" href="#clock-configuration" title="Permalink to this heading"></a></h2>
<p>The chip features internal high frequency oscillator, its frequency
can be set in the Kconfig-based configuration. Clock speed in MHz
is then provided in CONFIG_AVRDX_HFO_CLOCK_FREQ</p>
</section>
<section id="system-timer">
<h2>System Timer<a class="headerlink" href="#system-timer" title="Permalink to this heading"></a></h2>
<p>System timer is provided by RTC peripheral and takes over it. (In theory,
the Periodic Interrupt - PIT - component of it can be still used
but they share single clock.)</p>
<p>Tickless OS mode is supported in alarm mode. Configure it
in <span class="menuselection">RTOS Features ‣ Clocks and Timers ‣ Support tick-less OS</span>
<span class="menuselection">Tickless alarm</span> must be set, timer mode is not supported.
<span class="menuselection">System timer tick period (microseconds)</span> also needs to be
changed to value of at least 300. Higher value is recommended though,
300us is not going to be precise at all.</p>
</section>
<section id="peripheral-support">
<h2>Peripheral Support<a class="headerlink" href="#peripheral-support" title="Permalink to this heading"></a></h2>
<p>The following list indicates peripherals supported in NuttX:</p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>Peripheral</p></th>
<th class="head"><p>Notes</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>GPIO</p></td>
<td><p>In board code</p></td>
</tr>
<tr class="row-odd"><td><p>UART</p></td>
<td><p>See below</p></td>
</tr>
<tr class="row-even"><td><p>TWI</p></td>
<td><p>Master only, more below</p></td>
</tr>
</tbody>
</table>
<section id="gpio">
<h3>GPIO<a class="headerlink" href="#gpio" title="Permalink to this heading"></a></h3>
<p>For the most part, there is no need for any specific support for GPIO
in architecture code. For example, NuttX button input driver should only
need functions defined in the board code to work.</p>
<p>The architecture code provides means to share single interrupt vector
if the board needs to have multiple peripherals connected to a single
I/O port. See gpio_intr_mux.rst for details and breadxavr board
for example usage.</p>
</section>
<section id="uart">
<h3>UART<a class="headerlink" href="#uart" title="Permalink to this heading"></a></h3>
<p>UART is implemented using interrupts. The chip doesn’t support DMA.
From some initial testing done using simple echo (read/write) loop
it seems the driver cannot handle sustained data transmission
with baud rate higher than 57600 even with the chip running at its
highest speed. With baud rate 57600, performance was dependent
on read/write buffer size. With buffer size of 8 there were still
some missed bytes.</p>
<p>To be able to use standard serial driver, it is needed to enable
the peripheral in MCU-specific configuration in
<span class="menuselection">System Type ‣ AVR DA/DB Peripheral Selections</span>
UART peripherals are enabled using
<span class="menuselection">Enable serial driver for USARTn</span> options. When enabled,
additional option <span class="menuselection">Activate USART0 alternative pinout</span>
is provided. See the chip datasheet for pinout information.</p>
<p>Other UART settings are then configured in driver configuration
<span class="menuselection">Device Drivers ‣ Serial Driver Support</span>
For every enabled peripheral, there is a corresponding
<span class="menuselection">USARTn Configuration</span> section. RTS/CTS and DMA support
must NOT be enabled here, neither of those is supported.</p>
<p>Each enabled peripheral is automatically registered as <code class="docutils literal notranslate"><span class="pre">/dev/ttySn</span></code>
device file. File name corresponds to the peripheral related to it.
This for example means that <code class="docutils literal notranslate"><span class="pre">USART1</span></code> peripheral will always
be accessed through <code class="docutils literal notranslate"><span class="pre">/dev/ttyS1</span></code> regardless of what other <code class="docutils literal notranslate"><span class="pre">USART</span></code>
peripherals are enabled (if any.)</p>
</section>
<section id="twi">
<h3>TWI<a class="headerlink" href="#twi" title="Permalink to this heading"></a></h3>
<p>Currently, only master is supported. Implementation details and quick
usage instructions can be found in <a class="reference internal" href="docs/twi.html"><span class="doc">Two Wire Interface in AVR DA/DB</span></a> document.</p>
</section>
</section>
<section id="supported-boards">
<h2>Supported Boards<a class="headerlink" href="#supported-boards" title="Permalink to this heading"></a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="boards/breadxavr/index.html">AVR128DA28 on breadboard</a></li>
</ul>
</div>
</section>
<section id="other-documents">
<h2>Other documents<a class="headerlink" href="#other-documents" title="Permalink to this heading"></a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="docs/gpio_intr_mux.html">GPIO interrupt multiplexer</a></li>
<li class="toctree-l1"><a class="reference internal" href="docs/twi.html">Two Wire Interface in AVR DA/DB</a></li>
</ul>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="../atmega/atmega2560/boards/elegoo-mega2560r3/index.html" class="btn btn-neutral float-left" title="Elegoo Mega2560 Rev3" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="boards/breadxavr/index.html" class="btn btn-neutral float-right" title="AVR128DA28 on breadboard" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2023, The Apache Software Foundation.</p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>