Skip to content

Commit fd61f9c

Browse files
committed
projects: led: ltc3220: add project for LTC3220
Created LTC3220 project example for Maxim platform Includes tests for the different features of the LTC3220 Signed-off-by: Jan Carlo Roleda <[email protected]>
1 parent a22908c commit fd61f9c

File tree

10 files changed

+644
-0
lines changed

10 files changed

+644
-0
lines changed

projects/ltc3220/makefile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
EXAMPLE ?= dummy
2+
3+
PLATFORM ?= maxim
4+
5+
include ../../tools/scripts/generic_variables.mk
6+
7+
include ../../tools/scripts/examples.mk
8+
9+
include src.mk
10+
11+
include ../../tools/scripts/generic.mk

projects/ltc3220/src.mk

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
INCS += $(INCLUDE)/no_os_error.h \
2+
$(INCLUDE)/no_os_gpio.h \
3+
$(INCLUDE)/no_os_irq.h \
4+
$(INCLUDE)/no_os_list.h \
5+
$(INCLUDE)/no_os_uart.h \
6+
$(INCLUDE)/no_os_lf256fifo.h\
7+
$(INCLUDE)/no_os_dma.h \
8+
$(INCLUDE)/no_os_init.h \
9+
$(INCLUDE)/no_os_util.h \
10+
$(INCLUDE)/no_os_i2c.h \
11+
$(INCLUDE)/no_os_mutex.h \
12+
$(INCLUDE)/no_os_alloc.h \
13+
$(INCLUDE)/no_os_delay.h
14+
15+
SRCS += $(DRIVERS)/api/no_os_gpio.c \
16+
$(DRIVERS)/api/no_os_irq.c \
17+
$(NO-OS)/util/no_os_list.c \
18+
$(DRIVERS)/api/no_os_uart.c \
19+
$(NO-OS)/util/no_os_lf256fifo.c \
20+
$(DRIVERS)/api/no_os_dma.c \
21+
$(DRIVERS)/api/no_os_i2c.c \
22+
$(NO-OS)/util/no_os_util.c \
23+
$(NO-OS)/util/no_os_mutex.c \
24+
$(NO-OS)/util/no_os_alloc.c
25+
26+
27+
INCS += $(DRIVERS)/led/ltc3220/ltc3220.h
28+
SRCS += $(DRIVERS)/led/ltc3220/ltc3220.c
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/***************************************************************************//**
2+
* @file common_data.c
3+
* @brief Defines common data to be used by LTC3220 examples.
4+
* @author Jan Carlo Roleda ([email protected])
5+
********************************************************************************
6+
* Copyright 2025(c) Analog Devices, Inc.
7+
*
8+
* Redistribution and use in source and binary forms, with or without
9+
* modification, are permitted provided that the following conditions are met:
10+
*
11+
* 1. Redistributions of source code must retain the above copyright notice,
12+
* this list of conditions and the following disclaimer.
13+
*
14+
* 2. Redistributions in binary form must reproduce the above copyright notice,
15+
* this list of conditions and the following disclaimer in the documentation
16+
* and/or other materials provided with the distribution.
17+
*
18+
* 3. Neither the name of Analog Devices, Inc. nor the names of its
19+
* contributors may be used to endorse or promote products derived from this
20+
* software without specific prior written permission.
21+
*
22+
* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. “AS IS” AND ANY EXPRESS OR
23+
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
24+
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
25+
* EVENT SHALL ANALOG DEVICES, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
26+
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
28+
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29+
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30+
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
31+
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32+
*******************************************************************************/
33+
34+
#include "common_data.h"
35+
36+
const struct no_os_i2c_init_param iip = {
37+
.device_id = I2C_DEVICE_ID,
38+
.max_speed_hz = 400000,
39+
.slave_address = DEV_I2C_ADDRESS,
40+
.platform_ops = I2C_OPS,
41+
.extra = &ltc3220_i2c_extra,
42+
};
43+
44+
const struct no_os_gpio_init_param gip = {
45+
.port = GPIO_RST_PIN_PORT,
46+
.number = GPIO_RST_PIN_NUM,
47+
.pull = NO_OS_PULL_NONE,
48+
.platform_ops = GPIO_OPS,
49+
.extra = &ltc3220_gpio_extra,
50+
};
51+
52+
struct ltc3220_init_param ltc3220_user_init = {
53+
.i2c_init_param = iip,
54+
.gpio_init_param = gip,
55+
};
56+
57+
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/***************************************************************************//**
2+
* @file common_data.h
3+
* @brief Defines common data to be used by LTC3220 examples.
4+
* @author Jan Carlo Roleda ([email protected])
5+
********************************************************************************
6+
* Copyright 2025(c) Analog Devices, Inc.
7+
*
8+
* Redistribution and use in source and binary forms, with or without
9+
* modification, are permitted provided that the following conditions are met:
10+
*
11+
* 1. Redistributions of source code must retain the above copyright notice,
12+
* this list of conditions and the following disclaimer.
13+
*
14+
* 2. Redistributions in binary form must reproduce the above copyright notice,
15+
* this list of conditions and the following disclaimer in the documentation
16+
* and/or other materials provided with the distribution.
17+
*
18+
* 3. Neither the name of Analog Devices, Inc. nor the names of its
19+
* contributors may be used to endorse or promote products derived from this
20+
* software without specific prior written permission.
21+
*
22+
* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. “AS IS” AND ANY EXPRESS OR
23+
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
24+
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
25+
* EVENT SHALL ANALOG DEVICES, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
26+
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
28+
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29+
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30+
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
31+
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32+
*******************************************************************************/
33+
#ifndef __COMMON_DATA_H__
34+
#define __COMMON_DATA_H__
35+
36+
#include "parameters.h"
37+
#include "ltc3220.h"
38+
39+
extern const struct no_os_i2c_init_param iip;
40+
extern const struct no_os_gpio_init_param gip;
41+
extern struct ltc3220_init_param ltc3220_user_init;
42+
43+
#endif /* __COMMON_DATA_H__ */
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
/***************************************************************************//**
2+
* @file dummy_example.c
3+
* @brief exmaple program for Maxim platfom of LTC3220 project.
4+
* @author Jan Carlo Roleda ([email protected])
5+
********************************************************************************
6+
* Copyright 2025(c) Analog Devices, Inc.
7+
*
8+
* Redistribution and use in source and binary forms, with or without
9+
* modification, are permitted provided that the following conditions are met:
10+
*
11+
* 1. Redistributions of source code must retain the above copyright notice,
12+
* this list of conditions and the following disclaimer.
13+
*
14+
* 2. Redistributions in binary form must reproduce the above copyright notice,
15+
* this list of conditions and the following disclaimer in the documentation
16+
* and/or other materials provided with the distribution.
17+
*
18+
* 3. Neither the name of Analog Devices, Inc. nor the names of its
19+
* contributors may be used to endorse or promote products derived from this
20+
* software without specific prior written permission.
21+
*
22+
* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. “AS IS” AND ANY EXPRESS OR
23+
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
24+
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
25+
* EVENT SHALL ANALOG DEVICES, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
26+
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
28+
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29+
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30+
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
31+
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32+
*******************************************************************************/
33+
34+
#include "common_data.h"
35+
#include "ltc3220.h"
36+
#include "no_os_delay.h"
37+
#include "example_tests.h"
38+
39+
/***************************************************************************//**
40+
* @brief Dummy example main execution.
41+
*
42+
* @return ret - Result of the example execution. If working correctly, will
43+
* execute continuously the while(1) loop and will not return.
44+
*******************************************************************************/
45+
int example_main()
46+
{
47+
struct ltc3220_dev *ltc3220;
48+
int ret;
49+
50+
ret = ltc3220_init(&ltc3220, ltc3220_user_init);
51+
if (ret)
52+
goto error;
53+
54+
while (true) {
55+
/* reset operations */
56+
ret = ltc3220_reset(ltc3220);
57+
if (ret)
58+
goto error_ltc3220;
59+
60+
/* regular light mode */
61+
ltc3220_test_led_singles(ltc3220, LTC3220_MODE_NORMAL);
62+
63+
no_os_mdelay(3000);
64+
65+
ret = ltc3220_reset(ltc3220);
66+
if (ret)
67+
goto error_ltc3220;
68+
69+
/* blinking (fast) */
70+
ltc3220_set_blink_fast(ltc3220, true);
71+
ltc3220_set_blink_long(ltc3220, false);
72+
ltc3220_test_led_singles(ltc3220, LTC3220_MODE_BLINK);
73+
74+
no_os_mdelay(3000);
75+
76+
ret = ltc3220_reset(ltc3220);
77+
if (ret)
78+
goto error_ltc3220;
79+
80+
/* blinking (slow) */
81+
ltc3220_set_blink_fast(ltc3220, false);
82+
ltc3220_set_blink_long(ltc3220, true);
83+
ltc3220_test_led_singles(ltc3220, LTC3220_MODE_BLINK);
84+
85+
no_os_mdelay(3000);
86+
87+
ret = ltc3220_reset(ltc3220);
88+
if (ret)
89+
goto error_ltc3220;
90+
91+
/* check if voltage output is ~4.6v */
92+
ltc3220_set_cpo_1p5x(ltc3220, true);
93+
94+
95+
/* gradation (increasing) */
96+
ltc3220_set_grad_increasing(ltc3220, true);
97+
ltc3220_set_grad_speed(ltc3220, LTC3220_GRAD_MAX_SPD);
98+
ltc3220_test_led_singles(ltc3220, LTC3220_MODE_GRADATION);
99+
100+
no_os_mdelay(3000);
101+
102+
ret = ltc3220_reset(ltc3220);
103+
if (ret)
104+
goto error_ltc3220;
105+
106+
/* gradation (decreasing) */
107+
ltc3220_set_grad_increasing(ltc3220, false);
108+
ltc3220_set_grad_speed(ltc3220, LTC3220_GRAD_MAX_SPD);
109+
ltc3220_test_led_singles(ltc3220, LTC3220_MODE_GRADATION);
110+
111+
no_os_mdelay(3000);
112+
113+
ret = ltc3220_reset(ltc3220);
114+
if (ret)
115+
goto error_ltc3220;
116+
117+
/* gradation (disabled) = normal mode */
118+
ltc3220_set_grad_speed(ltc3220, 0);
119+
ltc3220_test_led_singles(ltc3220, LTC3220_MODE_GRADATION);
120+
121+
no_os_mdelay(3000);
122+
123+
ret = ltc3220_reset(ltc3220);
124+
if (ret)
125+
goto error_ltc3220;
126+
127+
/* using different modes on the device */
128+
ltc3220_set_blink_fast(ltc3220, true);
129+
ltc3220_set_grad_speed(ltc3220, LTC3220_GRAD_MAX_SPD);
130+
ltc3220_test_led_singles_alt_modes(ltc3220);
131+
132+
no_os_mdelay(3000);
133+
134+
ret = ltc3220_reset(ltc3220);
135+
if (ret)
136+
goto error_ltc3220;
137+
138+
/* check if voltage output is ~5.1v */
139+
ltc3220_set_cpo_2x(ltc3220, true);
140+
141+
/* use parallel and single commands on LEDs */
142+
ltc3220_set_blink_fast(ltc3220, true);
143+
ltc3220_set_blink_long(ltc3220, true);
144+
ltc3220_test_led_quick_write_with_indiv(ltc3220, LTC3220_MODE_BLINK);
145+
146+
no_os_mdelay(3000);
147+
148+
ret = ltc3220_reset(ltc3220);
149+
if (ret)
150+
goto error_ltc3220;
151+
152+
/* set alternating and shutdown, restore after 5s */
153+
ltc3220_set_cpo_2x(ltc3220, true);
154+
ltc3220_set_blink_fast(ltc3220, true);
155+
ltc3220_set_grad_speed(ltc3220, LTC3220_GRAD_MAX_SPD);
156+
ltc3220_test_led_singles_alt_modes(ltc3220);
157+
ltc3220_set_shutdown(ltc3220, true);
158+
159+
no_os_mdelay(5000);
160+
161+
ltc3220_set_shutdown(ltc3220, false);
162+
163+
no_os_mdelay(5000);
164+
}
165+
166+
error_ltc3220:
167+
ltc3220_remove(ltc3220);
168+
169+
error:
170+
return -1;
171+
}

0 commit comments

Comments
 (0)