Skip to main content

7.5.13.1 Port User Guide

Basic Overview

The Port subsystem is a subsystem on the MCU that configures the functions and attributes of PINs.

List of PIN Names Corresponding to PIN Numbers in the Port_Func Module

The columns in the following table have the following meanings:

  • PIN Index: PIN index used in the Port submodule;
  • PIN Name: The name of the PIN;
  • GPIO Number: The number used to obtain the GPIO controller address offset and GPIO controller register offset;
PIN IndexPIN NameGPIO Number
0FUSA_ERR0GPIO_MCU[0]
1FUSA_ERR1GPIO_MCU[1]
2PPS_INOUTGPIO_MCU[2]
3LIN1_TXDGPIO_MCU[3]
4LIN2_TXDGPIO_MCU[4]
5CAN0_TXGPIO_MCU[5]
6CAN1_TXGPIO_MCU[6]
7CAN2_TXGPIO_MCU[7]
8CAN3_TXGPIO_MCU[8]
9CAN4_TXGPIO_MCU[9]
10CAN5_TXGPIO_MCU[10]
11CAN6_TXGPIO_MCU[11]
12CAN7_TXGPIO_MCU[12]
13CAN8_TXGPIO_MCU[13]
14CAN9_TXGPIO_MCU[14]
15SPI2_CSN1GPIO_MCU[15]
16SPI2_CSN0GPIO_MCU[16]
17SPI2_MOSIGPIO_MCU[17]
18SPI2_MISOGPIO_MCU[18]
19SPI2_SCLKGPIO_MCU[19]
20SPI3_CSN0GPIO_MCU[20]
21SPI3_CSN1GPIO_MCU[21]
22SPI3_MOSIGPIO_MCU[22]
23SPI3_MISOGPIO_MCU[23]
24SPI3_SCLKGPIO_MCU[24]
25SPI4_CSN0GPIO_MCU[25]
26SPI4_CSN1GPIO_MCU[26]
27SPI4_MOSIGPIO_MCU[27]
28SPI4_MISOGPIO_MCU[28]
29SPI4_SCLKGPIO_MCU[29]
30SPI5_CSN0GPIO_MCU[30]
31SPI5_CSN1GPIO_MCU[31]
32SPI5_MOSIGPIO_MCU[32]
33SPI5_MISOGPIO_MCU[33]
34SPI5_SCLKGPIO_MCU[34]
35SPI6_CSN0GPIO_MCU[35]
36SPI6_CSN1GPIO_MCU[36]
37SPI6_MOSIGPIO_MCU[37]
38SPI6_MISOGPIO_MCU[38]
39SPI6_SCLKGPIO_MCU[39]
40XSPI_MOSI_IO0GPIO_MCU[40]
41XSPI_MISO_IO1GPIO_MCU[41]
42XSPI_WP_IO2GPIO_MCU[42]
43XSPI_HOLD_IO3GPIO_MCU[43]
44XSPI_OCT_IO4GPIO_MCU[44]
45XSPI_OCT_IO5GPIO_MCU[45]
46XSPI_OCT_IO6GPIO_MCU[46]
47XSPI_OCT_IO7GPIO_MCU[47]
48XSPI_SCLKGPIO_MCU[48]
49XSPI_SCLK_INVGPIO_MCU[49]
50XSPI_DQSGPIO_MCU[50]
51EMAC_TX_CLKGPIO_MCU[51]
52EMAC_TX_ENGPIO_MCU[52]
53EMAC_TX_D3GPIO_MCU[53]
54EMAC_TX_D2GPIO_MCU[54]
55EMAC_TX_D1GPIO_MCU[55]
56EMAC_TX_D0GPIO_MCU[56]
57EMAC_RX_CLKGPIO_MCU[57]
58EMAC_RX_DVGPIO_MCU[58]
59EMAC_RX_D3GPIO_MCU[59]
60EMAC_RX_D2GPIO_MCU[60]
61EMAC_RX_D1GPIO_MCU[61]
62EMAC_RX_D0GPIO_MCU[62]
63XSPI_CSNGPIO_MCU[63]
64XSPI_RST_NGPIO_MCU[64]
65XSPI_ECC_FAILGPIO_MCU[65]
66XSPI_HYP_INTGPIO_MCU[66]
67BIFSPI_CSNGPIO_MCU[67]
68BIFSPI_SCLKGPIO_MCU[68]
69BIFSPI_MOSIGPIO_MCU[69]
70BIFSPI_MISOGPIO_MCU[70]
71PMIC_ERR0GPIO_MCU[71]
72JTG_TCKGPIO_MCU[72]
73JTG_TRSTNGPIO_MCU[73]
74JTG_TMSGPIO_MCU[74]
75JTG_TDIGPIO_MCU[75]
76JTG_TDOGPIO_MCU[76]
77EMAC_MDCGPIO_MCU[77]
78EMAC_MDIOGPIO_MCU[78]
79ReservedN/A
80I2C6_SCLGPIO_MCU[79]
81I2C6_SDAGPIO_MCU[80]
82I2C7_SCLGPIO_MCU[81]
83I2C7_SDAGPIO_MCU[82]
84I2C8_SCLGPIO_MCU[83]
85I2C8_SDAGPIO_MCU[84]
86PWM0_IOGPIO_MCU[85]
87PWM1_IOGPIO_MCU[86]
88CAN0_RXGPIO_AON[0]
89CAN1_RXGPIO_AON[1]
90CAN2_RXGPIO_AON[2]
91CAN3_RXGPIO_AON[3]
92CAN4_RXGPIO_AON[4]
93CAN5_RXGPIO_AON[5]
94CAN6_RXGPIO_AON[6]
95CAN7_RXGPIO_AON[7]
96CAN8_RXGPIO_AON[8]
97CAN9_RXGPIO_AON[9]
98LIN1_RXDGPIO_AON[10]
99LIN2_RXDGPIO_AON[11]
100ReservedN/A
101ReservedN/A
102ReservedN/A
103ReservedN/A
104ReservedN/A
105WAKEUP_IOGPIO_AON[12]
PIN IndexPIN NameGPIO Number
0PPS_IN0GPIO_MCU[0]
1PPS_OUTGPIO_MCU[1]
2PPS_IN1GPIO_MCU[2]
3VALEO_USS_DATA_F0_ENGPIO_MCU[3]
4CAN1_TXGPIO_MCU[4]
5CAN2_TXGPIO_MCU[5]
6CAN3_TXGPIO_MCU[6]
7CAN4_TXGPIO_MCU[7]
8CAN5_TXGPIO_MCU[8]
9CAN6_TXGPIO_MCU[9]
10CAN7_TXGPIO_MCU[10]
11UART8_TXGPIO_MCU[11]
12VALEO_USS_DATA_F2_ENGPIO_MCU[12]
13CAN_1042_STBGPIO_MCU[13]
14UART11_TXGPIO_MCU[14]
15CAN10_TXGPIO_MCU[15]
16VALEO_USS_DATA_R5_ENGPIO_MCU[16]
17VALEO_USS_DATA_R2_ENGPIO_MCU[17]
18POC_BOOST_PWR_ENGPIO_MCU[18]
19USS_PWM4GPIO_MCU[19]
20VALEO_USS_DATA_R3_ENGPIO_MCU[20]
21SPI13_MISOGPIO_MCU[21]
22SPI13_SCLKGPIO_MCU[22]
23VALEO_USS_DATA_F3_ENGPIO_MCU[23]
24MCU_PERI_PWRGPIO_MCU[24]
25CAN5_STBGPIO_MCU[25]
26VALEO_USS_NINTGPIO_MCU[26]
27CAN8_TXGPIO_MCU[27]
28CAN9_TXGPIO_MCU[28]
29SPI6_CSN0GPIO_MCU[29]
30SPI6_MOSIGPIO_MCU[30]
31SPI6_MISOGPIO_MCU[31]
32SPI6_SCLKGPIO_MCU[32]
33VALEO_USS_SPI_SDIGPIO_MCU[33]
34VALEO_USS_SPI_CSNGPIO_MCU[34]
35VALEO_USS_SPI_SCLKGPIO_MCU[35]
36VALEO_USS_SPI_SDOGPIO_MCU[36]
37SPI13_CSN1GPIO_MCU[37]
38SPI13_CSN0GPIO_MCU[38]
39SPI13_MOSIGPIO_MCU[39]
40MCU_GPS_RESETGPIO_MCU[40]
41SPI4_CSN0GPIO_MCU[41]
42SPI4_CSN1GPIO_MCU[42]
43SPI4_MOSIGPIO_MCU[43]
44SPI4_MISOGPIO_MCU[44]
45SPI4_SCLKGPIO_MCU[45]
46HSM_UART_RXDGPIO_MCU[46]
47HSM_UART_TXDGPIO_MCU[47]
48BYPASS_MUX_ENGPIO_MCU[48]
49MCU_EXIO_RSTGPIO_MCU[49]
50DES4_POC_ENGPIO_MCU[50]
51PWM3_IOGPIO_MCU[51]
52BY_ADAS_DES_PWR_ENGPIO_MCU[52]
53ADAS_DES_PWR_ENGPIO_MCU[53]
54PMIC_ERR7GPIO_MCU[54]
55PMIC_ERR8GPIO_MCU[55]
56PMIC_ERR9GPIO_MCU[56]
57LEDPWR_ENGPIO_MCU[57]
58PMIC_ERR0GPIO_MCU[58]
59PMIC_ERR1GPIO_MCU[59]
60PMIC_ERR2GPIO_MCU[60]
61PMIC_ERR3GPIO_MCU[61]
62PMIC_ERR4GPIO_MCU[62]
63SYS_MONO_INTGPIO_MCU[63]
64EXT_MON_INTGPIO_MCU[64]
65I2C10_SCLGPIO_MCU[65]
66I2C10_SDAGPIO_MCU[66]
67MCU_EXIO_INTGPIO_MCU[67]
68TMP_ALERTGPIO_MCU[68]
69I2C12_SCLGPIO_MCU[69]
70I2C12_SDAGPIO_MCU[70]
71I2C13_SCLGPIO_MCU[71]
72I2C13_SDAGPIO_MCU[72]
73I2C14_SCLGPIO_MCU[73]
74I2C14_SDAGPIO_MCU[74]
75XSPI_CSNGPIO_MCU[75]
76XSPI_RST_NGPIO_MCU[76]
77XSPI_ECC_FAILGPIO_MCU[77]
78DDR_PWROKGPIO_MCU[78]
79EMAC_MDCGPIO_MCU[79]
80EMAC_MDIOGPIO_MCU[80]
81ReservedN/A
82EMAC2_TX_CLKGPIO_MCU[82]
83EMAC2_TX_ENGPIO_MCU[83]
84EMAC2_TX_D3GPIO_MCU[84]
85EMAC2_TX_D2GPIO_MCU[85]
86EMAC2_TX_D1GPIO_MCU[86]
87EMAC2_TX_D0GPIO_MCU[87]
88EMAC2_RX_CLKGPIO_MCU[88]
89EMAC2_RX_DVGPIO_MCU[89]
90EMAC2_RX_D3GPIO_MCU[90]
91EMAC2_RX_D2GPIO_MCU[91]
92EMAC2_RX_D1GPIO_MCU[92]
93EMAC2_RX_D0GPIO_MCU[93]
94XSPI_SCLKGPIO_MCU[94]
95XSPI_SCLK_INVGPIO_MCU[95]
96XSPI_DQSGPIO_MCU[96]
97XSPI_MOSI_IO0GPIO_MCU[97]
98XSPI_MISO_IO1GPIO_MCU[98]
99XSPI_WP_IO2GPIO_MCU[99]
100XSPI_HOLD_IO3GPIO_MCU[100]
101XSPI_OCT_IO4GPIO_MCU[101]
102XSPI_OCT_IO5GPIO_MCU[102]
103XSPI_OCT_IO6GPIO_MCU[103]
104XSPI_OCT_IO7GPIO_MCU[104]
105WAKE_INHGPIO_AON[0]
106IMUPWR_ENGPIO_AON[1]
107MCU_PWR_KEEPIOGPIO_AON[2]
108MCUPWR_VR5510_INTGPIO_AON[3]
109EFUSE_PWR_ENGPIO_AON[4]
110CAN8_RXGPIO_AON[5]
111CAN9_RXGPIO_AON[6]
112CAN10_RXGPIO_AON[7]
113SPI8_CSN1GPIO_AON[8]
114MAIN_PWR_EN_MGPIO_AON[9]
115MAIN_PRE_PWR_EN_MGPIO_AON[10]
116DRAM_PWR_EN_MGPIO_AON[11]
117MAIN_DRAM_PRE_PWR_EN_MGPIO_AON[12]
118SPI8_CSN0GPIO_AON[13]
119SPI8_SCLKGPIO_AON[14]
120SPI8_MOSIGPIO_AON[15]
121SPI8_MISOGPIO_AON[16]
122VALEO_USS_PWR_CH_ENGPIO_AON[17]
123USSPWR_ENGPIO_AON[18]
124GPSPWR_ENGPIO_AON[19]
125UART11_RXGPIO_AON[20]
126ReservedN/A
127ReservedN/A
128ReservedN/A
129ReservedN/A
130UART8_RXGPIO_AON[25]
131CAN1_RXGPIO_AON[26]
132CAN2_RXGPIO_AON[27]
133CAN3_RXGPIO_AON[28]
134ReservedN/A
135ReservedN/A
136ReservedN/A
137ReservedN/A
138ReservedN/A
139ReservedN/A
140ReservedN/A
141CAN4_RXGPIO_AON[36]
142CAN5_RXGPIO_AON[37]
143CAN6_RXGPIO_AON[38]
144CAN7_RXGPIO_AON[39]
145FUSA_ERR0GPIO_AON[40]
146FUSA_ERR1GPIO_AON[41]

Port_Func Module

The Port_Func module is a module provided by D-Robotics for initializing configuration/operating GPIOs for all PINs under a functional module.

Example of Configuring PIN Functions Using the Port_Func Module

Code Example

For usage examples, refer to samples/Spi/SPI_sample/Spi_sample.c. The basic usage logic is:

...
#include <Port_Func.h>

...

/* Configure Pin for SPI5 */
Port_SetFunctionPins(PORT_FUNC_SPI5);

...

Peripheral Configurations Provided by the Port_Func Module

The default peripheral PIN configurations provided by D-Robotics are recorded in McalCdd/Port/inc/Port_Func.h, defined by an enum type:

...

typedef enum PinFunctions {
PORT_FUNC_UART4,
PORT_FUNC_UART5,
PORT_FUNC_UART6,
PORT_FUNC_SPI2,
PORT_FUNC_SPI3,
PORT_FUNC_SPI4,
PORT_FUNC_SPI5,
PORT_FUNC_SPI6,
PORT_FUNC_SPI7,
PORT_FUNC_CAN0,
PORT_FUNC_CAN1,
PORT_FUNC_CAN2,
PORT_FUNC_CAN3,
PORT_FUNC_CAN4,
PORT_FUNC_CAN5,
PORT_FUNC_CAN6,
PORT_FUNC_CAN7,
PORT_FUNC_CAN8,
PORT_FUNC_CAN9,
PORT_FUNC_I2C6,
PORT_FUNC_I2C7,
PORT_FUNC_I2C8,
PORT_FUNC_I2C9,
PORT_FUNC_PWM0,
PORT_FUNC_PWM1,
PORT_FUNC_PWM2,
PORT_FUNC_PWM3,
PORT_FUNC_PWM4,
PORT_FUNC_PWM5,
PORT_FUNC_PWM6,
PORT_FUNC_PWM7,
PORT_FUNC_PWM8,
PORT_FUNC_PWM9,
PORT_FUNC_PWM10,
PORT_FUNC_PWM11,
PORT_FUNC_PPS_IN0,
PORT_FUNC_PPS_IN1,
PORT_FUNC_PPS_IN2,
PORT_FUNC_PPS_OUT,
PORT_FUNC_EMAC,
PORT_FUNC_MAX,
} PinFunc_e;

...

typedef enum PinFunctions {
/* uart8 - uart11*/
PORT_FUNC_UART8,
PORT_FUNC_UART9,
PORT_FUNC_UART10,
PORT_FUNC_UART11,
/* spi4 - spi13*/
PORT_FUNC_SPI4,
PORT_FUNC_SPI5,
PORT_FUNC_SPI6,
PORT_FUNC_SPI7,
PORT_FUNC_SPI8,
PORT_FUNC_SPI9,
PORT_FUNC_SPI10,
PORT_FUNC_SPI11,
PORT_FUNC_SPI12,
PORT_FUNC_SPI13,
/* can0 - can15*/
PORT_FUNC_CAN0,
...
PORT_FUNC_CAN15,
/* i2c10 - i2c14*/
PORT_FUNC_I2C10,
PORT_FUNC_I2C11,
PORT_FUNC_I2C12,
PORT_FUNC_I2C13,
PORT_FUNC_I2C14,
/* pwm0 - pwm31*/
PORT_FUNC_PWM0,
...
PORT_FUNC_PWM31,
/* PPS_IN0 - PPS_OUT */
PORT_FUNC_PPS_IN0,
PORT_FUNC_PPS_IN1,
PORT_FUNC_PPS_IN2,
PORT_FUNC_PPS_OUT,
PORT_FUNC_EMAC,
PORT_FUNC_MAX,
} PinFunc_e;

Example of Using GPIO Operations in Port_Func

The GPIO interface provided by Port_Func uses the PinIdx from the List of PIN Names Corresponding to PIN Numbers in the Port_Func Module

Code Example

For usage examples, refer to samples/Gpio/src/Gpio_sample.c. The basic usage logic is:

    /* Configure "PinIdx" PIN as GPIO function */
RetVal = Port_SetGpioByIndex(PinIdx);

/* Configure "PinIdx" PIN direction as OUTPUT and set output level to Level */
RetVal = Port_GpioDirectionOutput(PinIdx, Level);

/* Configure "PinIdx" PIN direction as INPUT */
RetVal = Port_GpioDirectionInput(PinIdx);

/* Read the value of "PinIdx" PIN */
RetVal = Port_GpioGetValue(PinIdx);

...

Note
  • The value returned by the "Port_GpioGetValue" function may be affected by the PinCtrl configuration when the external PIN is floating, causing the read value to vary;

  • The GPIO interface provided by the Port_Func module checks the GPIO being operated on. Some PINs are not allowed to be operated. For details, refer to the Gpio_Blacklist array in McalCdd/Port/src/Port_Func.c:

    const uint8_t Gpio_Blacklist[] = {
    0, /* S100 Power related pins */
    5, /* S100 debug uart tx */
    38, /* S100 Power related pins */
    15, /* S100 Power related pins */
    68, /* S100 Power related pins */
    69, /* S100 Power related pins */
    71, /* S100 Power related pins */
    80, /* S100 Power related pins */
    81, /* S100 Power related pins */
    82, /* S100 Power related pins */
    83, /* S100 Power related pins */
    AON_PIN_NUM(0), /* S100 debug uart rx */
    AON_PIN_NUM(12), /* S100 Power related pins */
    };
    const uint8_t Gpio_Blacklist[] = {
    29, 16, 30, 31, 32, /* V0P1 limit: SPI6 group */
    11, 16, 18, 34, 36, /* debug/power related */
    67, 68, /* power related */
    46, 47, /* hsm uart rx/tx */
    54, 55, 56, 58, 59, 60, 61, 62, 63, 64, 65, 66,
    75, 76, 77, 78, 81,
    94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
    AON_PIN_NUM(0), AON_PIN_NUM(1), AON_PIN_NUM(2),
    AON_PIN_NUM(3), AON_PIN_NUM(4),
    AON_PIN_NUM(21), AON_PIN_NUM(22), AON_PIN_NUM(29),
    AON_PIN_NUM(35), AON_PIN_NUM(40), AON_PIN_NUM(41),
    AON_PIN_NUM(8), /* sleep key pin */
    AON_PIN_NUM(25), /* debug uart rx */
    };