Skip to content

Commit 3a9a68e

Browse files
laneb-infineonDeepika-aerlyncsayoojkkarun
committed
samples: adc: Add PSOC4 board overlays
Add device tree overlays for ADC samples and tests on CY8CKIT-041S-MAX and CY8CPROTO-041TP boards. Configures ADC channels with pinctrl for analog inputs on available header pins. Includes single-ended and differential channel configurations demonstrating various ADC features. Added overlays for: - samples/drivers/adc/adc_dt - samples/drivers/adc/adc_sequence - tests/drivers/adc/adc_api - tests/drivers/adc/adc_error_cases Signed-off-by: Braeden Lane <[email protected]> Co-authored-by: Deepika R <[email protected]> Co-authored-by: Sayooj K Karun <[email protected]>
1 parent c6799ed commit 3a9a68e

File tree

8 files changed

+575
-0
lines changed

8 files changed

+575
-0
lines changed
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
/*
2+
* Copyright (c) 2025 Infineon Technologies AG,
3+
* or an affiliate of Infineon Technologies AG.
4+
*
5+
* SPDX-License-Identifier: Apache-2.0
6+
*/
7+
8+
/*
9+
* ADC Channel Configuration for CY8CKIT-041S-MAX
10+
*
11+
* Test Setup:
12+
* - Connect 0.616V test voltage to specified pins
13+
* - Using internal 1.2V reference
14+
* - Tests SARMUX (direct GPIO) routing
15+
*
16+
* Physical Connections (Arduino headers):
17+
* - P2.2 (J2-5, A2): Connect to 0.616V (differential V+)
18+
* - P2.3 (J2-7, A3): Connect to GND (differential V-)
19+
* - P2.0 (J2-1, A0): Connect to 0.616V (single-ended)
20+
* - P2.4 (J3-1, A4): Connect to 0.616V (single-ended)
21+
*
22+
* Channel Pin(s) Routing Configuration Test Voltage
23+
* Channel 0 P2.2, P2.3 SARMUX 2/3 Differential V+=0.616V, V-=GND
24+
* Channel 1 P2.0 SARMUX 0 Single-ended 0.616V
25+
* Channel 2 P2.4 SARMUX 4 Single-ended 0.616V
26+
*/
27+
28+
#include <zephyr/dt-bindings/adc/adc.h>
29+
#include <zephyr/dt-bindings/pinctrl/ifx_cat1-pinctrl.h>
30+
31+
/ {
32+
zephyr,user {
33+
io-channels = <&adc0 0>, <&adc0 1>, <&adc0 2>;
34+
};
35+
};
36+
37+
&pinctrl {
38+
p2_2_adc: p2_2_adc {
39+
pinmux = <DT_CAT1_PINMUX(2, 2, HSIOM_SEL_GPIO)>;
40+
};
41+
42+
p2_3_adc: p2_3_adc {
43+
pinmux = <DT_CAT1_PINMUX(2, 3, HSIOM_SEL_GPIO)>;
44+
};
45+
46+
p2_0_adc: p2_0_adc {
47+
pinmux = <DT_CAT1_PINMUX(2, 0, HSIOM_SEL_GPIO)>;
48+
};
49+
50+
p2_4_adc: p2_4_adc {
51+
pinmux = <DT_CAT1_PINMUX(2, 4, HSIOM_SEL_GPIO)>;
52+
};
53+
};
54+
55+
&adc0 {
56+
status = "okay";
57+
vref-src = "internal"; /* Use internal 1.2V reference */
58+
pinctrl-0 = <&p2_2_adc &p2_3_adc &p2_0_adc &p2_4_adc>;
59+
pinctrl-names = "default";
60+
#address-cells = <1>;
61+
#size-cells = <0>;
62+
63+
channel@0 {
64+
reg = <0>;
65+
zephyr,gain = "ADC_GAIN_1";
66+
zephyr,differential;
67+
zephyr,reference = "ADC_REF_INTERNAL";
68+
zephyr,vref-mv = <1200>;
69+
zephyr,input-positive = <2>; /* SARMUX pin 2 = P2.2 (V+) */
70+
zephyr,input-negative = <3>; /* SARMUX pin 3 = P2.3 (V-) */
71+
zephyr,resolution = <12>;
72+
zephyr,oversampling = <0>;
73+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
74+
};
75+
76+
channel@1 {
77+
reg = <1>;
78+
zephyr,gain = "ADC_GAIN_1";
79+
zephyr,reference = "ADC_REF_INTERNAL";
80+
zephyr,vref-mv = <1200>;
81+
zephyr,input-positive = <0>; /* SARMUX pin 0 = P2.0 */
82+
zephyr,resolution = <12>;
83+
zephyr,oversampling = <0>;
84+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
85+
};
86+
87+
channel@2 {
88+
reg = <2>;
89+
zephyr,gain = "ADC_GAIN_1";
90+
zephyr,reference = "ADC_REF_INTERNAL";
91+
zephyr,vref-mv = <1200>;
92+
zephyr,input-positive = <4>; /* SARMUX pin 4 = P2.4 */
93+
zephyr,resolution = <12>;
94+
zephyr,oversampling = <0>;
95+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
96+
};
97+
};
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* Copyright (c) 2025 Infineon Technologies AG,
3+
* or an affiliate of Infineon Technologies AG.
4+
*
5+
* SPDX-License-Identifier: Apache-2.0
6+
*/
7+
8+
/*
9+
* ADC Channel to GPIO Pin Mapping for Testing:
10+
*
11+
* Channel ADC Pin Routing Type GPIO Pin Test Pin (V+) Test Pin (V-)
12+
* Channel 0 0 SARMUX P2.0 P2.0 GND
13+
* Channel 1 2, 3 SARMUX (diff) P2.2 (V+), P2.3 (V-) P2.2 P2.3
14+
*/
15+
16+
#include <zephyr/dt-bindings/adc/adc.h>
17+
#include <zephyr/dt-bindings/adc/infineon-psoc4-sar.h>
18+
#include <zephyr/dt-bindings/pinctrl/ifx_cat1-pinctrl.h>
19+
20+
/ {
21+
zephyr,user {
22+
io-channels = <&adc0 0>, <&adc0 1>;
23+
};
24+
};
25+
26+
&pinctrl {
27+
p2_0_adc: p2_0_adc {
28+
pinmux = <DT_CAT1_PINMUX(2, 0, HSIOM_SEL_GPIO)>;
29+
};
30+
31+
p2_2_adc: p2_2_adc {
32+
pinmux = <DT_CAT1_PINMUX(2, 2, HSIOM_SEL_GPIO)>;
33+
};
34+
35+
p2_3_adc: p2_3_adc {
36+
pinmux = <DT_CAT1_PINMUX(2, 3, HSIOM_SEL_GPIO)>;
37+
};
38+
};
39+
40+
&adc0 {
41+
status = "okay";
42+
clocks = <&peri_clk_div4>;
43+
pinctrl-0 = <&p2_0_adc &p2_2_adc &p2_3_adc>;
44+
pinctrl-names = "default";
45+
#address-cells = <1>;
46+
#size-cells = <0>;
47+
48+
channel@0 {
49+
reg = <0>;
50+
zephyr,gain = "ADC_GAIN_1";
51+
zephyr,reference = "ADC_REF_INTERNAL";
52+
zephyr,input-positive = <CY_SAR_ADDR_SARMUX_0>;
53+
zephyr,resolution = <12>;
54+
zephyr,oversampling = <8>;
55+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
56+
};
57+
58+
channel@1 {
59+
reg = <1>;
60+
zephyr,gain = "ADC_GAIN_1";
61+
zephyr,differential;
62+
zephyr,reference = "ADC_REF_INTERNAL";
63+
zephyr,input-positive = <CY_SAR_ADDR_SARMUX_2>;
64+
zephyr,input-negative = <CY_SAR_ADDR_SARMUX_3>;
65+
zephyr,resolution = <12>;
66+
zephyr,oversampling = <0>;
67+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
68+
};
69+
};
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*
2+
* Copyright (c) 2025 Infineon Technologies AG,
3+
* or an affiliate of Infineon Technologies AG.
4+
*
5+
* SPDX-License-Identifier: Apache-2.0
6+
*/
7+
8+
/*
9+
* ADC Channel Configuration for adc_sequence Sample
10+
* This overlay configures multiple ADC channels for sequential sampling.
11+
*
12+
* Test Setup:
13+
* - Connect P2.0 to a test voltage (e.g., 3.3V or variable)
14+
* - Connect P2.2 and P2.3 for differential measurement
15+
* - Connect GND for reference
16+
*/
17+
18+
#include <zephyr/dt-bindings/adc/adc.h>
19+
#include <zephyr/dt-bindings/pinctrl/ifx_cat1-pinctrl.h>
20+
21+
/ {
22+
aliases {
23+
adc0 = &adc0;
24+
};
25+
};
26+
27+
&pinctrl {
28+
p2_0_adc: p2_0_adc {
29+
pinmux = <DT_CAT1_PINMUX(2, 0, HSIOM_SEL_GPIO)>;
30+
};
31+
32+
p2_2_adc: p2_2_adc {
33+
pinmux = <DT_CAT1_PINMUX(2, 2, HSIOM_SEL_GPIO)>;
34+
};
35+
36+
p2_3_adc: p2_3_adc {
37+
pinmux = <DT_CAT1_PINMUX(2, 3, HSIOM_SEL_GPIO)>;
38+
};
39+
};
40+
41+
&adc0 {
42+
status = "okay";
43+
vref-src = "internal"; /* Use internal 1.2V reference */
44+
pinctrl-0 = <&p2_0_adc &p2_2_adc &p2_3_adc>;
45+
pinctrl-names = "default";
46+
#address-cells = <1>;
47+
#size-cells = <0>;
48+
49+
channel@0 {
50+
reg = <0>;
51+
zephyr,gain = "ADC_GAIN_1";
52+
zephyr,reference = "ADC_REF_INTERNAL";
53+
zephyr,vref-mv = <1200>;
54+
zephyr,input-positive = <0>; /* P2.0 - SARMUX direct */
55+
zephyr,resolution = <12>;
56+
zephyr,oversampling = <0>;
57+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
58+
};
59+
60+
channel@1 {
61+
reg = <1>;
62+
zephyr,gain = "ADC_GAIN_1";
63+
zephyr,reference = "ADC_REF_INTERNAL";
64+
zephyr,vref-mv = <1200>;
65+
zephyr,differential;
66+
zephyr,input-positive = <2>; /* P2.2 */
67+
zephyr,input-negative = <3>; /* P2.3 */
68+
zephyr,resolution = <12>;
69+
zephyr,oversampling = <0>;
70+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
71+
};
72+
};
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*
2+
* Copyright (c) 2025 Infineon Technologies AG,
3+
* or an affiliate of Infineon Technologies AG.
4+
*
5+
* SPDX-License-Identifier: Apache-2.0
6+
*/
7+
8+
#include <zephyr/dt-bindings/adc/adc.h>
9+
#include <zephyr/dt-bindings/adc/infineon-psoc4-sar.h>
10+
#include <zephyr/dt-bindings/pinctrl/ifx_cat1-pinctrl.h>
11+
12+
/ {
13+
aliases {
14+
adc0 = &adc0;
15+
};
16+
};
17+
18+
&pinctrl {
19+
/* ADC Channel 0: P2.0 */
20+
p2_0_adc: p2_0_adc {
21+
pinmux = <DT_CAT1_PINMUX(2, 0, HSIOM_SEL_GPIO)>;
22+
};
23+
24+
/* ADC Channel 1: P2.2 (V+) */
25+
p2_2_adc: p2_2_adc {
26+
pinmux = <DT_CAT1_PINMUX(2, 2, HSIOM_SEL_GPIO)>;
27+
};
28+
29+
/* ADC Channel 1: P2.3 (V-) */
30+
p2_3_adc: p2_3_adc {
31+
pinmux = <DT_CAT1_PINMUX(2, 3, HSIOM_SEL_GPIO)>;
32+
};
33+
};
34+
35+
&adc0 {
36+
status = "okay";
37+
clocks = <&peri_clk_div4>;
38+
pinctrl-0 = <&p2_0_adc &p2_2_adc &p2_3_adc>;
39+
pinctrl-names = "default";
40+
#address-cells = <1>;
41+
#size-cells = <0>;
42+
43+
/* Channel 0: Single-ended on P2.0 */
44+
channel@0 {
45+
reg = <0>;
46+
zephyr,gain = "ADC_GAIN_1";
47+
zephyr,reference = "ADC_REF_INTERNAL";
48+
zephyr,input-positive = <CY_SAR_ADDR_SARMUX_0>;
49+
zephyr,resolution = <12>;
50+
zephyr,oversampling = <0>;
51+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
52+
};
53+
54+
/* Channel 1: Differential on P2.2 (+) and P2.3 (-) */
55+
channel@1 {
56+
reg = <1>;
57+
zephyr,gain = "ADC_GAIN_1";
58+
zephyr,reference = "ADC_REF_INTERNAL";
59+
zephyr,differential;
60+
zephyr,input-positive = <CY_SAR_ADDR_SARMUX_2>;
61+
zephyr,input-negative = <CY_SAR_ADDR_SARMUX_3>;
62+
zephyr,resolution = <12>;
63+
zephyr,oversampling = <0>;
64+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
65+
};
66+
};
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/*
2+
* Copyright (c) 2025 Infineon Technologies AG,
3+
* or an affiliate of Infineon Technologies AG.
4+
*
5+
* SPDX-License-Identifier: Apache-2.0
6+
*/
7+
8+
/*
9+
* ADC Channel to GPIO Pin Mapping for Testing:
10+
*
11+
* Channel ADC Pin Routing Type GPIO Pin Test Pin (V+) Test Pin (V-)
12+
* Channel 0 0 SARMUX P2.0 P2.0 GND
13+
* Channel 1 2, 3 SARMUX (differential) P2.2 (V+), P2.3 (V-) P2.2 P2.3
14+
* Channel 2 4 SARMUX P2.4 P2.4 GND
15+
*/
16+
17+
#include <zephyr/dt-bindings/adc/adc.h>
18+
#include <zephyr/dt-bindings/pinctrl/ifx_cat1-pinctrl.h>
19+
20+
/ {
21+
zephyr,user {
22+
io-channels = <&adc0 0>, <&adc0 1>, <&adc0 2>;
23+
};
24+
};
25+
26+
&pinctrl {
27+
p2_0_adc: p2_0_adc {
28+
pinmux = <DT_CAT1_PINMUX(2, 0, HSIOM_SEL_GPIO)>;
29+
};
30+
31+
p2_2_adc: p2_2_adc {
32+
pinmux = <DT_CAT1_PINMUX(2, 2, HSIOM_SEL_GPIO)>;
33+
};
34+
35+
p2_3_adc: p2_3_adc {
36+
pinmux = <DT_CAT1_PINMUX(2, 3, HSIOM_SEL_GPIO)>;
37+
};
38+
39+
p2_4_adc: p2_4_adc {
40+
pinmux = <DT_CAT1_PINMUX(2, 4, HSIOM_SEL_GPIO)>;
41+
};
42+
};
43+
44+
&adc0 {
45+
status = "okay";
46+
vref-src = "internal";
47+
pinctrl-0 = <&p2_0_adc &p2_2_adc &p2_3_adc &p2_4_adc>;
48+
pinctrl-names = "default";
49+
#address-cells = <1>;
50+
#size-cells = <0>;
51+
52+
channel@0 {
53+
reg = <0>;
54+
zephyr,gain = "ADC_GAIN_1";
55+
zephyr,reference = "ADC_REF_INTERNAL";
56+
zephyr,vref-mv = <1200>;
57+
zephyr,input-positive = <0>;
58+
zephyr,resolution = <12>;
59+
zephyr,oversampling = <8>;
60+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
61+
};
62+
63+
channel@1 {
64+
reg = <1>;
65+
zephyr,gain = "ADC_GAIN_1";
66+
zephyr,differential;
67+
zephyr,reference = "ADC_REF_INTERNAL";
68+
zephyr,vref-mv = <1200>;
69+
zephyr,input-positive = <2>;
70+
zephyr,input-negative = <3>;
71+
zephyr,resolution = <12>;
72+
zephyr,oversampling = <0>;
73+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
74+
};
75+
76+
channel@2 {
77+
reg = <2>;
78+
zephyr,gain = "ADC_GAIN_1";
79+
zephyr,reference = "ADC_REF_INTERNAL";
80+
zephyr,vref-mv = <1200>;
81+
zephyr,input-positive = <4>;
82+
zephyr,resolution = <12>;
83+
zephyr,oversampling = <8>;
84+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
85+
};
86+
};

0 commit comments

Comments
 (0)