From c095fece6bf5451036aaf80cbc1d73b8014a4040 Mon Sep 17 00:00:00 2001 From: Ayush Singh Date: Wed, 5 Jun 2024 20:58:00 +0530 Subject: [PATCH 1/2] zephyrCommon: Improve analogWrite - Replace pwm_set_cycles with pwm_set_pulse_dt. - Add check to ensure that pwm pin is ready Signed-off-by: Ayush Singh --- cores/arduino/zephyrCommon.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cores/arduino/zephyrCommon.cpp b/cores/arduino/zephyrCommon.cpp index 219d3cda..fccd2bb2 100644 --- a/cores/arduino/zephyrCommon.cpp +++ b/cores/arduino/zephyrCommon.cpp @@ -217,6 +217,10 @@ void analogWrite(pin_size_t pinNumber, int value) { size_t idx = pwm_pin_index(pinNumber); + if (!pwm_is_ready_dt(&arduino_pwm[idx])) { + return; + } + if (idx >= ARRAY_SIZE(arduino_pwm) ) { return; } @@ -231,8 +235,7 @@ void analogWrite(pin_size_t pinNumber, int value) * A duty ratio determines by the period value defined in dts * and the value arguments. So usually the period value sets as 255. */ - (void)pwm_set_cycles(arduino_pwm[idx].dev, arduino_pwm[idx].channel, - arduino_pwm[idx].period, value, arduino_pwm[idx].flags); + (void)pwm_set_pulse_dt(&arduino_pwm[idx], value); } #endif From e3a450a9b333cd4cd929e527b4987b00a9a798a9 Mon Sep 17 00:00:00 2001 From: Ayush Singh Date: Wed, 5 Jun 2024 21:00:49 +0530 Subject: [PATCH 2/2] beagleconnect_freedom: Add pwm support - Fix intendation - Fix incorrect PWM MB 2 pin number - Add pwms property Signed-off-by: Ayush Singh --- .../beagleconnect_freedom.overlay | 125 ++++++++++++------ 1 file changed, 81 insertions(+), 44 deletions(-) diff --git a/variants/beagleconnect_freedom/beagleconnect_freedom.overlay b/variants/beagleconnect_freedom/beagleconnect_freedom.overlay index 47901fab..d9a66c7f 100644 --- a/variants/beagleconnect_freedom/beagleconnect_freedom.overlay +++ b/variants/beagleconnect_freedom/beagleconnect_freedom.overlay @@ -4,48 +4,85 @@ * SPDX-License-Identifier: Apache-2.0 */ - / { - zephyr,user { - digital-pin-gpios = - <&gpio0 16 GPIO_ACTIVE_HIGH>, /* D0 - MB1 INT */ - <&gpio0 20 GPIO_ACTIVE_HIGH>, /* D1 - MB2 INT */ - <&gpio0 17 GPIO_ACTIVE_HIGH>, /* D2 - MB1 PWM */ - <&gpio0 28 GPIO_ACTIVE_HIGH>, /* D3 - MB1 CS - A5 */ - <&gpio0 21 GPIO_ACTIVE_HIGH>, /* D4 - MB2 UART1 RX */ - <&gpio0 22 GPIO_ACTIVE_HIGH>, /* D5 - MB2 UART1 TX */ - <&gpio0 19 GPIO_ACTIVE_HIGH>, /* D6 - MB2 PWM */ - <&gpio0 27 GPIO_ACTIVE_HIGH>, /* D7 - MB2 CS - A4 */ - <&gpio0 9 GPIO_ACTIVE_HIGH>, /* D8 - MB1/2 PICO */ - <&gpio0 10 GPIO_ACTIVE_HIGH>, /* D9 - MB1/2 SCK */ - <&gpio0 11 GPIO_ACTIVE_HIGH>, /* D10 - MB1/2 POCI */ - <&gpio0 26 GPIO_ACTIVE_HIGH>, /* D11 - MB1/2 SDA - A2 */ - <&gpio0 25 GPIO_ACTIVE_HIGH>, /* D12 - MB1/2 SCL - A3 */ - <&gpio0 12 GPIO_ACTIVE_HIGH>, /* D13 - MB1 UART0 RX */ - <&gpio0 13 GPIO_ACTIVE_HIGH>, /* D14 - MB1 UART0 TX */ - <&gpio0 23 GPIO_ACTIVE_HIGH>, /* D15 - MB1 AN - A0 */ - <&gpio0 24 GPIO_ACTIVE_HIGH>, /* D16 - MB2 AN - A1 */ - <&gpio0 5 GPIO_ACTIVE_HIGH>, /* D17 - MB2 RST */ - <&gpio0 6 GPIO_ACTIVE_HIGH>, /* D18 - MB1 RST */ - <&gpio0 7 GPIO_ACTIVE_HIGH>, /* D19 - on-board sensor INT */ - <&gpio0 8 GPIO_ACTIVE_HIGH>, /* D20 - flash CS */ - <&gpio0 14 GPIO_ACTIVE_HIGH>, /* D21 - on-board sensor I2C enable */ - <&gpio0 15 GPIO_ACTIVE_HIGH>, /* D22 - BOOT button */ - <&gpio0 18 GPIO_ACTIVE_HIGH>; /* D23 - LINK LED */ - - pwm-pin-gpios = - <&gpio0 17 GPIO_ACTIVE_HIGH>, /* D2 - MB1 PWM */ - <&gpio0 3 GPIO_ACTIVE_HIGH>; /* D6 - MB2 PWM */ - - adc-pin-gpios = - <&gpio0 23 GPIO_ACTIVE_HIGH>, /* D15 - MB1 AN - A0 */ - <&gpio0 24 GPIO_ACTIVE_HIGH>, /* D16 - MB2 AN - A1 */ - <&gpio0 26 GPIO_ACTIVE_HIGH>, /* D11 - MB1/2 SDA - A2 */ - <&gpio0 25 GPIO_ACTIVE_HIGH>, /* D12 - MB1/2 SCL - A3 */ - <&gpio0 27 GPIO_ACTIVE_HIGH>, /* D7 - MB2 CS - A4 */ - <&gpio0 28 GPIO_ACTIVE_HIGH>; /* D3 - MB1 CS - A5 */ - - builtin-led-gpios = <&gpio0 18 GPIO_ACTIVE_HIGH>; /* 2.4GHz TX/RX */ - serials = <&uart0 &uart1>; - i2cs = <&i2c0>; - }; +/ { + zephyr,user { + digital-pin-gpios = + <&gpio0 16 GPIO_ACTIVE_HIGH>, /* D0 - MB1 INT */ + <&gpio0 20 GPIO_ACTIVE_HIGH>, /* D1 - MB2 INT */ + <&gpio0 17 GPIO_ACTIVE_HIGH>, /* D2 - MB1 PWM */ + <&gpio0 28 GPIO_ACTIVE_HIGH>, /* D3 - MB1 CS - A5 */ + <&gpio0 21 GPIO_ACTIVE_HIGH>, /* D4 - MB2 UART1 RX */ + <&gpio0 22 GPIO_ACTIVE_HIGH>, /* D5 - MB2 UART1 TX */ + <&gpio0 19 GPIO_ACTIVE_HIGH>, /* D6 - MB2 PWM */ + <&gpio0 27 GPIO_ACTIVE_HIGH>, /* D7 - MB2 CS - A4 */ + <&gpio0 9 GPIO_ACTIVE_HIGH>, /* D8 - MB1/2 PICO */ + <&gpio0 10 GPIO_ACTIVE_HIGH>, /* D9 - MB1/2 SCK */ + <&gpio0 11 GPIO_ACTIVE_HIGH>, /* D10 - MB1/2 POCI */ + <&gpio0 26 GPIO_ACTIVE_HIGH>, /* D11 - MB1/2 SDA - A2 */ + <&gpio0 25 GPIO_ACTIVE_HIGH>, /* D12 - MB1/2 SCL - A3 */ + <&gpio0 12 GPIO_ACTIVE_HIGH>, /* D13 - MB1 UART0 RX */ + <&gpio0 13 GPIO_ACTIVE_HIGH>, /* D14 - MB1 UART0 TX */ + <&gpio0 23 GPIO_ACTIVE_HIGH>, /* D15 - MB1 AN - A0 */ + <&gpio0 24 GPIO_ACTIVE_HIGH>, /* D16 - MB2 AN - A1 */ + <&gpio0 5 GPIO_ACTIVE_HIGH>, /* D17 - MB2 RST */ + <&gpio0 6 GPIO_ACTIVE_HIGH>, /* D18 - MB1 RST */ + <&gpio0 7 GPIO_ACTIVE_HIGH>, /* D19 - on-board sensor INT */ + <&gpio0 8 GPIO_ACTIVE_HIGH>, /* D20 - flash CS */ + <&gpio0 14 GPIO_ACTIVE_HIGH>, /* D21 - on-board sensor I2C enable */ + <&gpio0 15 GPIO_ACTIVE_HIGH>, /* D22 - BOOT button */ + <&gpio0 18 GPIO_ACTIVE_HIGH>; /* D23 - LINK LED */ + + pwm-pin-gpios = + <&gpio0 17 GPIO_ACTIVE_HIGH>, /* D2 - MB1 PWM */ + <&gpio0 19 GPIO_ACTIVE_HIGH>; /* D6 - MB2 PWM */ + + pwms = <&pwm0 0 255 PWM_POLARITY_NORMAL>, + <&pwm1 0 255 PWM_POLARITY_NORMAL>; + + adc-pin-gpios = + <&gpio0 23 GPIO_ACTIVE_HIGH>, /* D15 - MB1 AN - A0 */ + <&gpio0 24 GPIO_ACTIVE_HIGH>, /* D16 - MB2 AN - A1 */ + <&gpio0 26 GPIO_ACTIVE_HIGH>, /* D11 - MB1/2 SDA - A2 */ + <&gpio0 25 GPIO_ACTIVE_HIGH>, /* D12 - MB1/2 SCL - A3 */ + <&gpio0 27 GPIO_ACTIVE_HIGH>, /* D7 - MB2 CS - A4 */ + <&gpio0 28 GPIO_ACTIVE_HIGH>; /* D3 - MB1 CS - A5 */ + + builtin-led-gpios = <&gpio0 18 GPIO_ACTIVE_HIGH>; /* 2.4GHz TX/RX */ + serials = <&uart0 &uart1>; + i2cs = <&i2c0>; }; +}; + +&pinctrl { + pwm0_default: pwm0_default { + pinmux = <17 IOC_PORT_MCU_PORT_EVENT1>; + bias-disable; + drive-strength = <2>; + }; + + pwm1_default: pwm1_default { + pinmux = <19 IOC_PORT_MCU_PORT_EVENT1>; + bias-disable; + drive-strength = <2>; + }; +}; + +&gpt0 { + status = "okay"; +}; + +&gpt1 { + status = "okay"; +}; + +&pwm0 { + status = "okay"; + pinctrl-0 = <&pwm0_default>; + pinctrl-names = "default"; +}; + +&pwm1 { + status = "okay"; + pinctrl-0 = <&pwm1_default>; + pinctrl-names = "default"; +};