Sigmastar_GPIO使用参考

REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 04/15/2024

    1. 概述

    General Purpose Input Output (通用输入/输出)简称为GPIO。GPIO 采用标准的LINUX框架,能够使用统一的接口来操作gpio。

    图1-1 GPIO框架图

    GPIO的框架如上图,中间层是 gpiolib,用于管理系统中的 GPIO。gpiolib 汇总了 GPIO 的通用操作,根据 GPIO 的特性,gpiolib 对上(其他 Drivers)提供的一套统一通用的操作 GPIO 的软件接口。对下,Gpiolib 提供了针对不同芯片操作的一套 framework,针对不同芯片,只需要实现drv_gpio_io.c,然后使用 Gpiolib 提供的注册函数,将其挂接到 Gpiolib 上。

    2. 关键字说明

    2.1. GPIO Index

    原理图上GPIO的Pad name可以在表1-1中查找到对应的GPIO Index,GPIO Index作为软件操作GPIO相关函数的输入参数使用。

    例如:希望操作的GPIO为 PAD_SPI0_DO,根据表1-1中的内容找到对应的GPIO Index为12。

    表1-1:GPIO Index与PAD对应表

    Pad Name GPIO Index Pad Name GPIO Index Pad Name GPIO Index
    PAD_SD1_IO1 0 PAD_SD1_IO0 1 PAD_SD1_IO5 2
    PAD_SD1_IO4 3 PAD_SD1_IO3 4 PAD_SD1_IO2 5
    PAD_SD1_IO6 6 PAD_UART1_RX 7 PAD_UART1_TX 8
    PAD_SPI0_CZ 9 PAD_SPI0_CK 10 PAD_SPI0_DI 11
    PAD_SPI0_DO 12 PAD_PWM0 13 PAD_PWM1 14
    PAD_SD_CLK 15 PAD_SD_CMD 16 PAD_SD_D0 17
    PAD_SD_D1 18 PAD_SD_D2 19 PAD_SD_D3 20
    PAD_USB_CID 21 PAD_PM_SD_CDZ 22 PAD_PM_IRIN 23
    PAD_PM_UART_RX 24 PAD_PM_UART_TX 25 PAD_PM_GPIO0 26
    PAD_PM_GPIO1 27 PAD_PM_GPIO2 28 PAD_PM_GPIO3 29
    PAD_PM_GPIO4 30 PAD_PM_GPIO7 31 PAD_PM_GPIO8 32
    PAD_PM_GPIO9 33 PAD_PM_SPI_CZ 34 PAD_PM_SPI_DI 35
    PAD_PM_SPI_WPZ 36 PAD_PM_SPI_DO 37 PAD_PM_SPI_CK 38
    PAD_PM_SPI_HLD 39 PAD_PM_LED0 40 PAD_PM_LED1 41
    PAD_FUART_RX 42 PAD_FUART_TX 43 PAD_FUART_CTS 44
    PAD_FUART_RTS 45 PAD_GPIO0 46 PAD_GPIO1 47
    PAD_GPIO2 48 PAD_GPIO3 49 PAD_GPIO4 50
    PAD_GPIO5 51 PAD_GPIO6 52 PAD_GPIO7 53
    PAD_GPIO14 54 PAD_GPIO15 55 PAD_I2C0_SCL 56
    PAD_I2C0_SDA 57 PAD_I2C1_SCL 58 PAD_I2C1_SDA 59
    PAD_SR_IO00 60 PAD_SR_IO01 61 PAD_SR_IO02 62
    PAD_SR_IO03 63 PAD_SR_IO04 64 PAD_SR_IO05 65
    PAD_SR_IO06 66 PAD_SR_IO07 67 PAD_SR_IO08 68
    PAD_SR_IO09 69 PAD_SR_IO10 70 PAD_SR_IO11 71
    PAD_SR_IO12 72 PAD_SR_IO13 73 PAD_SR_IO14 74
    PAD_SR_IO15 75 PAD_SR_IO16 76 PAD_SR_IO17 77
    PAD_SAR_GPIO3 78 PAD_SAR_GPIO2 79 PAD_SAR_GPIO1 80
    PAD_SAR_GPIO0 81

    3. Uboot用法介绍

    3.1. Uboot config配置说明

    [*] SigmaStar drivers  --->
    
        [*]   SigmaStar GPIO
        [*]   SigmaStar padmux
    

    3.2. Dts参数配置说明

          gpio: gpio {
                compatible = "sstar,gpio";
                status = "okay";
          };
    
    属性 描述 备注
    compatible 用于匹配驱动进行驱动注册 禁止修改
    status 驱动开关 根据需要配置,ok/disabled

    3.3. Uboot cmd参数说明

    <input|set|clear|toggle> <pin> → input/set/clear/toggle the specified pin

    gpio status [-a] [<bank> | <pin>] → show [all / claimed] GPIOs

    cmd 参数 说明
    input pin 设置引脚号为pin的引脚为gpio input mode
    set pin 设置引脚号为pin的引脚为gpio output high mode
    clear pin 设置引脚号为pin的引脚为gpio output low mode
    toggle pin 将引脚号为pin的引脚电平翻转
    status pin 查看引脚号为pin的引脚的状态

    3.4. Uboot cmd使用实例

    gpio input <gpio#> → gpio input 69 // gpio69 set as input

    gpio set <gpio#> → gpio set 10 // gpio10 set as output high

    gpio clear <gpio#> → gpio clear 49 // gpio49 set as output low

    gpio toggle <gpio#> → gpio toggle 49 // gpio49 level toggle

    gpio status <gpio#> → gpio status 20 // gpio20 status

    4. Kernel用法介绍

    4.1. Kernel config配置说明

    Device Drivers  --->
    
        [*] GPIO Support  --->
            [*]   /sys/class/gpio/... (sysfs interface)
    
        [*] SStar SoC platform drivers  --->
            [*]   GPIO driver
            [*]   PADMUX driver
    

    4.2. Dts参数配置说明

            gpio: gpio {
                compatible = "sstar,gpio";
                #gpio-cells = <2>;
                status = "okay";
            };
    
    属性 描述 备注
    compatible 用于匹配驱动进行驱动注册 禁止修改
    #gpio-cells 声明设备节点gpio cells的个数 配置为2表示第一个cell为gpio号,第二个cell表示gpio有效电平
    status 驱动开关 根据需要配置,ok/disabled

    4.3. Userspace命令使用说明

    4.3.1. export/unexport文件接口

    Userspace可以通过sysfs接口操作GPIO

    /sys/class/gpio对应的源码位于driver/gpio/gpiolib-sysfs.c

    /sys/class/gpio目录下的包含export/unexport、gpioN、gpio_chipN三种文件:

    文件名 读写权限 描述
    export wo GPIO Index 在用户空间申请某个GPIO的控制权
    unexport wo GPIO Index 在用户空间移除某个GPIO的控制权
    gpioN ro 包含具体GPIO的direction、value等信息
    gpio_chipN ro 指代GPIO控制器

    • /sys/class/gpio/export 文件属性为只允许写不允许读,用户程序通过写入GPIO的编号来向内核申请将某个GPIO的控制权导出到用户空间(sysfs),前提是没有内核代码申请这个GPIO端口,如用户申请编号为12的GPIO的命令:

      # echo 12 > export
      

      上述操作会为GPIO Index为12的GPIO创建一个节点gpio12,此时/sys/class/gpio目录下边生成一个gpio12的目录,如下图所示:

    • /sys/class/gpio/unexport 文件属性也为只允许写不允许读,和export的效果相反,用户通过写入GPIO的编号来移除用户空间(sysfs)的接口。如移除gpio12文件夹的操作命令:

      # echo 12 > unexport
      

      上述操作将会移除gpio12这个节点,如下图所示:

    4.3.2. /sys/class/gpio/gpioN

    /sys/class/gpio/gpioN 指代某个具体的gpio端口,里边有如下属性文件:

    文件名 读写权限 描述
    direction rw in 输入模式,value不可写
    out 输出模式,value可写
    high 输出状态,默认高电平状态,value可写
    low 输出状态,默认低电平状态,value可写
    value rw 1 高电平状态
    0 低电平状态
    edge rw none disable gpio中断
    rising 使能gpio中断,并设置为上升沿触发
    falling 使能gpio中断,并设置为下降沿触发
    both 使能gpio中断,并设置为双边沿触发

    direction 表示gpio端口的方向,读取结果是in或out,读取命令为:

    # cat direciton
    

    value 表示gpio引脚的电平,0表示低电平,1表示高电平;读取命令为:

    # cat value
    

    可以对direction进行写操作,命令为:

    # echo in > direction
    

    # echo out > direction
    

    如果direction被配置为输出(out),电平默认为低,同时value是可写的,操作命令为:

    # echo 1 > value
    
    # echo 0 > value
    

    direction写入low或high时不仅可以设置为输出还可以设置指定的输出电平。操作命令为:

    # echo high > direction
    

    # echo low > direction
    

    当然如果内核不支持或者内核代码不愿意,将不会存在这个属性,比如内核调用了gpio_export(N,0)就表示内核不愿意修改gpio端口方向属性。

    edge 表示是否使能gpio中断,并设置触发模式,支持上升沿触发、下降沿触发、双边沿触发:

    # cat edge
    

    可以对edge进行写操作,命令为:

    # echo none > edge
    # echo rising > edge
    # echo falling > edge
    # echo both > edge
    

    如果需要使能某只脚的中断,需要先将该脚设置为输入状态,并设置触发模式,则可以调用poll(2)函数监听该中断,中断触发后poll(2)函数就会返回。

    4.3.3. /sys/class/sstar/msys

    LINUX GPIO框架暂时未支持GPIO上下拉和驱动能力调节相关配置,在LINUX的GPIO标准框架外,我们又增加了另外的文件接口用于操作GPIO的上下拉和调节驱动能力。如需支持此功能,首先需要打开 CONFIG_MSYS_GPIO 配置,该配置位于menuconfig中:

    Device Drivers  --->
    
        [*] SStar SoC platform drivers  --->
            [*]   support GPIO pull and driving modify
            [*]   support padmux modify and verify
    

    /sys/class/sstar/msys对应的源代码位于driver/sstar/msys/ms_msys.c

    设置上拉/下拉之前需要先将GPIO设置为输入状态,输出状态上拉/下拉是没法测量的:

    引脚设置为输入状态后,进入sys/class/sstar/msys文件夹:

    • gpio_pull 可以写入up和down

      文件名 读写权限 描述
      gpio_pull rw up 上拉模式
      down 下拉模式

      查看GPIO当前的pull 状态是pull up / pull down / pull off:

      1. # echo 50 >  gpio_pull
      2. # cat gpio_pull
      

      如果输入非法的GPIO Index 和GPIO Name,则会报错:

      设置上拉和设置下拉的命令为:

      1. # echo 50 up > gpio_pull
      2. # echo 50 down > gpio_pull
      

      设置后查看gpio_pull的状态,如下图,50表示GPIO Index,PAD_OUTN_RX0_CH3表示GPIO Name。

      1. # cat gpio_pull
      

      如果输入非法的GPIO Index 和GPIO Name,则会报错:

      检查具体BIT是否被正确写入,可以根据GPIO_Mapping_Table,查找对应的PAD(如下图GPIO INDEX:50)。当pull up的时候PE bit位为1,PS bit位为0;pull down的时候PE bit位为1,PS bit位为0。具体操作命令为:

      1. # riu_r 0x103e 0x34
      

      查看riu_r返回值的BIT6、BIT11

    • gpio_drive 可以写入驱动的等级

      文件名 读写权限 描述
      gpio_drive rw 0~8 设置GPIO的驱动等级

      当前平台中GPIO的驱动能力等级可查阅GPIO_Mapping_Table。

      查看GPIO的初始驱动能力等级的命令位:(也可以直接使用GPIO43的名称PAD_OUTP_RX0_CH0)

      1. # echo 43 > gpio_drive
      2. # cat gpio_drive
      

      如果输入非法的GPIO Index 和GPIO Name,则会报错:

      设置驱动能力之前将GPIO设置为高电平输出状态方便测量,设置命令为:

      1. # echo 43 1 > gpio_drive
      

      43为GPIO Index,1为驱动能力等级,对应4mA

      设置驱动能力之后查看gpio_driver的状态,如下图,设置GPIO Index为43的引脚的驱动能力为4mA成功。

      1. # cat gpio_drive
      

      检查具体BIT是否被正确写入,可以根据GPIO_Mapping_Table,查找对应的PAD(如下图GPIO INDEX:50)。当设置驱动等级为1时,[103E56]#7 ~ #8为01。具体操作命令为:

      1. # riu_r 0x103e 0x2B
      

      查看riu_r返回值的BIT7、BIT8

    • mux_verify 用于确认复用冲突

      文件名 读写权限 描述
      mux_verify rw 0~8 确认复用功能是否冲突

      以操作PAD_I2C1_SDA的PINMUX_FOR_I2C1_MODE_1为例:

      1. # echo PAD_I2C1_SDA I2C1_MODE_1 > /sys/class/sstar/msys/mux_verify
      2. # cat mux_verify
      

      如下显示则表示设置正确,当前无复用冲突

      如下显示则表示当前存在复用问题

      Please check register value of [bank: 0x103E, offset: 0x00, mask: 0x0008]
      Correct value is not 0x0008, but current value is 0x0008
      

      有问题的寄存器地址:[bank: 0x103E, offset: 0x00, mask: 0x0008],正确的值是不为0x0008,因为mask是0x0008(BIT3==0x0008),所以BIT3要为0,但现在BIT3等于1,BIT3需要清掉

      Please check register value of [bank: 0x103C, offset: 0x53, mask: 0x0003]
      Correct value is 0x0001, but current value is 0x0000
      

      有问题的寄存器地址:[bank: 0x103C, offset: 0x53, mask: 0x0003],正确的值是0x0001,因为mask是0x0003(BIT1|BIT0==0x0003),所以BIT0要为1,BIT1要为0

    • mux_modify 用于配置复用功能

      文件名 读写权限 描述
      mux_modify rw 0~8 配置复用功能

      以操作PAD_I2C1_SDA的PINMUX_FOR_I2C1_MODE_1为例:

    4.4. 复用功能介绍

    4.4.1. 复用功能使用说明

    当需要使用GPIO的复用功能时候,首先需要获取所要操作的PIN脚的Name、所要复用的Tmux Mode,将他们配置在xxx-padmux.dtsi中:

    1. <PAD_I2C1_SCL      PINMUX_FOR_I2C1_MODE_1      MDRV_PUSE_I2C1_SCL>
    2. <PAD_I2C1_SDA      PINMUX_FOR_I2C1_MODE_1      MDRV_PUSE_I2C1_SDA>
    

    如上所示,第一列和第二列分别表示Pad Name和Tmux Mode,MDRV_PUSE_XXX可以理解为当前这一组的配置的Name。

    配置的时候需要注意的事项:

    • 一个Pad只能配置一种Mode,不可以一个Pad同时配置多个Mode。

    • 一个Puse只能对应一组配置,否则会造成冲突。

    • 配置的Pad和Mode必须是匹配的。

    • 不允许在驱动中直接进行复用操作,要求复用的配置都集中到xxx_padmux.dtsi。(需要动态调整复用配置的除外,目的是为了方便管理和减少配置冲突)

    4.5. Sample Code

    用户空间代码使能gpio中断请参考sstargpio_poll.c。

    1.    #include <stdio.h>
    2.    #include <stdlib.h>
    3.    #include <unistd.h>
    4.    #include <fcntl.h>
    5.    #include <sys/poll.h>
    6.
    7.    int main(int argc, char *argv[])
    8.    {
    9.        char buff[1024];
    10.        int gpio_id;
    12.        struct pollfd fds[1];
    13.        int gpio_fd = open("/sys/class/gpio/gpio135/value", O_RDONLY);
    14.        if (gpio_fd == -1)
    15.            {printf("gpio open\n");}
    16.        else
    17.            {printf("/sys/class/gpio/gpio135/value\n");}
    18.        fds[0].fd = gpio_fd;
    19.        fds[0].events = POLLPRI;
    20.        int ret = read(gpio_fd, buff, 10);
    21.        if (ret == -1)
    22.            printf("read fail\n");
    23.        else
    24.            printf("read\n");
    25.        while (1)
    26.        {
    27.            printf("revents is %d\n", fds[0].revents);
    28.            ret = poll(fds, 1, -1);
    29.            if (ret == -1)
    30.                printf("poll\n");
    31.
    32.            if (fds[0].revents & POLLPRI)
    33.            {
    34.                ret = lseek(gpio_fd, 0, SEEK_SET);
    35.                if (ret == -1)
    36.                    printf("lseek\n");
    37.                ret = read(gpio_fd, buff, 10);
    38.                if (ret == -1)
    39.                    printf("read\n");
    40.                printf("get interrupt\n");
    41.            }
    42.        }
    43.    }
    

    5. API参考

    5.1. 申请gpio端口

    • 目的

      创建端口为GPIO。

    • 语法

      int gpio_request(unsigned gpio, const char *label)
      
    • 参数

      参数名称 描述
      gpio GPIO Index
      label 具体名称
    • 返回值

      返回值 描述
      0 成功
      other 失败

    5.2. 释放gpio端口

    • 目的

      释放GPIO端口。

    • 语法

      void gpio_free(unsigned gpio)
      
    • 参数

      参数名称 描述
      gpio GPIO Index
    • 返回值

      返回值 描述
      void

    5.3. 设为输入

    • 目的

      标记gpio为输入。

    • 语法

      int gpio_direction_input(unsigned gpio);
      
    • 参数

      参数名称 描述
      gpio GPIO Index
    • 返回值

      返回值 描述
      0 成功
      other 失败

    5.4. 设为输出

    • 目的

      标记gpio为输出。

    • 语法

      int gpio_direction_output(unsigned gpio, int value);
      
    • 参数

      参数名称 描述
      gpio GPIO Index
      value 输出值
    • 返回值

      返回值 描述
      0 成功
      other 失败

    5.5. 获取输入电平

    • 目的

      获取输入引脚的电平。

    • 语法

      int gpio_get_value(unsigned gpio);
      
    • 参数

      参数名称 描述
      gpio GPIO Index
    • 返回值

      返回值 描述
      int 电平值

    5.6. 设置输出电平

    • 目的

      设定输出引脚的电平。

    • 语法

      void gpio_set_value(unsigned gpio, int value);
      
    • 参数

      参数名称 描述
      gpio GPIO Index
      value 输出值
    • 返回值

      返回值 描述
      0 成功
      other 失败

    5.7. 设置引脚为GPIO MODE

    • 目的

      设置引脚为GPIO MODE。

    • 语法

      void sstar_gpio_pad_set(U8 gpio_index);
      
    • 参数

      参数名称 描述
      gpio_index GPIO Index
    • 返回值

      返回值 描述
      void

    5.8. 清除引脚为GPIO MODE

    • 目的

      清除引脚的GPIO MODE。

    • 语法

      void sstar_gpio_pad_clr(U8 gpio_index);
      
    • 参数

      参数名称 描述
      gpio_index GPIO Index
    • 返回值

      返回值 描述
      void

    5.9. 设置引脚的TMUX模式

    • 目的

      设置引脚的TMUX模式。

    • 语法

      U8 sstar_gpio_pad_val_set(U8 gpio_index, U32 pad_mode);
      
    • 参数

      参数名称 描述
      gpio_index GPIO Index
      pad_mode TMUX MODE
    • 返回值

      返回值 描述
      1 输出参数错误
      0 成功

    5.10. 获取引脚的TMUX模式

    • 目的

      该API用于获取某只Pad当前配置的PadMode,前提是这只Pad配置PadMode的时候是通过Padmux接口进行配置,直接操作寄存器进行配置的方式则不会使该API生效。

    • 语法

      U8 sstar_gpio_pad_val_get(U8 gpio_index, U32* pad_mode);
      
    • 参数

      参数名称 描述
      gpio_index Group Index
      pad_mode 获取到的TMUX MODE
    • 返回值

      返回值 描述
      1 输出参数错误
      0 成功

    5.11. 设置引脚的电压模式

    • 目的

      设置输入引脚的电压模式,注意本接口仅在Muffin支持。

    • 语法

      void sstar_gpio_vol_val_set(U8 group, U32 mode);
      
    • 参数

      参数名称 描述
      group Group num (11 Groups in total)
      mode Mode = 0:引脚电压为3.3V; Mode = 1:引脚电压为1.8V
    • 返回值

      返回值 描述
      void

    5.12. 获取引脚状态

    • 目的

      获取引脚的状态。

    • 语法

      U8 sstar_gpio_pad_in_out(U8 gpio_index, U8* pad_in_out);
      
    • 参数

      参数名称 描述
      gpio_index GPIO Index
      pad_in_out 0表示引脚状态为输出,1表示引脚状态为输入
    • 返回值

      返回值 描述
      1 输入参数错误
      0 成功

    5.13. 设置GPIO的上拉功能

    • 目的

      开启指定的GPIO上拉功能。

    • 语法

      U8 sstar_gpio_pull_up(U8 gpio_index);
      
    • 参数

      参数名称 描述
      gpio_index GPIO Index
    • 返回值

      返回值 描述
      0 设置成功
      other 该引脚不支持上拉设置或者输入参数错误

    5.14. 设置GPIO的下拉功能

    • 目的

      开启指定的GPIO下拉功能。

    • 语法

      U8 sstar_gpio_pull_down(U8 gpio_index);
      
    • 参数

      参数名称 描述
      gpio_index GPIO Index
    • 返回值

      返回值 描述
      0 设置成功
      other 该引脚不支持下拉设置或者输入参数错误

    5.15. 关闭GPIO的上/下拉功能

    • 目的

      关闭指定的GPIO上/下拉功能,并切换至悬空状态。

    • 语法

      U8 sstar_gpio_pull_off(U8 gpio_index);
      
    • 参数

      参数名称 描述
      gpio_index GPIO Index
    • 返回值

      返回值 描述
      0 设置成功
      other 该引脚不支持上拉设置或者输入参数错误

    5.16. 获取GPIO的上/下拉状态

    • 目的

      获取指定的GPIO上/下拉状态。

    • 语法

      U8 sstar_gpio_pull_status(U8 gpio_index, U8* pull_status);
      
    • 参数

      参数名称 描述
      gpio_index GPIO Index
      pull_status 获取到的上/下拉状态
    • 返回值

      返回值 描述
      0 获取成功
      1 该引脚不支持上拉设置或者输入参数错误

    5.17. 设置GPIO的驱动能力

    • 目的

      设置指定的GPIO的驱动能力。

    • 语法

      U8 sstar_gpio_drv_set(U8 gpio_index, U8 level);
      
    • 参数

      参数名称 描述
      gpio_index GPIO Index
      level 驱动能力等级
    • 返回值

      返回值 描述
      0 设置成功
      other 该引脚不支持驱动能力设置或者输入参数错误

    5.18. 获取GPIO的驱动能力等级

    • 目的

      获取指定的GPIO的驱动能力等级。

    • 语法

      U8 sstar_gpio_drv_get(U8 gpio_index, U8* level);
      
    • 参数

      参数名称 描述
      gpio_index GPIO Index
      level 获取到的GPIO的驱动能力等级
    • 返回值

      返回值 描述
      0 获取成功
      1 该引脚不支持驱动能力设置或者输入参数错误

    5.19. 获取GPIO的中断号

    • 目的

      获取指定的GPIO的中断号。

    • 语法

      int sstar_gpio_to_irq(U8 gpio_index);
      
    • 参数

      参数名称 描述
      gpio_index GPIO Index
    • 返回值

      返回值 描述
      virq Virq为返回的中断号
      负数或0 失败

    5.20. 获取GPIO Index

    • 目的

      通过GPIO Name获取GPIO Index。

    • 语法

      U8 sstar_gpio_name_to_num(U8* p_name, U8* gpio_index);
      
    • 参数

      参数名称 描述
      p_name GPIO Name
      gpio_index 获取到的GPIO Index
    • 返回值

      返回值 描述
      1 输入参数错误
      0 成功

    5.21. 获取特定PadMode对应的PIN脚

    • 目的

      查询能够使用某一个特定PadMode的所有GPIO脚。

    • 语法

      U32* sstar_gpio_padmode_to_padindex(U32 mode);
      
    • 参数

      参数名称 描述
      mode 所要查询的PadMode
    • 返回值

      返回值 描述
      数组首地址 存放GPIO Index的数组

    5.22. 获取复用到的引脚

    • 目的

      以Puse为检索条件遍历,获取xxx-padmux.dtsi中配置到的Pad。

    • 语法

      int mdrv_padmux_getpad (int Puse);
      
    • 参数

      参数名称 描述
      Puse Puse的宏定义
    • 返回值

      返回值 描述
      PadId 成功获取到padmux.dtsi中的Pad的宏定义
      PAD_UNKNOWN 输入的Puse有误或者padmux.dtsi中没有对应的PadId

    5.23. 获取复用到的Tmux Mode

    • 目的

      以Puse为检索条件遍历,获取xxx-padmux.dtsi中配置到的Tmux Mode。

    • 语法

      int mdrv_padmux_getmode (int Puse);
      
    • 参数

      参数名称 描述
      Puse Puse的宏定义
    • 返回值

      返回值 描述
      PadId 成功获取到padmux.dtsi中的Mode的宏定义
      PAD_UNKNOWN 输入的Puse有误或者padmux.dtsi中没有对应的PadId

    5.24. 获取PUSE的宏定义

    • 目的

      因为PUSE的宏定义遵循一套规则:

      1. 不同IP之间的偏移为0x10000

      2. 同一个IP中不同Channel之间的偏移为0x100

      3. 同一个IP同一个Channel中不同Puse之间的偏移为0x1

      因此可以根据这三个参数获取Puse的宏定义。

    • 语法

      int mdrv_padmux_getpuse (int IP_Index, int Channel_Index, int Pad_Index);
      
    • 参数

      参数名称 描述
      IP_Index Puse所在的IP,可在mdrv_puse.h中查阅
      Channel_Index Puse所在的Channel,可在mdrv_puse.h中查阅
      Pad_Index Puse在channel中的Index,可在mdrv_puse.h中查阅
    • 返回值

      返回值 描述
      Puse 成功获取到padmux.dtsi中的PadId