请选择 进入手机版 | 继续访问电脑版
搜索

121

主题

128

帖子

665

积分

网站编辑

Rank: 8Rank: 8

积分
665
发表于 2021-5-22 13:57:12 1963 浏览 0 回复

iTOP-6818开发板GPIO扩展

本帖最后由 翠花儿 于 2021-5-22 14:00 编辑

实现 GPIO 扩展,先弄清楚“复用”的概念,将调用这些 GPIO 的驱动去掉配置,重新编译,加到自己的驱动中,就可以实现扩展的 GPIO 的输入和输出。
另外必须要先看“ iTOP-4418-GPIO 输入输出和例程”。
1 内核配置
在底板上,引出的扩展口有 J6(camera 口),J38(GPIO/CAN/485),另外如果自己做底板,假如不使用 WIFI 等模块,还可以将 WIFI 等模块的 IO 口扩展成 GPIO。
这里只介绍 J6 和 J38 上的方便扩展的 IO 口。
如下图所示,是摄像头接口。这里带有“SDA”,“SCL”字样的两个引脚为总线引脚,不建议更改为 GPIO 接口。其中的红色字样比如“MCU_TSI1_D5”为关键词。
若想确定该引脚是否可复用为 GPIO 接口,则在核心板原理图“topeet_s5p4418_coreborad_v1_2.pdf”搜索该关键词,可以得到两个结果。一个是在板对板连接器,另一个便是在 MCU 上的引脚。如下图所示

在 MCU 上用户可以看到该引脚对应的其他功能,对应红框中的位置可以发现,该引脚可复用为 GPIO,编号为 GPIOE1,那么宏定义为(PAD_GPIO_C+13)。其他的引脚所对应编号用户可根据此方法来依次查询。
如果这个 GPIO,被其它驱动调用,需要将驱动去掉配置,如下图所示,要将摄像头的驱动去掉,这样就可以在这些接口当做 GPIO。
Device Drivers        --->
Multimedia support --->
Video capture adapters (去掉)
需要将 OV5640 和 TVP5150 同时去掉,这两个摄像头的驱动都在 Video capture adapters 下。
如下图所示,将 RS485、Relay 驱动去掉,也可以扩展一些 GPIO 口。
Device Drivers        --->
Character devices        --->
2 GPIO复用统计
作者为了方便大家扩展,将网络标号,管脚号等统计出来,方便大家扩展。
Camera
MCU_CAM1_MCLK
GPIOC13
SA13/GPIOC13/PWM1/SDnINT2
MCU_CAM1_RST
GPIOC5
SA5/GPIOC5/UARTnCTS1/SDWP0
MCU_CAMERA_PN
GPIOC4
SA4/GPIOC4/UARTnDCD1/SDnINT0
MCU_TSI1_D5
GPIOE1
GPIOE1/VID0[5]/TSIDATA1[5]
MCU_TSI1_D7
GPIOE3
GPIOE3/VID0[7]/TSIDATA1[7]
MCU_TSI1_D6
GPIOE2
GPIOE2/VID0[6]/TSIDATA1[6]
MCU_TSI1_D4
GPIOE0
GPIOE0/VID0[4]/TSIDATA1[4]
MCU_TSI1_D3
GPIOD31
GPIOD31/VID0[3]/TSIDATA1[3]
MCU_TSI1_D2
GPIOD30
GPIOD30/VID0[2]/TSIDATA1[2]
MCU_TSI1_D1
GPIOD29
GPIOD29/VID0[1]/TSIDATA1[1]
MCU_TSI1_CLK
GPIOE4
GPIOE4/VICLK0/TSICLK1
MCU_TSI1_D0
GPIOD28
GPIOD28/VID0[0]/TSIDATA1[0]/SA24
MCU_TSI1_DP
GPIOE6
GPIOE6/VIVSYNC0/TSIDP1
MCU_TSI1_SYNC
GPIOE5
GPIOE5/VIHSYNC0/TSISYNC1
GPIO/CAN/485
MCU_NNFOE
GPIOB16
nNFOE0/nNFOE1/GPIOB16
MCU_SPI1_FRM
GPIOC10
SA10/GPIOC10/SPIFRM2
MCU_SPI1_RXD
GPIOC11
SA11/GPIOC11/SPIRXD2/USB2.0OTG_DrvVBUS
MCU_SPI1_TXD
GPIOC12
SA12/GPIOC12/SPITXD2/SDnRST2
MCU_SPI1_CLK
GPIOC9
SA9/GPIOC9/SPICLK2/PDMStrobe
MCU_CAM1_HYNC
GPIOE13
GPIOE13/GMAC_COL/VIHSYNC1
MCU_UART1_RX
GPIOD15
GPIOD15/UARTRXD1/ISO7816
MCU_UART1_TX
GPIOD19
GPIOD19/UARTTXD1/ISO7816/SDnCD2
MCU_CAMERA_PD
GPIOC6
SA6/GPIOC6/UARTnRTS1/SDnCD0
GPIOC0
GPIOC0
SA0/GPIOC0/TSIERR0
有了接口对应的 GPIO 编号,便可以写程序调用这些 GPIO 了。
3 驱动修改
用户可以根据自己实际需求,在“第五十二章 iTOP-4418-GPIO 输入输出和例程”其中驱动例程基础上修改。
其中的代码
#define GPIOIN        (PAD_GPIO_B + 18)
如果要替换为操作多个 GPIO,可以定义为数组,例如:
static int gpiostest[]={ PAD_GPIO_C+13,PAD_GPIO_C+5,PAD_GPIO_C+4,PAD_GPIO_E+1,PAD_GPIO_E+3, PAD_GPIO_E+2,PAD_GPIO_E+0,PAD_GPIO_D+31,PAD_GPIO_D+30,PAD_GPIO_D+29,PAD_GPIO_E+4,PA D_GPIO_D+28,PAD_GPIO_E+6,PAD_GPIO_E+5,PAD_GPIO_B+16, PAD_GPIO_C+10,PAD_GPIO_C+11,PAD_GPIO_C+12,PAD_GPIO_C+9,
};
在使用 gpio_request/free 函数申请和释放 GPIO;使用gpio_direction_input/gpio_direction_output 函数设置为输入和输出模式; gpio_get_value/gpio_set_value 函数获取 GPIO 值和设置 GPIO 输出等等,只需要做一个循环即可,例如 gpio_request 函数申请 GPIO 代码如下:
for(i=0 ; i<NUMBER ; i++){
ret = gpio_request(gpiostest, "gpiotest"); if
(ret) {
printk("request GPIO %d for gpio failed\n", gpiostest);
return ret;
}
}

其它操作也是类似。
至此,4418 和 6818 的 GPIO 扩展以及 GPIO 输入输出全部介绍完毕。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

登录或注册

官方客服

QQ:2551456065

官方QQ群

195631883

扫一扫关注迅为公众号

群号652692981

 
快速回复 返回顶部 返回列表