一,底层调试
博主使用的板子是天嵌的335x_coreC。
内核版本:3.2
板子上有引出来的ADC口,不过内核驱动并没有添加相关普通ADC的内容。
所以现在就来添加并调试普通ADC相关内容:
一般TI公司的内核源码有自带ADC驱动,只要在内核配置单中选中并在板级信息上配置好就可以使用了。
1.选中内核配置单选项:
Device Drivers --->
[*] Staging drivers --->
<*> Industrial I/O support --->
[*] Enable buffer support within IIO
<*> Industrial I/O lock free software ring
< > Industrial I/O buffering based on kfifo
- *- Enable triggered sampling support
Analog to digital converters --->
<*> TI's ADC driver
2.配置板级信息:
vi arch/arm/mach-omap2/board-am335xevm.c
/* adc电阻触摸 TSc touch controller */
static struct tsc_data am335x_touchscreen_data = {
.wires = 4,
.x_plate_resistance = 200,
.steps_to_configure = 5,
};
/*普通ADC*/
static struct adc_data am335x_adc_data = {
.adc_channels = 4,
};
static struct mfd_tscadc_board tscadc = {
.tsc_init = &am335x_touchscreen_data, /*touch adc*/
.adc_init = &am335x_adc_data, /*普通adc*/
};
#ifdef CONFIG_MFD_TI_TSCADC
static void mfd_tscadc_init(int evm_id, int profile)
{
int err;
err = am33xx_register_mfd_tscadc(&tscadc);
if (err)
pr_err("failed to register touchscreen device\n");
}
#endif /* CONFIG_MFD_TI_TSCADC */
static struct evm_dev_cfg embedsky_evm_dev_cfg[] = {
......
#ifdef CONFIG_MFD_TI_TSCADC
{mfd_tscadc_init, DEV_ON_BASEBOARD, PROFILE_ALL},
#endif /* CONFIG_MFD_TI_TSCADC */
......
}
二. 命令行测试
现在可以在/sys/下面看的注册的iio设备:
由原理图可以看到变阻器接了AIN4,故一边旋转变阻器一边输入命令行,可以看的AIN4 adc采样值的变化: