Esempio n. 1
0
void app_cpu_load_task(void)
{
	static uint8_t bar_pos_last = 0;
	uint8_t bar_pos;

	/* Wait a total time > 250ms to update display each 250ms */
	if ((app_cpu_load_time_active + app_cpu_load_time_sleep)
			< ((32000lu / 256lu) * 250)) {
		return;
	}

	/* Compute CPU load */
	if (tc45_is_overflow(&TCC4)) {
		tc45_clear_overflow(&TCC4);
		bar_pos = DISPLAY_CPU_LOAD_PROBAR_MAX_SIZE_X;
	} else {
		bar_pos = (app_cpu_load_time_active *
				DISPLAY_CPU_LOAD_PROBAR_MAX_SIZE_X)
				/ (app_cpu_load_time_active +
				app_cpu_load_time_sleep);
	}

	/* Update progress bar */
	if (bar_pos_last < bar_pos) {
		gfx_mono_draw_filled_rect(
				DISPLAY_CPU_LOAD_PROBAR_POS_X + bar_pos_last,
				DISPLAY_CPU_LOAD_PROBAR_POS_Y,
				bar_pos - bar_pos_last,
				DISPLAY_CPU_LOAD_PROBAR_SIZE_Y,
				GFX_PIXEL_SET);
	} else if (bar_pos_last > bar_pos) {
		gfx_mono_draw_filled_rect(
				DISPLAY_CPU_LOAD_PROBAR_POS_X + bar_pos,
				DISPLAY_CPU_LOAD_PROBAR_POS_Y,
				bar_pos_last - bar_pos,
				DISPLAY_CPU_LOAD_PROBAR_SIZE_Y,
				GFX_PIXEL_CLR);
	}

	bar_pos_last = bar_pos;

	/* Reset counters */
	app_cpu_load_time_active = 0;
	app_cpu_load_time_sleep = 0;
}
Esempio n. 2
0
/**
 * \brief Timer Counter Overflow interrupt callback function
 *
 * This function is called when an overflow interrupt has occurred on
 * TCC4 and toggles LED0.
 */
static void example_ovf_interrupt_callback(void)
{
	gpio_toggle_pin(LED0_GPIO);
	tc45_clear_overflow(&TCC4);
}
Esempio n. 3
0
/**
 * \brief Timer Counter Overflow interrupt callback function
 *
 * This function is called when an overflow interrupt has occurred (50ms) on
 * TCD5 and change PWM duty single generation on TCD5 CCA.
 */
static void example_overflow_interrupt_callback(void)
{
	tc45_write_cc(&TCD5, TC45_CCA,
			tc45_read_cc(&TCD5, TC45_CCA) + 0xA00);
	tc45_clear_overflow(&TCC4);
}
Esempio n. 4
0
// Software PWM routine from AVR136
static void pwm_callback(void) {
	static uint8_t portlevelA=PORTA_MASK, portlevelD=PORTD_MASK, portlevelR=PORTR_MASK;
	static uint8_t softcount=0xFF;
	
	// update outputs
	PORTA.OUT = portlevelA;
	PORTD.OUT = portlevelD;
	PORTR.OUT = portlevelR;
	// unrolled for speed -- process for NUM_CHANNELS
	if (++softcount == 0) {
		compare[0] = compbuff[0];
		compare[1] = compbuff[1];
		compare[2] = compbuff[2];
		compare[3] = compbuff[3];
		compare[4] = compbuff[4];
		compare[5] = compbuff[5];
		compare[6] = compbuff[6];
		compare[7] = compbuff[7];
		compare[8] = compbuff[8];
		compare[9] = compbuff[9];
		compare[10] = compbuff[10];
		compare[11] = compbuff[11];
		compare[12] = compbuff[12];
		compare[13] = compbuff[13];
		compare[14] = compbuff[14];
		compare[15] = compbuff[15];
		compare[16] = compbuff[16];
		compare[17] = compbuff[17];


		#ifdef PWM_SINK
		// set all pins low
		portlevelA &= ~PORTA_MASK;
		portlevelD &= ~PORTD_MASK;
		portlevelR &= ~PORTR_MASK;
		#else
		// set all pins high
		portlevelA |= PORTA_MASK;
		portlevelD |= PORTD_MASK;
		portlevelR |= PORTR_MASK;
		#endif
	}
	
	if (compare[0] == softcount) CH1_SET;
	if (compare[1] == softcount) CH2_SET;
	if (compare[2] == softcount) CH3_SET;
	if (compare[3] == softcount) CH4_SET;
	if (compare[4] == softcount) CH5_SET;
	if (compare[5] == softcount) CH6_SET;
	if (compare[6] == softcount) CH7_SET;
	if (compare[7] == softcount) CH8_SET;
	if (compare[8] == softcount) CH9_SET;
	if (compare[9] == softcount) CH10_SET;
	if (compare[10] == softcount) CH11_SET;
	if (compare[11] == softcount) CH12_SET;
	if (compare[12] == softcount) CH13_SET;
	if (compare[13] == softcount) CH14_SET;
	if (compare[14] == softcount) CH15_SET;
	if (compare[15] == softcount) CH16_SET;
	if (compare[16] == softcount) CH17_SET;
	if (compare[17] == softcount) CH18_SET;
	
	tc45_clear_overflow(&TCC4);
}