LPTIM Linux driver





1 Article purpose[edit]

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[edit]

The LPTIM[1] Linux driver (kernel space) is based on the PWM and IIO 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]

IIO counter driver:

  • handles the quadrature encoder interface[5] as well as the external event counter.

3 Configuration[edit]

3.1 Kernel configuration[edit]

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
      -> Counters  --->
         <*> STM32 low-power timer encoder counter driver

3.2 Device tree[edit]

Refer to the LPTIM device tree configuration article when configuring the LPTIM Linux kernel driver.

4 How to use[edit]

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[edit]

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[edit]

The LPTIM Linux driver is composed of:

7 References[edit]

low-power timer (STM32 specific)

Multifunction device

Pulse Width Modulation

Industrial I/O Linux subsystem

Analog-to-digital converter. The process of converting a sampled analog signal to a digital code that represents the amplitude of the original signal sample.

Digital-to-analog converter

Digital Filter for Sigma-Delta Modulator

Low Power (MIPI® Alliance DSI standard)

Register map (Linux registers map abstraction API)

Debug File System (See https://en.wikipedia.org/wiki/Debugfs for more details)

Attachments

Discussions