TIM Linux driver
目录
Article purpose
本文介绍了用于TIM内部外围设备的TIM Linux® 驱动程序[1]:
- 驱动程序支持哪些TIM功能
- 如何配置,使用和调试驱动程序
- 驱动程序的结构是什么,以及在哪里可以找到源代码。
Short description
The TIM[1] Linux driver (kernel space) is based on the PWM and IIO frameworks. It provides several functionalities:
MFD driver:
- handles registers, clock and DMA[2] resources
- detects the TIM counter resolution, e.g. 16 or 32 bits.
PWM driver:
- detects the number of TIM channels.
- handles PWM output channels.
- handles PWM capture channels (input). Note that the PWM capture relies on DMA, which is handled by the MFD core.
IIO driver:
Configuration
Kernel configuration
Activate the TIM[1] Linux driver in the kernel configuration using the Linux Menuconfig tool: Menuconfig or how to configure kernel.
Enable the following configurations (and their dependencies):
- CONFIG_MFD_STM32_TIMERS
- CONFIG_PWM_STM32
- CONFIG_IIO_STM32_TIMER_TRIGGER
Device Drivers ---> -> Multifunction device drivers ---> <*> Support for STM32 Timers -> Pulse-width modulation (PWM) support ---> <*> STMicroelectronics STM32 PWM -> Industrial I/O support ---> -> Triggers - standalone ---> <*> STM32 timer trigger
Device tree
Refer to the TIM device tree configuration article when configuring the TIM Linux kernel driver.
How to use
How to use PWM with sysfs interface
How to set up a TIM or LPTIM trigger using the sysfs interface
How to trace and debug
The TIM[1] Linux driver can access the timer registers through REGMAP.
It comes with debugfs[7] entries, which allow dumping registers:
$ cd /sys/kernel/debug/regmap $ ls 40004000.timer 44000000.timer $ cd 44000000.timer $ cat registers 000: 00000081 004: 00000000 008: 00000000 00c: 00000000 ...
It also comes with tracepoints[8]:
$ cd /sys/kernel/debug/tracing $ cat available_events | grep regmap ... regmap:regmap_reg_read regmap:regmap_reg_write
Source code location
The TIM Linux driver source code is composed of:
- drivers/mfd/stm32-timers.c | |}} stm32-timers.c MFD driver to handle common resources: registers, clock, dmas.
- drivers/pwm/pwm-stm32.c | |}} pwm-stm32.c PWM driver to handle PWM channel(s).
- drivers/iio/trigger/stm32-timer-trigger.c | |}} stm32-timer-trigger.c IIO driver to handle trigger source for other internal peripherals and quadrature encoder interface.
- include/linux/mfd/stm32-timers.h| |}} include/linux/mfd/stm32-timers.h and include/linux/iio/timer/stm32-timer-trigger.h| |}} include/linux/iio/timer/stm32-timer-trigger.h header files
References
- ↑ 1.01.11.21.3 TIM internal peripheral
- ↑ DMA_internal_peripheral
- ↑ ADC internal peripheral
- ↑ DAC internal peripheral
- ↑ DFSDM internal peripheral
- ↑ Incremental encoder Incremental encoder overview
- ↑ 调试文件系统(debugfs)
- ↑ Ftrace
<securetransclude src="ProtectedTemplate:PublicationRequestId" params="9233 | 2018-10-15 | AnneJ"></securetransclude> <securetransclude src="ProtectedTemplate:ArticleBasedOnModel" params="Linux driver article model"></securetransclude>