blob: ef7ca4d53d9aabd67bd4ce78385ee344fda1b08c [file] [log] [blame]
/****************************************************************************
* arch/arm/src/gd32f4/hardware/gd32f4xx_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_GD32_HARDWARE_GD32F4XX_GPIO_H
#define __ARCH_ARM_SRC_GD32_HARDWARE_GD32F4XX_GPIO_H
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* GPIOx(x=A,B,C,D,E,F,G,H,I) definitions ***********************************/
#define GD32_GPIOA_BASE (GD32_GPIO_BASE + 0x00000000)
#define GD32_GPIOB_BASE (GD32_GPIO_BASE + 0x00000400)
#define GD32_GPIOC_BASE (GD32_GPIO_BASE + 0x00000800)
#define GD32_GPIOD_BASE (GD32_GPIO_BASE + 0x00000c00)
#define GD32_GPIOE_BASE (GD32_GPIO_BASE + 0x00001000)
#define GD32_GPIOF_BASE (GD32_GPIO_BASE + 0x00001400)
#define GD32_GPIOG_BASE (GD32_GPIO_BASE + 0x00001800)
#define GD32_GPIOH_BASE (GD32_GPIO_BASE + 0x00001c00)
#define GD32_GPIOI_BASE (GD32_GPIO_BASE + 0x00002000)
/* Register Offsets *********************************************************/
#define GD32_GPIO_CTL_OFFSET 0x0000 /* GPIO port control register offfset */
#define GD32_GPIO_OMODE_OFFSET 0x0004 /* GPIO port output mode register offfset */
#define GD32_GGPIO_OSPD_OFFSET 0x0008 /* GPIO port output speed register offfset */
#define GD32_GPIO_PUD_OFFSET 0x000c /* GPIO port pull-up/pull-down register offfset */
#define GD32_GPIO_ISTAT_OFFSET 0x0010 /* GPIO port input status register offfset */
#define GD32_GPIO_OCTL_OFFSET 0x0014 /* GPIO port output control register offfset */
#define GD32_GPIO_BOP_OFFSET 0x0018 /* GPIO port bit operation register offfset */
#define GD32_GPIO_LOCK_OFFSET 0x001c /* GPIO port configuration lock register offfset */
#define GD32_GPIO_AFSEL0_OFFSET 0x0020 /* GPIO alternate function selected register 0 offfset */
#define GD32_GPIO_AFSEL1_OFFSET 0x0024 /* GPIO alternate function selected register 1 offfset */
#define GD32_GPIO_BC_OFFSET 0x0028 /* GPIO bit clear register offfset */
#define GD32_GPIO_TG_OFFSET 0x002c /* GPIO port bit toggle register offfset */
/* Register Addresses *******************************************************/
#define GD32_GPIOA GD32_GPIOA_BASE
#define GD32_GPIOB GD32_GPIOB_BASE
#define GD32_GPIOC GD32_GPIOC_BASE
#define GD32_GPIOD GD32_GPIOD_BASE
#define GD32_GPIOE GD32_GPIOE_BASE
#define GD32_GPIOF GD32_GPIOF_BASE
#define GD32_GPIOG GD32_GPIOG_BASE
#define GD32_GPIOH GD32_GPIOH_BASE
#define GD32_GPIOI GD32_GPIOI_BASE
#define GD32_GPIO_CTL(gpiox) ((gpiox)+GD32_GPIO_CTL_OFFSET) /* GPIO port control register */
#define GD32_GPIO_OMODE(gpiox) ((gpiox)+GD32_GPIO_OMODE_OFFSET) /* GPIO port output mode register */
#define GD32_GPIO_OSPD(gpiox) ((gpiox)+GD32_GGPIO_OSPD_OFFSET) /* GPIO port output speed register */
#define GD32_GPIO_PUD(gpiox) ((gpiox)+GD32_GPIO_PUD_OFFSET) /* GPIO port pull-up/pull-down register */
#define GD32_GPIO_ISTAT(gpiox) ((gpiox)+GD32_GPIO_ISTAT_OFFSET) /* GPIO port input status register */
#define GD32_GPIO_OCTL(gpiox) ((gpiox)+GD32_GPIO_OCTL_OFFSET) /* GPIO port output control register */
#define GD32_GPIO_BOP(gpiox) ((gpiox)+GD32_GPIO_BOP_OFFSET) /* GPIO port bit operation register */
#define GD32_GPIO_LOCK(gpiox) ((gpiox)+GD32_GPIO_LOCK_OFFSET) /* GPIO port configuration lock register */
#define GD32_GPIO_AFSEL0(gpiox) ((gpiox)+GD32_GPIO_AFSEL0_OFFSET) /* GPIO alternate function selected register 0 */
#define GD32_GPIO_AFSEL1(gpiox) ((gpiox)+GD32_GPIO_AFSEL1_OFFSET) /* GPIO alternate function selected register 1 */
#define GD32_GPIO_BC(gpiox) ((gpiox)+GD32_GPIO_BC_OFFSET) /* GPIO bit clear register */
#define GD32_GPIO_TG(gpiox) ((gpiox)+GD32_GPIO_TG_OFFSET) /* GPIO port bit toggle register */
/* Register Bitfield Definitions ********************************************/
/* GPIO port control register */
#define GPIO_MODE_INPUT (0) /* Input mode */
#define GPIO_MODE_OUTPUT (1) /* Output mode */
#define GPIO_MODE_AF (2) /* Alternate function mode */
#define GPIO_MODE_ANALOG (3) /* Analog mode */
#define GPIO_MODE_SHIFT(n) ((n) << 1)
#define GPIO_MODE_MASK(n) (3 << GPIO_MODE_SHIFT(n))
#define GPIO_MODE0_MASK (3 << GPIO_MODE_SHIFT(0))
#define GPIO_MODE1_MASK (3 << GPIO_MODE_SHIFT(1))
#define GPIO_MODE2_MASK (3 << GPIO_MODE_SHIFT(2))
#define GPIO_MODE3_MASK (3 << GPIO_MODE_SHIFT(3))
#define GPIO_MODE4_MASK (3 << GPIO_MODE_SHIFT(4))
#define GPIO_MODE5_MASK (3 << GPIO_MODE_SHIFT(5))
#define GPIO_MODE6_MASK (3 << GPIO_MODE_SHIFT(6))
#define GPIO_MODE7_MASK (3 << GPIO_MODE_SHIFT(7))
#define GPIO_MODE8_MASK (3 << GPIO_MODE_SHIFT(8))
#define GPIO_MODE9_MASK (3 << GPIO_MODE_SHIFT(9))
#define GPIO_MODE10_MASK (3 << GPIO_MODE_SHIFT(10))
#define GPIO_MODE11_MASK (3 << GPIO_MODE_SHIFT(11))
#define GPIO_MODE12_MASK (3 << GPIO_MODE_SHIFT(12))
#define GPIO_MODE13_MASK (3 << GPIO_MODE_SHIFT(13))
#define GPIO_MODE14_MASK (3 << GPIO_MODE_SHIFT(14))
#define GPIO_MODE15_MASK (3 << GPIO_MODE_SHIFT(15))
/* GPIO port output mode register */
#define GPIO_OTYPE_OD(n) (1 << (n)) /* 1=Output open drain mode */
#define GPIO_OTYPE_PP(n) (0) /* 0=Output push pull mode */
/* GPIO port output speed register */
#define GPIO_OSPEED_2MHZ (0) /* Output max speed 2MHz */
#define GPIO_OSPEED_25MHZ (1) /* Output max speed 25MHz */
#define GPIO_OSPEED_50MHZ (2) /* Output max speed 50MHz */
#define GPIO_OSPEED_200MHZ (3) /* Output max speed 200MHz */
#define GPIO_OSPEED_SHIFT(n) ((n) << 1)
#define GPIO_OSPEED_MASK(n) (3 << GPIO_OSPEED_SHIFT(n))
#define GPIO_OSPEED0_MASK (3 << GPIO_OSPEED_SHIFT(0))
#define GPIO_OSPEED1_MASK (3 << GPIO_OSPEED_SHIFT(1))
#define GPIO_OSPEED2_MASK (3 << GPIO_OSPEED_SHIFT(2))
#define GPIO_OSPEED3_MASK (3 << GPIO_OSPEED_SHIFT(3))
#define GPIO_OSPEED4_MASK (3 << GPIO_OSPEED_SHIFT(4))
#define GPIO_OSPEED5_MASK (3 << GPIO_OSPEED_SHIFT(5))
#define GPIO_OSPEED6_MASK (3 << GPIO_OSPEED_SHIFT(6))
#define GPIO_OSPEED7_MASK (3 << GPIO_OSPEED_SHIFT(7))
#define GPIO_OSPEED8_MASK (3 << GPIO_OSPEED_SHIFT(8))
#define GPIO_OSPEED9_MASK (3 << GPIO_OSPEED_SHIFT(9))
#define GPIO_OSPEED10_MASK (3 << GPIO_OSPEED_SHIFT(10))
#define GPIO_OSPEED11_MASK (3 << GPIO_OSPEED_SHIFT(11))
#define GPIO_OSPEED12_MASK (3 << GPIO_OSPEED_SHIFT(12))
#define GPIO_OSPEED13_MASK (3 << GPIO_OSPEED_SHIFT(13))
#define GPIO_OSPEED14_MASK (3 << GPIO_OSPEED_SHIFT(14))
#define GPIO_OSPEED15_MASK (3 << GPIO_OSPEED_SHIFT(15))
/* GPIO port pull-up/pull-down register */
#define GPIO_PUPD_NONE (0) /* Floating mode, no pull-up and pull-down resistors */
#define GPIO_PUPD_PULLUP (1) /* With pull-up resistor */
#define GPIO_PUPD_PULLDOWN (2) /* With pull-up resistor */
#define GPIO_PUPD_SHIFT(n) ((n) << 1)
#define GPIO_PUPD_MASK(n) (3 << GPIO_PUPD_SHIFT(n))
#define GPIO_PUPD0_MASK (3 << GPIO_PUPD_SHIFT(0))
#define GPIO_PUPD1_MASK (3 << GPIO_PUPD_SHIFT(1))
#define GPIO_PUPD2_MASK (3 << GPIO_PUPD_SHIFT(2))
#define GPIO_PUPD3_MASK (3 << GPIO_PUPD_SHIFT(3))
#define GPIO_PUPD4_MASK (3 << GPIO_PUPD_SHIFT(4))
#define GPIO_PUPD5_MASK (3 << GPIO_PUPD_SHIFT(5))
#define GPIO_PUPD6_MASK (3 << GPIO_PUPD_SHIFT(6))
#define GPIO_PUPD7_MASK (3 << GPIO_PUPD_SHIFT(7))
#define GPIO_PUPD8_MASK (3 << GPIO_PUPD_SHIFT(8))
#define GPIO_PUPD9_MASK (3 << GPIO_PUPD_SHIFT(9))
#define GPIO_PUPD10_MASK (3 << GPIO_PUPD_SHIFT(10))
#define GPIO_PUPD11_MASK (3 << GPIO_PUPD_SHIFT(11))
#define GPIO_PUPD12_MASK (3 << GPIO_PUPD_SHIFT(12))
#define GPIO_PUPD13_MASK (3 << GPIO_PUPD_SHIFT(13))
#define GPIO_PUPD14_MASK (3 << GPIO_PUPD_SHIFT(14))
#define GPIO_PUPD15_MASK (3 << GPIO_PUPD_SHIFT(15))
/* GPIO port input status register */
#define GPIO_ISTAT(n) (1 << (n))
/* GPIO port output control register */
#define GPIO_OCTL(n) (1 << (n))
/* GPIO port bit operation register */
#define GPIO_BOP_SET(n) (1 << (n))
#define GPIO_BOP_CLEAR(n) (1 << ((n)+16))
/* GPIO port configuration lock register */
#define GPIO_LOCK(n) (1 << (n))
#define GPIO_LOCK_LKK (1 << 16) /* Lock key */
/* GPIO alternate function selected register 0/1 */
#define GPIO_AF_SHIFT(n) ((n) << 2)
#define GPIO_AF_MASK(n) (15 << GPIO_AF_SHIFT(n))
#define GPIO_AFSEL0_SEL0_MASK (15 << GPIO_AF_SHIFT(0))
#define GPIO_AFSEL0_SEL1_MASK (15 << GPIO_AF_SHIFT(1))
#define GPIO_AFSEL0_SEL2_MASK (15 << GPIO_AF_SHIFT(2))
#define GPIO_AFSEL0_SEL3_MASK (15 << GPIO_AF_SHIFT(3))
#define GPIO_AFSEL0_SEL4_MASK (15 << GPIO_AF_SHIFT(4))
#define GPIO_AFSEL0_SEL5_MASK (15 << GPIO_AF_SHIFT(5))
#define GPIO_AFSEL0_SEL6_MASK (15 << GPIO_AF_SHIFT(6))
#define GPIO_AFSEL0_SEL7_MASK (15 << GPIO_AF_SHIFT(7))
#define GPIO_AFSEL1_SEL8_MASK (15 << GPIO_AF_SHIFT(0))
#define GPIO_AFSEL1_SEL9_MASK (15 << GPIO_AF_SHIFT(1))
#define GPIO_AFSEL1_SEL10_MASK (15 << GPIO_AF_SHIFT(2))
#define GPIO_AFSEL1_SEL11_MASK (15 << GPIO_AF_SHIFT(3))
#define GPIO_AFSEL1_SEL12_MASK (15 << GPIO_AF_SHIFT(4))
#define GPIO_AFSEL1_SEL13_MASK (15 << GPIO_AF_SHIFT(5))
#define GPIO_AFSEL1_SEL14_MASK (15 << GPIO_AF_SHIFT(6))
#define GPIO_AFSEL1_SEL15_MASK (15 << GPIO_AF_SHIFT(7))
/* GPIO bit clear register */
#define GPIO_BC_SET(n) (1 << (n))
/* GPIO port bit toggle register */
#define GPIO_TG_SET(n) (1 << (n))
/* GPIO pin definitions */
#define GPIO_PIN(n) (1 << (n)) /* Bit n: Pin n, n=0-15 */
#endif /* __ARCH_ARM_SRC_GD32_HARDWARE_GD32F4XX_GPIO_H */