186 lines
5.6 KiB
YAML
186 lines
5.6 KiB
YAML
# Copyright 2023 NXP
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
description: |
|
|
NXP S32 eMIOS PWM node for S32 SoCs. Each channel in eMIOS can be configured
|
|
to use for PWM operation. There are several PWM modes supported by this module,
|
|
some modes only support on channels that have internal counter, some modes
|
|
require to use a reference timebase from a master bus.
|
|
|
|
For example to configuring eMIOS instance 0 with:
|
|
- Channel 0 for mode OPWFMB
|
|
- Channel 1 for mode OPWMB
|
|
- Channel 2 for mode OPWMCB with deadtime inserted at leading edge
|
|
- Channel 3 for mode SAIC, use internal timebase with input filter = 2 eMIOS clock
|
|
|
|
emios0_pwm: pwm {
|
|
pwm_0 {
|
|
channel = <0>;
|
|
pwm-mode = "OPWFMB";
|
|
prescaler = <8>;
|
|
period = <65534>;
|
|
duty-cycle = <32768>;
|
|
polarity = "ACTIVE_HIGH";
|
|
};
|
|
|
|
pwm_1 {
|
|
channel = <1>;
|
|
master-bus = <&emios1_bus_a>;
|
|
pwm-mode = "OPWMB";
|
|
duty-cycle = <32768>;
|
|
phase-shift = <100>;
|
|
polarity = "ACTIVE_LOW";
|
|
};
|
|
|
|
pwm_2 {
|
|
channel = <2>;
|
|
master-bus = <&emios1_bus_b>;
|
|
pwm-mode = "OPWMCB_LEAD_EDGE";
|
|
duty-cycle = <32768>;
|
|
dead-time = <100>;
|
|
polarity = "ACTIVE_LOW";
|
|
};
|
|
|
|
pwm_3 {
|
|
channel = <3>;
|
|
pwm-mode = "SAIC";
|
|
prescaler = <8>;
|
|
input-filter = <2>;
|
|
};
|
|
};
|
|
|
|
OPWMB and OPWMCB modes use reference timebase, the master bus is chosen over
|
|
phandle 'master-bus'. For OPWMB mode, PWM's period is master bus's period and
|
|
is 2 * master bus's period - 2 for OPWMCB mode. Please notice that the devicetree
|
|
node for master bus should be enabled and configured for using, please see
|
|
'nxp,s32-emios' bindings.
|
|
|
|
compatible: "nxp,s32-emios-pwm"
|
|
|
|
include: [pwm-controller.yaml, base.yaml, pinctrl-device.yaml]
|
|
|
|
properties:
|
|
pinctrl-0:
|
|
required: true
|
|
|
|
pinctrl-names:
|
|
required: true
|
|
|
|
"#pwm-cells":
|
|
const: 3
|
|
|
|
pwm-cells:
|
|
- channel
|
|
# Period in terms of nanoseconds
|
|
- period
|
|
- flags
|
|
|
|
child-binding:
|
|
description: |
|
|
eMIOS PWM channel configuration.
|
|
|
|
properties:
|
|
channel:
|
|
type: int
|
|
required: true
|
|
description: eMIOS PWM channel
|
|
|
|
master-bus:
|
|
type: phandle
|
|
description: |
|
|
A phandle to master-bus node that will be used as external timebase
|
|
for current channel, this can be bypassed if internal counter is used
|
|
for PWM operation. A master bus must be used exclusively, such as if
|
|
is used as a timebase for a channel in SAIC mode, do not use that
|
|
master bus as a timebase for generate PWM pulse.
|
|
|
|
pwm-mode:
|
|
type: string
|
|
required: true
|
|
description: |
|
|
Select PWM mode:
|
|
- OPWFMB: provides waveforms with variable duty cycle and frequency,
|
|
this mode uses internal counter.
|
|
|
|
- OPWMB: generate pulses with programmable leading and trailing
|
|
edge placement. The period is determined by period of
|
|
an external counter driven in MCB Up Mode. Changing PWM period
|
|
at runtime will impact to all channels share the same timebase.
|
|
The new period and cycle take effect in next period boundary.
|
|
|
|
- OPWMCB: generates a center aligned PWM with dead time insertion to the
|
|
leading or trailing edge. The period is determined by period of
|
|
an external counter driven in MCB Up Down Mode. Changing PWM period
|
|
at runtime will impact to all channels share the same timebase,
|
|
The new period and cycle take effect in next period boundary.
|
|
|
|
- SAIC: single action input capture mode, the eMIOS captures events as soon as
|
|
they occur. The value of latest captured event is stored and can be read
|
|
by software.
|
|
enum:
|
|
- "OPWFMB"
|
|
- "OPWMB"
|
|
- "OPWMCB_TRAIL_EDGE"
|
|
- "OPWMCB_LEAD_EDGE"
|
|
- "SAIC"
|
|
|
|
polarity:
|
|
type: string
|
|
description: |
|
|
Output polarity for PWM channel.
|
|
enum:
|
|
- "ACTIVE_LOW"
|
|
- "ACTIVE_HIGH"
|
|
|
|
duty-cycle:
|
|
type: int
|
|
description: |
|
|
Duty-cycle (in ticks) for PWM channel at boot time.
|
|
|
|
period:
|
|
type: int
|
|
description: |
|
|
Period (in ticks) for OPWFMB at boot time. Period for the rest
|
|
of PWM mode depends on period's master bus. Must be in range [2 ... 65535].
|
|
|
|
freeze:
|
|
type: boolean
|
|
description: Freeze individual internal counter when the chip enters Debug mode.
|
|
|
|
prescaler-src:
|
|
type: string
|
|
default: "PRESCALED_CLOCK"
|
|
description: |
|
|
Select clock source for internal counter prescaler.
|
|
enum:
|
|
- "PRESCALED_CLOCK" # Clock source = eMIOS clock / (global prescaler)
|
|
- "MODULE_CLOCK" # Clock source = eMIOS clock
|
|
|
|
prescaler:
|
|
type: int
|
|
description: |
|
|
The clock divider for internal counter prescaler.
|
|
enum: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
|
|
|
|
dead-time:
|
|
type: int
|
|
default: 0
|
|
description: |
|
|
Dead time (in ticks) for PWM channel in OPWMCB mode.
|
|
|
|
phase-shift:
|
|
type: int
|
|
default: 0
|
|
description: |
|
|
Phase Shift (in ticks) for PWM channel in OPWMB mode.
|
|
|
|
input-filter:
|
|
type: int
|
|
default: 0
|
|
enum: [0, 2, 4, 8, 16]
|
|
description: |
|
|
Select the minimum input pulse width, in filter clock cycles that can pass
|
|
through the input filter. The filter latency - the difference in time between
|
|
the input and the response is three clock edges. Default 0 means the filter
|
|
is bypassed. The clock source for programmable input filter is eMIOS clock.
|