ESP Hardware Abstraction Layer for PCNT Peripherals
Note
This component is currently in beta. Its API, behavior, and compatibility may change at any time and without notice; backward compatibility is not guaranteed. Use caution when integrating into production systems.
Overview
The esp_hal_pcnt component provides a Hardware Abstraction Layer for PCNT (Pulse Counter) peripherals across ESP-IDF supported targets. This HAL enables efficient counting of external pulses and signals, with support for quadrature encoders, frequency measurement, and position tracking applications.
Architecture
The PCNT HAL is structured in two main sub-layers:
-
HAL Layer (Upper): Defines the operational steps and data structures required to control PCNT peripherals (e.g., initialization).
-
Low-Level Layer (Bottom): Serves as a translation layer between the HAL and the register files defined in the
soccomponent, handling target-specific register configurations.
Features
Core Counting Features
- Bidirectional pulse counting (increment/decrement)
- Configurable counting range with high/low limits
- Counter value read operations
- Counter clear and reset functionality
- Start/stop control for counting operations
Channel Configuration
- Edge action configuration:
- Hold: Keep current count value
- Increase: Increment count value
- Decrease: Decrement count value
- Level action configuration:
- Keep: Maintain current count mode
- Inverse: Invert count direction
- Hold: Freeze count value
Event Detection
- Threshold events
- High/low limit events
- Zero-crossing events
- Watch-point events
- Step events
Signal Processing
- Glitch filtering with configurable filter width
Usage
The HAL functions primarily serve ESP-IDF PCNT peripheral drivers such as esp_driver_pcnt component.
Advanced developers can use these interfaces directly when implementing custom pulse counting applications, with the understanding that API stability is not guaranteed.
Dependencies
soc: Provides chip-specific register definitions and peripheral capabilitieshal: Core hardware abstraction utilities and macros