Registered User |
Registered User mNo edit summary Tag: 2017 source edit |
||
Line 82: | Line 82: | ||
== Source code location == | == Source code location == | ||
The LPTIM Linux driver is composed of: | The LPTIM Linux driver is composed of: | ||
* {{CodeSource | Linux kernel | drivers/mfd/stm32-lptimer.c | stm32-lptimer.c | * '''MFD driver''': {{CodeSource | Linux kernel | drivers/mfd/stm32-lptimer.c | stm32-lptimer.c }} to handle common resources, such as registers and clock. | ||
* {{CodeSource | Linux kernel | drivers/pwm/pwm-stm32-lp.c | pwm-stm32-lp.c | * '''PWM driver''': {{CodeSource | Linux kernel | drivers/pwm/pwm-stm32-lp.c | pwm-stm32-lp.c }} to handle PWM channel | ||
* {{CodeSource | Linux kernel | drivers/iio/trigger/stm32-lptimer-trigger.c | stm32-lptimer-trigger.c | * '''IIO hardware trigger driver''': {{CodeSource | Linux kernel | drivers/iio/trigger/stm32-lptimer-trigger.c | stm32-lptimer-trigger.c }} to handle trigger sources for other internal peripherals | ||
* {{CodeSource | Linux kernel | drivers/counter/stm32-lptimer-cnt.c | stm32-lptimer-cnt.c | * '''Counter driver''': {{CodeSource | Linux kernel | drivers/counter/stm32-lptimer-cnt.c | stm32-lptimer-cnt.c }} to handle quadrature encoder and external event counter | ||
* {{CodeSource | Linux kernel | include/linux/mfd/stm32-lptimer.h}} and {{CodeSource | Linux kernel | include/linux/iio/timer/stm32-lptim-trigger.h}} header files | * {{CodeSource | Linux kernel | include/linux/mfd/stm32-lptimer.h}} and {{CodeSource | Linux kernel | include/linux/iio/timer/stm32-lptim-trigger.h}} header files | ||
Latest revision as of 16:09, 13 May 2024
1. Article purpose
This article introduces the LPTIM Linux® driver for the LPTIM internal peripheral[1]:
- Which LPTIM features are supported by the driver
- How to configure, use and debug the driver
- What is the driver structure, and where the source code can be found.
2. Short description
The LPTIM[1] Linux driver (kernel space) is based on the PWM, IIO and counter frameworks. It provides several functionalities:
MFD driver:
- handles common resources (registers, clock)
PWM driver:
- handles the PWM output channel (single channel)
IIO hardware trigger driver:
- handles hardware trigger sources (synchronously with PWM) for other internal peripherals such as ADC[2], DAC[3], DFSDM[4]
Counter driver:
- handles the quadrature encoder interface[5] as well as the external event counter.
3. Configuration
3.1. Kernel configuration
Activate the LPTIM[1] Linux driver in the kernel configuration using the Linux Menuconfig tool: Menuconfig or how to configure kernel.
Enable the following configurations (as well as their dependencies):
- CONFIG_MFD_STM32_LPTIMER
- CONFIG_PWM_STM32_LP
- CONFIG_IIO_STM32_LPTIMER_TRIGGER
- CONFIG_STM32_LPTIMER_CNT
Device Drivers --->
-> Multifunction device drivers --->
<*> Support for STM32 Low-Power Timer
-> Pulse-width modulation (PWM) support --->
<*> STMicroelectronics STM32 PWM LP
-> Industrial I/O support --->
-> Triggers - standalone --->
<*> STM32 Low-Power Timer Trigger
-> Counter support --->
<*> STM32 LP Timer encoder counter driver
3.2. Device tree
Refer to the LPTIM device tree configuration article when configuring the LPTIM Linux kernel driver.
4. 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 use the quadrature encoder with the sysfs interface
5. How to trace and debug
The LPTIM Linux driver can access LPTIM registers through REGMAP.
It comes with debugfs[6] entries, which allow dumping registers:
$ cd /sys/kernel/debug/regmap
$ ls
40004000.timer 40009000.timer
$ cd 40009000.timer
$ cat registers
000: 00000003
004: 00000000
008: 00000000
...
It also comes with tracepoints[7]:
$ cd /sys/kernel/debug/tracing
$ cat available_events | grep regmap
...
regmap:regmap_reg_read
regmap:regmap_reg_write
6. Source code location
The LPTIM Linux driver is composed of:
- MFD driver: stm32-lptimer.c to handle common resources, such as registers and clock.
- PWM driver: pwm-stm32-lp.c to handle PWM channel
- IIO hardware trigger driver: stm32-lptimer-trigger.c to handle trigger sources for other internal peripherals
- Counter driver: stm32-lptimer-cnt.c to handle quadrature encoder and external event counter
7. References