mbed-os/targets/TARGET_GigaDevice/TARGET_GD32F4XX/TARGET_GD32F450ZI/PinNames.h

423 lines
12 KiB
C

/* mbed Microcontroller Library
* Copyright (c) 2018 GigaDevice Semiconductor Inc.
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed 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 MBED_PINNAMES_H
#define MBED_PINNAMES_H
#include "cmsis.h"
#ifdef __cplusplus
extern "C" {
#endif
/* multiplex GPIO flag */
typedef enum {
MUL0 = 0x100,
MUL1 = 0x200,
MUL2 = 0x300,
MUL3 = 0x400
} MULx;
typedef enum {
PORTA_0 = 0x00,
PORTA_0_MUL0 = PORTA_0 | MUL0,
PORTA_0_MUL1 = PORTA_0 | MUL1,
PORTA_1 = 0x01,
PORTA_1_MUL0 = PORTA_1 | MUL0,
PORTA_1_MUL1 = PORTA_1 | MUL1,
PORTA_2 = 0x02,
PORTA_2_MUL0 = PORTA_2 | MUL0,
PORTA_2_MUL1 = PORTA_2 | MUL1,
PORTA_3 = 0x03,
PORTA_3_MUL0 = PORTA_3 | MUL0,
PORTA_3_MUL1 = PORTA_3 | MUL1,
PORTA_4 = 0x04,
PORTA_4_MUL0 = PORTA_4 | MUL0,
PORTA_5 = 0x05,
PORTA_5_MUL0 = PORTA_5 | MUL0,
PORTA_6 = 0x06,
PORTA_6_MUL0 = PORTA_6 | MUL0,
PORTA_7 = 0x07,
PORTA_7_MUL0 = PORTA_7 | MUL0,
PORTA_7_MUL1 = PORTA_7 | MUL1,
PORTA_7_MUL2 = PORTA_7 | MUL2,
PORTA_8 = 0x08,
PORTA_9 = 0x09,
PORTA_10 = 0x0A,
PORTA_11 = 0x0B,
PORTA_12 = 0x0C,
PORTA_13 = 0x0D,
PORTA_14 = 0x0E,
PORTA_15 = 0x0F,
PORTA_15_MUL0 = PORTA_15 | MUL0,
PORTB_0 = 0x10,
PORTB_0_MUL0 = PORTB_0 | MUL0,
PORTB_0_MUL1 = PORTB_0 | MUL1,
PORTB_1 = 0x11,
PORTB_1_MUL0 = PORTB_1 | MUL0,
PORTB_1_MUL1 = PORTB_1 | MUL1,
PORTB_2 = 0x12,
PORTB_3 = 0x13,
PORTB_3_MUL0 = PORTB_3 | MUL0,
PORTB_4 = 0x14,
PORTB_4_MUL0 = PORTB_4 | MUL0,
PORTB_5 = 0x15,
PORTB_5_MUL0 = PORTB_5 | MUL0,
PORTB_6 = 0x16,
PORTB_7 = 0x17,
PORTB_8 = 0x18,
PORTB_8_MUL0 = PORTB_8 | MUL0,
PORTB_9 = 0x19,
PORTB_9_MUL0 = PORTB_9 | MUL0,
PORTB_10 = 0x1A,
PORTB_11 = 0x1B,
PORTB_12 = 0x1C,
PORTB_13 = 0x1D,
PORTB_14 = 0x1E,
PORTB_14_MUL0 = PORTB_14 | MUL0,
PORTB_14_MUL1 = PORTB_14 | MUL1,
PORTB_15 = 0x1F,
PORTB_15_MUL0 = PORTB_15 | MUL0,
PORTB_15_MUL1 = PORTB_15 | MUL1,
PORTC_0 = 0x20,
PORTC_0_MUL0 = PORTC_0 | MUL0,
PORTC_0_MUL1 = PORTC_0 | MUL1,
PORTC_1 = 0x21,
PORTC_1_MUL0 = PORTC_1 | MUL0,
PORTC_1_MUL1 = PORTC_1 | MUL1,
PORTC_2 = 0x22,
PORTC_2_MUL0 = PORTC_2 | MUL0,
PORTC_2_MUL1 = PORTC_2 | MUL1,
PORTC_3 = 0x23,
PORTC_3_MUL0 = PORTC_3 | MUL0,
PORTC_3_MUL1 = PORTC_3 | MUL1,
PORTC_4 = 0x24,
PORTC_4_MUL0 = PORTC_4 | MUL0,
PORTC_5 = 0x25,
PORTC_5_MUL0 = PORTC_5 | MUL0,
PORTC_6 = 0x26,
PORTC_6_MUL0 = PORTC_6 | MUL0,
PORTC_7 = 0x27,
PORTC_7_MUL0 = PORTC_7 | MUL0,
PORTC_8 = 0x28,
PORTC_8_MUL0 = PORTC_8 | MUL0,
PORTC_9 = 0x29,
PORTC_9_MUL0 = PORTC_9 | MUL0,
PORTC_10 = 0x2A,
PORTC_10_MUL0 = PORTC_10 | MUL0,
PORTC_11 = 0x2B,
PORTC_11_MUL0 = PORTC_11 | MUL0,
PORTC_12 = 0x2C,
PORTC_13 = 0x2D,
PORTC_14 = 0x2E,
PORTC_15 = 0x2F,
PORTD_0 = 0x30,
PORTD_1 = 0x31,
PORTD_2 = 0x32,
PORTD_3 = 0x33,
PORTD_4 = 0x34,
PORTD_5 = 0x35,
PORTD_6 = 0x36,
PORTD_7 = 0x37,
PORTD_8 = 0x38,
PORTD_9 = 0x39,
PORTD_10 = 0x3A,
PORTD_11 = 0x3B,
PORTD_12 = 0x3C,
PORTD_13 = 0x3D,
PORTD_14 = 0x3E,
PORTD_15 = 0x3F,
PORTE_0 = 0x40,
PORTE_1 = 0x41,
PORTE_2 = 0x42,
PORTE_3 = 0x43,
PORTE_4 = 0x44,
PORTE_5 = 0x45,
PORTE_6 = 0x46,
PORTE_7 = 0x47,
PORTE_8 = 0x48,
PORTE_9 = 0x49,
PORTE_10 = 0x4A,
PORTE_11 = 0x4B,
PORTE_12 = 0x4C,
PORTE_13 = 0x4D,
PORTE_14 = 0x4E,
PORTE_15 = 0x4F,
PORTF_0 = 0x50,
PORTF_1 = 0x51,
PORTF_2 = 0x52,
PORTF_3 = 0x53,
PORTF_4 = 0x54,
PORTF_5 = 0x55,
PORTF_6 = 0x56,
PORTF_7 = 0x57,
PORTF_8 = 0x58,
PORTF_9 = 0x59,
PORTF_10 = 0x5A,
PORTF_11 = 0x5B,
PORTF_12 = 0x5C,
PORTF_13 = 0x5D,
PORTF_14 = 0x5E,
PORTF_15 = 0x5F,
PORTG_0 = 0x60,
PORTG_1 = 0x61,
PORTG_2 = 0x62,
PORTG_3 = 0x63,
PORTG_4 = 0x64,
PORTG_5 = 0x65,
PORTG_6 = 0x66,
PORTG_7 = 0x67,
PORTG_8 = 0x68,
PORTG_9 = 0x69,
PORTG_10 = 0x6A,
PORTG_11 = 0x6B,
PORTG_12 = 0x6C,
PORTG_13 = 0x6D,
PORTG_14 = 0x6E,
PORTG_15 = 0x6F,
PORTH_0 = 0x70,
PORTH_1 = 0x71,
/* ADC internal channels */
ADC_TEMP = 0xF0,
ADC_VREF = 0xF1,
ADC_VBAT = 0xF2,
/* Arduino connector pin definitions */
A0 = PORTC_0,
A1 = PORTA_5,
A2 = PORTC_2,
A3 = PORTC_3,
A4 = PORTA_0, /* PORTB_11 */
A5 = PORTC_5, /* PORTB_10 */
D0 = PORTC_11,
D1 = PORTC_10,
D2 = PORTA_15,
D3 = PORTD_12,
D4 = PORTC_8,
D5 = PORTC_7,
D6 = PORTB_0,
D7 = PORTC_12,
D8 = PORTD_13,
D9 = PORTA_8,
D10 = PORTA_1,
D11 = PORTB_15,
D12 = PORTB_14,
D13 = PORTB_13,
D14 = PORTB_9,
D15 = PORTB_8,
LED1 = PORTF_6,
LED2 = PORTC_13,
LED3 = PORTE_6,
KEY1 = PORTE_5,
KEY2 = PORTE_4,
BUTTON1 = KEY1,
BUTTON2 = KEY2,
SERIAL_TX = PORTC_12,
SERIAL_RX = PORTD_2,
USBTX = SERIAL_TX,
USBRX = SERIAL_RX,
I2C_SCL = PORTB_6,
I2C_SDA = PORTB_7,
SPI_MOSI = PORTB_5,
SPI_MISO = PORTB_4,
SPI_SCK = PORTB_3,
SPI_CS = PORTE_2,
PWM_OUT = D9,
USBFS_VBUS = PORTA_9,
USBFS_DM = PORTA_11,
USBFS_DP = PORTA_12,
USBFS_ID = PORTA_10,
RMII_TX_EN = PORTB_11,
RMII_TXD0 = PORTB_12,
RMII_TXD1 = PORTB_13,
RMII_RXD0 = PORTC_4,
RMII_RXD1 = PORTC_5,
RMII_CRS_DV = PORTA_7,
RMII_MDC = PORTC_1,
RMII_MDIO = PORTA_2,
RMII_INT = PORTB_0,
RMII_REF_CLK = PORTA_1,
NC = (int)0xFFFFFFFF
} PinName;
typedef enum {
/* pin mode */
PIN_MODE_INPUT = 0,
PIN_MODE_OUTPUT = 1,
PIN_MODE_AF = 2,
PIN_MODE_ANALOG = 3,
/* pin output type */
PIN_OTYPE_PP = 0,
PIN_OTYPE_OD = 1,
/* pin pull up/down */
PIN_PUPD_NONE = 0,
PIN_PUPD_PULLUP = 1,
PIN_PUPD_PULLDOWN = 2,
/* pin output speed */
PIN_OSPEED_200MHZ = 1,
PIN_OSPEED_50MHZ = 0, /* set 0 as 50M speed */
PIN_OSPEED_25MHZ = 2,
PIN_OSPEED_2MHZ = 3,
/* pin AFs */
PIN_AF_0 = 0,
PIN_AF_1 = 1,
PIN_AF_2 = 2,
PIN_AF_3 = 3,
PIN_AF_4 = 4,
PIN_AF_5 = 5,
PIN_AF_6 = 6,
PIN_AF_7 = 7,
PIN_AF_8 = 8,
PIN_AF_9 = 9,
PIN_AF_10 = 10,
PIN_AF_11 = 11,
PIN_AF_12 = 12,
PIN_AF_13 = 13,
PIN_AF_14 = 14,
PIN_AF_15 = 15,
} PinFunction;
/* BIT[7:4] port number (0=PORTA, 1=PORTB, 2=PORTC, 3=PORTD, 4=PORTE, 5=PORTD, 6=PORTF, 7=PORTH, )
BIT[3:0] pin number */
#define GD_PORT_GET(X) (((uint32_t)(X) >> 4) & 0xF)
#define GD_PIN_GET(X) (((uint32_t)(X) & 0xF))
/* pin function set and get define start */
/* Get mode, output mode, pull, speed, af function, channel of GPIO pin */
/* void pin_function(PinName pin, int function);
configure the mode, output mode, pull, speed, af function of pins
the parameter function contains the configuration information,show as below
bit 0:2 gpio mode input / output / af / analog
bit 3 output push-pull / open drain
bit 5:4 no pull, pull-up, pull-down
bit 9:6 channel af function
bit 11:10 gpio speed
bit 16:12 channel of adc/timer/dac
bit 17 PWM channel-ON
bit 31:18 reserved
*/
typedef enum {
/* pin mode */
PIN_MODE_SHIFT = 0,
PIN_MODE_MASK = 0x07,
/* pin oty */
PIN_OUTPUT_MODE_SHIFT = 3,
PIN_OUTPUT_MODE_MASK = 0x01,
/* pin pull_up_down */
PIN_PULL_SHIFT = 4,
PIN_PULL_MASK = 0x03,
/* pin seed */
PIN_SPEED_SHIFT = 10,
PIN_SPEED_MASK = 0x03,
/* pin AF */
PIN_REMAP_SHIFT = 6,
PIN_REMAP_MASK = 0x0F,
/* pin channel */
PIN_CHANNEL_SHIFT = 12,
PIN_CHANNEL_MASK = 0x1F,
/* pin PWM channel-ON state */
PIN_CHON_SHIFT = 17,
PIN_CHON_MASK = 0x01,
} PinFunctionDivide;
#define SET_PIN_FUNCTION_MODE(PIN_FUNCTION_MODE) ((int) PIN_FUNCTION_MODE&PIN_MODE_MASK)
#define SET_PIN_FUNCTION_SPEED(PIN_FUNCTION_SPEED) ((int)(PIN_FUNCTION_SPEED&PIN_SPEED_MASK)<<PIN_SPEED_SHIFT)
#define SET_PIN_FUNCTION_AF(PIN_FUNCTION_AF) ((int)(PIN_FUNCTION_AF&PIN_REMAP_MASK)<<PIN_REMAP_SHIFT)
#define SET_PIN_FUNCTION_CHANNEL(PIN_FUNCTION_CHANNEL) ((int)(PIN_FUNCTION_CHANNEL&PIN_CHANNEL_MASK)<<PIN_CHANNEL_SHIFT)
/* configure ADC channel */
#define SET_PIN_FUNCTION_ADC_CHANNEL(PIN_FUNCTION_CHANNEL) (SET_PIN_FUNCTION_CHANNEL(PIN_FUNCTION_CHANNEL) | \
SET_PIN_FUNCTION_MODE(PIN_MODE_ANALOG) )
#define SET_PIN_FUNCTION_DAC_CHANNEL SET_PIN_FUNCTION_ADC_CHANNEL
#define SET_PIN_FUNCTION(PIN_FUNCTION_MODE, PIN_FUNCTION_OUTPUT_MODE, PIN_FUNCTION_PULL, PIN_FUNCTION_REMAP) \
((int)(PIN_FUNCTION_MODE&PIN_MODE_MASK)| \
((PIN_FUNCTION_OUTPUT_MODE&PIN_OUTPUT_MODE_MASK)<<PIN_OUTPUT_MODE_SHIFT) | \
((PIN_FUNCTION_PULL&PIN_PULL_MASK)<<PIN_PULL_SHIFT) | \
((PIN_FUNCTION_REMAP&PIN_REMAP_MASK)<<PIN_REMAP_SHIFT))
#define SET_PWM_PIN_FUNCTION(PIN_FUNCTION_MODE, PIN_FUNCTION_OUTPUT_MODE, PIN_FUNCTION_PULL, PIN_FUNCTION_REMAP, CHANNEL, CHON) \
((int)(PIN_FUNCTION_MODE&PIN_MODE_MASK) | \
((PIN_FUNCTION_OUTPUT_MODE&PIN_OUTPUT_MODE_MASK)<<PIN_OUTPUT_MODE_SHIFT) | \
((PIN_FUNCTION_PULL&PIN_PULL_MASK)<<PIN_PULL_SHIFT) | \
((PIN_FUNCTION_REMAP&PIN_REMAP_MASK)<<PIN_REMAP_SHIFT) | \
((CHANNEL&PIN_CHANNEL_MASK)<<PIN_CHANNEL_SHIFT) | \
((CHON&PIN_CHON_MASK)<<PIN_CHON_SHIFT))
#define GD_PIN_MODE_GET(X) ( X & PIN_MODE_MASK)
#define GD_PIN_OUTPUT_MODE_GET(X) ((X >> PIN_OUTPUT_MODE_SHIFT) & PIN_OUTPUT_MODE_MASK)
#define GD_PIN_PULL_STATE_GET(X) ((X >> PIN_PULL_SHIFT) & PIN_PULL_MASK)
#define GD_PIN_SPEED_GET(X) ((X >> PIN_SPEED_SHIFT) & PIN_SPEED_MASK)
#define GD_PIN_REMAP_GET(X) ((X >> PIN_REMAP_SHIFT) & PIN_REMAP_MASK)
#define GD_PIN_CHANNEL_GET(X) ((X >> PIN_CHANNEL_SHIFT) & PIN_CHANNEL_MASK)
#define GD_PIN_CHON_GET(X) ((X >> PIN_CHON_SHIFT) & PIN_CHON_MASK)
/* pin function set and get define end */
/* defines GPIO pin direction */
typedef enum {
PIN_INPUT = 0,
PIN_OUTPUT
} PinDirection;
/* defines mode types of GPIO pin */
typedef enum {
PullNone = 0,
PullUp = 1,
PullDown = 2,
OpenDrainPullUp = 3,
OpenDrainNoPull = 4,
OpenDrainPullDown = 5,
PushPullNoPull = PullNone,
PushPullPullUp = PullUp,
PushPullPullDown = PullDown,
OpenDrain = OpenDrainPullUp,
PullDefault = PullNone
} PinMode;
#ifdef __cplusplus
}
#endif
#endif