mirror of https://github.com/ARMmbed/mbed-os.git
423 lines
12 KiB
C
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
|