samd: overhaul doxygen

This commit is contained in:
Karl Palsson 2021-02-03 23:06:49 +00:00
parent b57dbc5429
commit 458a0553a8
3 changed files with 54 additions and 105 deletions

View File

@ -0,0 +1,8 @@
/** @defgroup peripheral_apis Peripheral APIs
* APIs for device peripherals
*/
/** @defgroup SAMD_defines SAMD Defines
* Defined Constants and Types for the SAMD series.
* @copyright SPDX: LGPL-3.0-or-later
*/

View File

@ -1,29 +1,12 @@
/** @defgroup gpio_defines
/** @defgroup port_defines IO Port Definitions
*
* #ingroup SAMD_defines
* @ingroup SAMD_defines
*
* @brief Defined Constants and Types for the SAMD Port controler
* @brief Defined Constants and Types for the SAMD Port controller
*
* LGPL License Terms @ref lgpl_license
*/
/*
* This file is part of the libopencm3 project.
*
* Copyright (C) 2016 Karl Palsson <karlp@tweak.net.au>
* Copyright (C) 2020 Gwenhael Goavec-Merou <gwenhael.goavec-merou@trabucayre.com>
*
* This library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library. If not, see <http://www.gnu.org/licenses/>.
* @copyright SPDX: LGPL-3.0-or-later
* @author 2016 Karl Palsson <karlp@tweak.net.au>
* @author 2020 Gwenhael Goavec-Merou <gwenhael.goavec-merou@trabucayre.com>
*/
#pragma once
@ -40,7 +23,6 @@
/* GPIO number definitions (for convenience) */
/** @defgroup gpio_pin_id GPIO Pin Identifiers
@ingroup gpio_defines
@{*/
#define GPIO0 (1 << 0)
#define GPIO1 (1 << 1)
@ -79,7 +61,6 @@
/* GPIO mux definitions (for convenience) */
/** @defgroup gpio_mux GPIO mux configuration
@ingroup gpio_mux
@{*/
enum port_mux {
PORT_PMUX_FUN_A = 0,
@ -94,46 +75,48 @@ enum port_mux {
};
/**@}*/
/* --- PORT registers ----------------------------------------------------- */
/* Direction register */
/** @defgroup port_registers PORT Registers
* @{
*/
/** Direction register */
#define PORT_DIR(port) MMIO32((port) + 0x0000)
/* Direction clear register */
/** Direction clear register */
#define PORT_DIRCLR(port) MMIO32((port) + 0x0004)
/* Direction set register */
/** Direction set register */
#define PORT_DIRSET(port) MMIO32((port) + 0x0008)
/* Direction toggle register */
/** Direction toggle register */
#define PORT_DIRTGL(port) MMIO32((port) + 0x000c)
/* output register */
/** output register */
#define PORT_OUT(port) MMIO32((port) + 0x0010)
/* output clear register */
/** output clear register */
#define PORT_OUTCLR(port) MMIO32((port) + 0x0014)
/* output set register */
/** output set register */
#define PORT_OUTSET(port) MMIO32((port) + 0x0018)
/* output toggle register */
/** output toggle register */
#define PORT_OUTTGL(port) MMIO32((port) + 0x001c)
/* input register */
/** input register */
#define PORT_IN(port) MMIO32((port) + 0x0020)
/* Control register */
/** Control register */
#define PORT_CTRL(port) MMIO32((port) + 0x0024)
/* Write configuration register */
/** Write configuration register */
#define PORT_WRCONFIG(port) MMIO32((port) + 0x0028)
/* Peripheral multiplexing registers */
/** Peripheral multiplexing registers */
#define PORT_PMUX(port, n) MMIO8((port) + 0x0030 + (n))
/* Pin configuration registers */
/** Pin configuration registers */
#define PORT_PINCFG(port, n) MMIO8((port) + 0x0040 + (n))
/**@}*/
/* --- PORTx_DIR values ---------------------------------------------------- */
@ -175,77 +158,66 @@ enum port_mux {
/* PORTx_CTRL[31:0]: CTRLy[31:0]: Port input sampling mode [y=0..31] */
/* --- PORTx_WRCONFIG values ----------------------------------------------- */
/* HWSEL: Half word select: 0 [15:0], 1 [31:16] */
/**@defgroup port_wrconfig_values PortX WRCONFIG Values
* @{
*/
/** HWSEL: Half word select: 0 [15:0], 1 [31:16] */
#define PORT_WRCONFIG_HWSEL (1 << 31)
/* WRPINCFG: Write PINCFG: 1 to update pins for selected by PINMASK */
/** WRPINCFG: Write PINCFG: 1 to update pins for selected by PINMASK */
#define PORT_WRCONFIG_WRPINCFG (1 << 30)
/* Bit 29: Reserved */
/* WRPMUX: Write PMUX: 1 to update pins pmux for selected by PINMASK */
/** WRPMUX: Write PMUX: 1 to update pins pmux for selected by PINMASK */
#define PORT_WRCONFIG_WRPMUX (1 << 28)
/* PMUX: Peripheral Multiplexing: determine pmux for pins selected by PINMASK */
/** PMUX: Peripheral Multiplexing: determine pmux for pins selected by PINMASK */
#define PORT_WRCONFIG_PMUX(mux) ((0xf & (mux)) << 24)
/* Bit 23: Reserved */
/* DRVSTR: Output Driver Strength Selection: determine strength for pins in PINMASK */
/** DRVSTR: Output Driver Strength Selection: determine strength for pins in PINMASK */
#define PORT_WRCONFIG_DRVSTR (1 << 22)
/* Bit [21:19]: Reserved */
/* PULLEN: Pull Enable: enable PINCFGy.PULLEN for pins in PINMASK */
/** PULLEN: Pull Enable: enable PINCFGy.PULLEN for pins in PINMASK */
#define PORT_WRCONFIG_PULLEN (1 << 18)
/* INEN: Input Enable: enable PINCFGy.INEN for pins in PINMASK */
/** INEN: Input Enable: enable PINCFGy.INEN for pins in PINMASK */
#define PORT_WRCONFIG_INEN (1 << 17)
/* PMUXEN: Peripheral Multiplexer Enable: enable PINCFGy.PMUXEN for pins in PINMASK */
/** PMUXEN: Peripheral Multiplexer Enable: enable PINCFGy.PMUXEN for pins in PINMASK */
#define PORT_WRCONFIG_PMUXEN (1 << 16)
/* PINMASK: Pin Mask for Multiple Pin Configuration: select pins to be configured
/** PINMASK: Pin Mask for Multiple Pin Configuration: select pins to be configured
* [31:16] if HWSET=1, [15:0] if HWSET=0
*/
#define PORT_WRCONFIG_PINMASK(pins) ((0xffff & (pins)) << 0)
/**@}*/
/* --- PORTx_PMUX values --------------------------------------------------- */
/* PMUXO: Peripheral Multiplexing for Odd-Numbered Pin: 2*x+1 pin multiplexing */
/** PMUXO: Peripheral Multiplexing for Odd-Numbered Pin: 2*x+1 pin multiplexing */
#define PORT_PMUX_PMUXO(mux) ((0xf & (mux)) << 4)
/* PMUXE: Peripheral Multiplexing for Even-Numbered Pin: 2*x pin multiplexing */
/** PMUXE: Peripheral Multiplexing for Even-Numbered Pin: 2*x pin multiplexing */
#define PORT_PMUX_PMUXE(mux) ((0xf & (mux)) << 0)
/* --- PORTx_PINCFGy values ------------------------------------------------ */
/* Bit 7: Reserved */
/* DRVSTR: Output Driver Strength Selection */
/** DRVSTR: Output Driver Strength Selection */
#define PORT_PINCFG_DRVSTR (1 << 6)
/* Bit [5:3]: Reserved */
/* PULLEN: Pull Enable */
/** PULLEN: Pull Enable */
#define PORT_PINCFG_PULLEN (1 << 2)
/* INEN: Input Enable */
/** INEN: Input Enable */
#define PORT_PINCFG_INEN (1 << 1)
/* PMUXEN: Peripheral Multiplexer Enable */
/** PMUXEN: Peripheral Multiplexer Enable */
#define PORT_PINCFG_PMUXEN (1 << 0)
/* --- Convenience enums --------------------------------------------------- */
/* GPIO mode definitions (for convenience) */
/** @defgroup gpio_direction GPIO Pin direction
@ingroup gpio_defines
@li Input
@li Output
@li InOut
@{*/
#define GPIO_MODE_INPUT 0x00
#define GPIO_MODE_OUTPUT 0x01
@ -253,7 +225,6 @@ enum port_mux {
/**@}*/
/** @defgroup gpio_cnf GPIO mode configuration
@ingroup gpio_defines
@li Float
@li PullDown
@li PullUp
@ -265,16 +236,10 @@ enum port_mux {
#define GPIO_CNF_AF 0x03
/**@}*/
/* --- Function prototypes ------------------------------------------------- */
BEGIN_DECLS
void gpio_mode_setup(uint32_t gpioport, uint8_t mode, uint8_t cnf, uint32_t gpios);
void gpio_set_af(uint32_t gpioport, uint8_t af, uint32_t gpios);
/** @ingroup gpio_control
* @{ */
void gpio_set(uint32_t gpioport, uint32_t gpios);
void gpio_clear(uint32_t gpioport, uint32_t gpios);
uint32_t gpio_get(uint32_t gpioport, uint32_t gpios);

View File

@ -1,32 +1,9 @@
/** @defgroup gpio_defines
*
* @ingroup SAMD
*
/** @addtogroup port_file IO Port API
* @ingroup peripheral_apis
* @brief <b>Access functions for the SAMD I/O Controller</b>
*
* @date 10 April 2020
*
* LGPL License Terms @ref lgpl_license
*
*/
/*
* This file is part of the libopencm3 project.
*
* Copyright (C) 2020 Gwenhael Goavec-Merou <gwenhael.goavec-merou@trabucayre.com>
*
* This library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library. If not, see <http://www.gnu.org/licenses/>.
* @copyright SPDX: LGPL-3.0-or-later
* @author 2020 Gwenhael Goavec-Merou <gwenhael.goavec-merou@trabucayre.com>
*/
/**@{*/
@ -43,7 +20,6 @@
* @param[in] gpios Any combinaison of pins may be
* specified by OR'ing then together.
*/
void gpio_mode_setup(uint32_t gpioport, uint8_t mode, uint8_t cnf, uint32_t gpios)
{
uint32_t reg = PORT_WRCONFIG_WRPINCFG;