GPIO使用参考

Version 1.1


1. GPIO NUM 与PAD对应表

请查看硬件线路图上GPIO 的PAD name,查找这个表格,对应的num 就是要操作的GPIO的num。

例如:硬件线路图上的一个GPIO 是PAD_TTL0,如果要操作这个GPIO,对应的num=17。

开放使用的GPIO列表,请查看硬件资料的HW CheckList.xlsx的GPIO List页面里面的表格,举例如下:


2. RTOS使用GPIO

GPIO驱动路径:rtk/proj/sc/driver/sysdriver/gpio/

在相应的product config中修改mak文件的配置,需要启用选项CONFIG_GPIO_SUPPORT = TRUE编译GPIO驱动。


2.1. GPIO API

GPIO代码路径:rtk/proj/sc/driver/sysdriver/gpio

API名称 描述
int camdriver_gpio_request (struct gpio_chip *chip, unsigned offset) 注册GPIO, driver会将此PAD模式设为GPIO模式
int camdriver_gpio_set (struct gpio_chip *chip, unsigned offset, int value) 设置GPIO 高电位或者低电位(没有切换output mode)
int camdriver_gpio_get (struct gpio_chip *chip, unsigned offset) 获取当前GPIO状态为高电位或者低电位
int camdriver_gpio_direction_input (struct gpio_chip *chip, unsigned offset) 设置GPIO为input mode
int camdriver_gpio_direction_output (struct gpio_chip *chip, unsigned offset, int value) 设置GPIO为output mode, 并配置高电位或低电位
int camdriver_gpio_to_irq (struct gpio_chip *chip, unsigned offset) 注册GPIO中断

2.2. 范例

  • 设置GPIO 为Input模式, nNum请参考硬件资料中的HW Checklist

    camdriver_gpio_request(NULL, nNum);

    camdriver_gpio_direction_input(NULL, nNum);

  • 设置GPIO 为Output模式

    camdriver_gpio_request(NULL, nNum);

    camdriver_gpio_direction_output(NULL, nNum, 1); //高电位

    camdriver_gpio_direction_output(NULL, nNum, 0); //低电位

  • 使用中断Demo

    static void _GPIOInputISR(u32 eIntNum, void* p1)
    {
        CamOsPrintf("!!!!!gpio isr callback: number: %u", (u32)p1);
    }
    
    void GPIOISR(void)
    {
        u32 nNum = 47;
        int irq, ret;
    
        camdriver_gpio_request(NULL, nNum);
        camdriver_gpio_direction_input(NULL, nNum);
        MDrv_GPIO_Set_POLARITY(nNum, 0); //Falling:0 or Rasing:1
        irq = camdriver_gpio_to_irq(NULL, nNum);
    
        if(irq<0)
        {
            CamOsPrintf("gpio to irq FAIL!!\r\n");
        }
        else
        {
            ret = CamOsIrqRequest(irq, _GPIOInputISR, "GPIO_ISR", (void *) nNum);
        }
        CamOsPrintf("ret:%d\r\n", ret);
    }