TA的每日心情 | 开心 2018-10-12 13:33 |
---|
签到天数: 183 天 连续签到: 3 天 [LV.7]常住居民III
|
本来以为I2C是比较简单的linux驱动,但是看了linux下的I2C驱动程序框架确实不是一般的麻烦,在这里简单的描述下使用RIoTboard上的I2C接口的I2C通信问题。
首先实验环境,是使用RIoTboard的I2C3接口,即miniHDMI上的I2C接口,连接7寸LCD的触摸屏芯片TSC2007(I2C接口).
通信调试简单步骤:
1.配置menuconfig选项,选在tsc2007驱动,现在想想当时触摸屏芯片选择TSC2007芯片真是幸运,源代码中就用这个芯片的驱动文件,这样就少了很多工作。
2.驱动文件有了,就是tsc2007.c,现在就是配置RIoTboard的I2C通信接口的问题了。
我们在源代码中做如下修改:
添加I2C platform_data:
struct tsc2007_platform_data tsc2007_data = {
.model = 2007,
.x_plate_ohms = 180,
.fuzzx = 0,
.fuzzy = 0,
.fuzzz = 0,
.init_platform_hw = tsc2007_init_hw,
.exit_platform_hw = tsc2007_exit_hw,
.get_pendown_state = tsc2007_state_hw,
.irq_pin = RIOT_Touch_Int,
};
添加I2C board_info:
static struct i2c_board_info mxc_i2c2_board_info[] __initdata = {
{
I2C_BOARD_INFO("tsc2007", (0x90>>1)),
.platform_data = &tsc2007_data,
},
};
//tsc2007 i2c client
tsc2007的I2C地址配置为0x90
接下来就实现tsc2007的三个硬件函数
.init_platform_hw = tsc2007_init_hw,
.exit_platform_hw = tsc2007_exit_hw,
.get_pendown_state = tsc2007_state_hw,
具体实现大家可以根据自己需要,来具体实现。
在tsc2007.c文件中添加读取触摸坐标的打印信息:
/* Prepare for next touch reading - power down ADC, enable PENIRQ */
tsc2007_xfer(tsc, PWRDOWN);
printk("zfm read the x is %d,y is %d z1 is %d z2 is %d /n",tc->x,tc->y,tc->z1,tc->z2);
这样我们编译uImage,下载,查看串口终端:
由此可见我们的I2C和tsc2007的通信已经建立并能读取数据。
但是看来要使用ubuntu的触屏功能还有一段距离,后面还有很多工作要做,OPENCV也要提上实验日程了,实在不行就直接用鼠标了先。
|
|