| # Copyright (c) 2023, Zephyr Project |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| description: | |
| TI SimpleLink CC13xx/CC26xx GPT timer PWM Controller Node |
| |
| To configure a PWM node, you first need to define a board overlay with a |
| pinctrl configuration for the pin on which the PWM signal should be present: |
| |
| &pinctrl { |
| gpt0_pwm: gpt0_pwm { |
| pinmux = <25 IOC_PORT_MCU_PORT_EVENT1>; |
| bias-disable; |
| drive-strength = <8>; /* in mA, can be 2, 4 or 8 */ |
| }; |
| }; |
| |
| Please be aware that the port event depends on the GPT instance chosen. The |
| following port events must be used for PWM: |
| - GPT0: IOC_PORT_MCU_PORT_EVENT1 |
| - GPT1: IOC_PORT_MCU_PORT_EVENT3 |
| - GPT2: IOC_PORT_MCU_PORT_EVENT5 |
| - GPT3: IOC_PORT_MCU_PORT_EVENT7 |
| |
| Be careful not to choose a pin that is already in use on your board, this |
| might irreversible damage to your board as the given pin will be configured as |
| output and actively driven by the PWM driver. |
| |
| Then enable the corresponding timer and PWM nodes and add a reference to the |
| pinctrl entry: |
| |
| &gpt0 { |
| status = "okay"; |
| }; |
| |
| &pwm0 { |
| status = "okay"; |
| pinctrl-0 = <&gpt0_pwm>; |
| pinctrl-names = "default"; |
| }; |
| |
| Now you can programmatically enable the PWM signal in your code: |
| |
| static const struct device *pwm = DEVICE_DT_GET(DT_NODELABEL(pwm0)); |
| |
| int init_pwm(void) |
| { |
| uint32_t pwm_period_ns, pwm_pulse_ns; |
| uint32_t pwm_duty_percent = 50U; |
| uint32_t pwm_frequency = 1000U; /* 1kHz */ |
| |
| if (!device_is_ready(pwm)) { |
| LOG_ERR("Error: PWM device %s is not ready\n", pwm->name); |
| return -ENODEV; |
| } |
| |
| pwm_period_ns = NSEC_PER_SEC / pwm_frequency; |
| pwm_pulse_ns = (pwm_duty_percent * pwm_period_ns) / 100; |
| |
| return pwm_set(pwm, 0, pwm_period_ns, pwm_pulse_ns, 0); |
| } |
| |
| compatible: "ti,cc13xx-cc26xx-timer-pwm" |
| |
| include: [base.yaml, pwm-controller.yaml, pinctrl-device.yaml] |
| |
| properties: |
| pinctrl-0: |
| required: true |
| |
| pwm-cells: |
| - channel |
| - period |
| - flags |