Example #1
0
void pwm_write(void)
{
    uint32_t r_on, g_on, b_on;
    uint32_t r_off, g_off, b_off;

    r_on = (rgb[0] / 255.0) * PERIOD;
    g_on = (rgb[1] / 255.0) * PERIOD;
    b_on = (rgb[2] / 255.0) * PERIOD;

    r_on = MAX(1, r_on);
    g_on = MAX(1, g_on);
    b_on = MAX(1, b_on);

    r_off = PERIOD - r_on;
    g_off = PERIOD - g_on;
    b_off = PERIOD - b_on;

    r_off = MAX(1, r_off);
    g_off = MAX(1, g_off);
    b_off = MAX(1, b_off);

    printk("rgb: %x %x %x\n", rgb[0], rgb[1], rgb[2]);
    printk("on : %x %x %x\n", r_on, g_on, b_on);
    printk("off: %x %x %x\n", r_off, g_off, b_off);

    pwm_pin_set_values(pwm, IO3_RED, r_on, r_off);
    pwm_pin_set_values(pwm, IO5_GREEN, g_on, g_off);
    pwm_pin_set_values(pwm, IO6_BLUE, b_on, b_off);
}
Example #2
0
void main(void)
{
	struct nano_timer timer;
	void *timer_data[1];
	struct device *pwm_dev;
	uint32_t period;
	uint8_t dir;

	nano_timer_init(&timer, timer_data);

	PRINT("PWM_DW demo app\n");

	pwm_dev = device_get_binding(CONFIG_PWM_DW_DEV_NAME);
	if (!pwm_dev) {
		PRINT("Cannot find %s!\n", CONFIG_PWM_DW_DEV_NAME);
	}

	period = MAX_PERIOD;
	dir = 0;

	while (1) {
		pwm_pin_set_values(pwm_dev, 0, period, period);

		if (dir) {
			period *= 2;

			if (period > MAX_PERIOD) {
				dir = 0;
				period = MAX_PERIOD;
			}
		} else {
			period /= 2;

			if (period < MIN_PERIOD) {
				dir = 1;
				period = MIN_PERIOD;
			}
		}

		nano_timer_start(&timer, SLEEPTICKS);
		nano_timer_test(&timer, TICKS_UNLIMITED);
	}
}