GPIO使用参考
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); }