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:
An “upper half”, generic driver that provides the common PWM interface to application level code, and
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 device 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
“Lower Half” Drivers. Platform-specific PWM drivers reside in
/src/<hardware> directory for the specific processor <architecture> and for the specific <chip> PWM peripheral devices.