blob: e4e837a9afe09a753cdde0f929605b666680a71d [file] [log] [blame]
/****************************************************************************
* arch/arm/src/nrf52/hardware/nrf52_gpio.h
*
* 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.
*
****************************************************************************/
#ifndef __ARCH_ARM_SRC_NRF52_HARDWARE_NRF52_GPIO_H
#define __ARCH_ARM_SRC_NRF52_HARDWARE_NRF52_GPIO_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <stdint.h>
#include "hardware/nrf52_memorymap.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#ifdef CONFIG_NRF52_HAVE_PORT1
# define NRF52_GPIO_NPORTS 2
# define NRF52_GPIO_PORT0 0
# define NRF52_GPIO_PORT1 1
#else
# define NRF52_GPIO_PORT0 0
# define NRF52_GPIO_NPORTS 1
#endif
#define NRF52_GPIO_NPINS 32
/* Register offsets *********************************************************/
#define NRF52_GPIO_OUT_OFFSET 0x0504 /* Write GPIO port */
#define NRF52_GPIO_OUTSET_OFFSET 0x0508 /* Set individual bits in GPIO port */
#define NRF52_GPIO_OUTCLR_OFFSET 0x050c /* Clear individual bits in GPIO port */
#define NRF52_GPIO_IN_OFFSET 0x0510 /* Read GPIO port */
#define NRF52_GPIO_DIR_OFFSET 0x0514 /* Direction of GPIO pins */
#define NRF52_GPIO_DIRSET_OFFSET 0x0518 /* DIR set register */
#define NRF52_GPIO_DIRCLR_OFFSET 0x051c /* DIR clear register */
#define NRF52_GPIO_LATCH_OFFSET 0x0520 /* Latch register */
#define NRF52_GPIO_DETECTMODE_OFFSET 0x0524 /* Select between default DETECT signal behaviour and LDETECT mode */
#define NRF52_GPIO_PIN_CNF_OFFSET(n) (0x0700 + (n << 2))
/* Register addresses *******************************************************/
#define NRF52_GPIO0_OUT (NRF52_GPIO_P0_BASE + NRF52_GPIO_OUT_OFFSET)
#define NRF52_GPIO0_OUTSET (NRF52_GPIO_P0_BASE + NRF52_GPIO_OUTSET_OFFSET)
#define NRF52_GPIO0_OUTCLR (NRF52_GPIO_P0_BASE + NRF52_GPIO_OUTCLR_OFFSET)
#define NRF52_GPIO0_IN (NRF52_GPIO_P0_BASE + NRF52_GPIO_IN_OFFSET)
#define NRF52_GPIO0_DIR (NRF52_GPIO_P0_BASE + NRF52_GPIO_DIR_OFFSET)
#define NRF52_GPIO0_DIRSET (NRF52_GPIO_P0_BASE + NRF52_GPIO_DIRSET_OFFSET)
#define NRF52_GPIO0_DIRCLR (NRF52_GPIO_P0_BASE + NRF52_GPIO_DIRCLR_OFFSET)
#define NRF52_GPIO0_CNF(n) (NRF52_GPIO_P0_BASE + NRF52_GPIO_PIN_CNF_OFFSET(n))
#ifdef CONFIG_NRF52_HAVE_PORT1
# define NRF52_GPIO1_OUT (NRF52_GPIO_P1_BASE + NRF52_GPIO_OUT_OFFSET)
# define NRF52_GPIO1_OUTSET (NRF52_GPIO_P1_BASE + NRF52_GPIO_OUTSET_OFFSET)
# define NRF52_GPIO1_OUTCLR (NRF52_GPIO_P1_BASE + NRF52_GPIO_OUTCLR_OFFSET)
# define NRF52_GPIO1_IN (NRF52_GPIO_P1_BASE + NRF52_GPIO_IN_OFFSET)
# define NRF52_GPIO1_DIR (NRF52_GPIO_P1_BASE + NRF52_GPIO_DIR_OFFSET)
# define NRF52_GPIO1_DIRSET (NRF52_GPIO_P1_BASE + NRF52_GPIO_DIRSET_OFFSET)
# define NRF52_GPIO1_DIRCLR (NRF52_GPIO_P1_BASE + NRF52_GPIO_DIRCLR_OFFSET)
# define NRF52_GPIO1_CNF(n) (NRF52_GPIO_P1_BASE + NRF52_GPIO_PIN_CNF_OFFSET(n))
#endif
/* Register bit definitions *************************************************/
#define GPIO_DETECTMODE_DEFAULT (0)
#define GPIO_DETECTMODE_LDETECT (1)
#define GPIO_CNF_DIR (1 << 0) /* Bit 0: Pin direction */
#define GPIO_CNF_INPUT (1 << 1) /* Bit 1: Input buffer disconnect */
#define GPIO_CNF_PULL_SHIFT (2)
#define GPIO_CNF_PULL_MASK (0x3 << GPIO_CNF_PULL_SHIFT)
# define GPIO_CNF_PULL_DISABLED (0 << GPIO_CNF_PULL_SHIFT)
# define GPIO_CNF_PULL_DOWN (1 << GPIO_CNF_PULL_SHIFT)
# define GPIO_CNF_PULL_UP (3 << GPIO_CNF_PULL_SHIFT)
#define GPIO_CNF_DRIVE_SHIFT (8)
#define GPIO_CNF_DRIVE_MASK (0x7 << GPIO_CNF_DRIVE_SHIFT)
# define GPIO_CNF_DRIVE_S0S1 (0 << GPIO_CNF_DRIVE_SHIFT)
# define GPIO_CNF_DRIVE_H0S1 (1 << GPIO_CNF_DRIVE_SHIFT)
# define GPIO_CNF_DRIVE_S0H1 (2 << GPIO_CNF_DRIVE_SHIFT)
# define GPIO_CNF_DRIVE_H0H1 (3 << GPIO_CNF_DRIVE_SHIFT)
# define GPIO_CNF_DRIVE_D0S1 (4 << GPIO_CNF_DRIVE_SHIFT)
# define GPIO_CNF_DRIVE_D0H1 (5 << GPIO_CNF_DRIVE_SHIFT)
# define GPIO_CNF_DRIVE_S0D1 (6 << GPIO_CNF_DRIVE_SHIFT)
# define GPIO_CNF_DRIVE_H0D1 (7 << GPIO_CNF_DRIVE_SHIFT)
#define GPIO_CNF_SENSE_SHIFT (16)
#define GPIO_CNF_SENSE_MASK (0x3 << GPIO_CNF_SENSE_SHIFT)
# define GPIO_CNF_SENSE_DISABLED (0 << GPIO_CNF_SENSE_SHIFT)
# define GPIO_CNF_SENSE_HIGH (2 << GPIO_CNF_SENSE_SHIFT)
# define GPIO_CNF_SENSE_LOW (3 << GPIO_CNF_SENSE_SHIFT)
#endif /* __ARCH_ARM_SRC_NRF52_HARDWARE_NRF52_GPIO_H */