PWM Drivers

For the purposes of this driver, a PWM device is any device that generates periodic output pulses of controlled frequency and pulse width. Such a device might be used, for example, to perform pulse-width modulated output or frequency/pulse-count modulated output (such as might be needed to control a stepper motor).

The NuttX PWM driver is split into two parts:

  1. An “upper half”, generic driver that provides the common PWM interface to application level code, and

  2. A “lower half”, platform-specific driver that implements the low-level timer controls to implement the PWM functionality.

Files supporting PWM can be found in the following locations:

  • Interface Definition. The header file for the NuttX PWM driver reside at include/nuttx/timers/pwm.h. This header file includes both the application level interface to the PWM driver as well as the interface between the “upper half” and “lower half” drivers. The PWM module uses a standard character driver framework. However, since the PWM driver is a devices control interface and not a data transfer interface, the majority of the functionality available to the application is implemented in driver ioctl calls.

  • “Upper Half” Driver. The generic, “upper half” PWM driver resides at drivers/pwm.c.

  • “Lower Half” Drivers. Platform-specific PWM drivers reside in arch/<architecture>/src/<hardware> directory for the specific processor <architecture> and for the specific <chip> PWM peripheral devices.