Skip to content

Provides basic functionality of software timer. All code is inlined so there's no overhead for calling function.

Notifications You must be signed in to change notification settings

m-xor/AVR-software-timer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

To use:

  • define include path to appriopriate port file "software_timer_port.h"
  • define global variable of Timer type. There's no need to define it volatile.
  • export variable to every file timer is in use.
  • include software_timer.h file in every file timer is in use.

Usage example


/* main.c */
#include <avr/io.h>
#include <avr/interrupt.h>
#include "button.h"
#include "software_timer.h"

Timer buttonPeriod;
Timer busyWait;

int main()
{
	Timer_ctor(&buttonPeriod); /* actually not needed when variable in bss section */
	Timer_setPeriod(&buttonPeriod, TICKS(1000,10));

	Timer_ctor(&busyWait); /* actually not needed when variable in bss section */


	sei();
	while(1)
	{
		/* repeated action */
		if(Timer_isTime(&buttonPeriod)) {
			button_poll();
			/* reactivation */
			Timer_setPeriod(&buttonPeriod, TICKS(1000,10));
		}

		/* conditional deactivation */
		if(codition0) {
			Timer_activate(&buttonPeriod, 0);
		}

		/* one shot action */
		some_action_init();

		Timer_setPeriod(&busyWait,TICKS(10,10)); /* timer activation */
		while(Timer_isTime(&busyWait));	/* we're waiting for expiry */
		/* busyWait timer is inactive now */
		
		some_action_after_delay();

	}

}

/* timer.c */
#include <avr/interrupt.h>
#include "software_timer.h"

Timer buttonPeriod;
Timer busyWait;

ISR(TIMER0_OVF_vect)
{
	Timer_count(&buttonPeriod);
	Timer_count(&busyWait);
}

About

Provides basic functionality of software timer. All code is inlined so there's no overhead for calling function.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published