Table of Contents

Taimerid XMega

Käesolev taimerite teek katab suure osa ATXmega128A1U taimerite funktsionaalsusest. Kuna AVR taimerid on erinevate kiipide vahel päris erinevad, siis ei saa nende kasutamiseks kirjutada universaalseid funktsioone. Ka kirjeldatavad ATXmega128A1U funktsioonid on suures osas lihtsalt primitiivsed registri muutmise või lugemise funktsioonid, kuid siiski on nad loetavamad kui registrid.

Andmetüübid

Funktsioonid

Timer0 signaaligenereerimis viigu A/B/C/D katkestuse seadistamine

Kõik funktsioonid kehtivad sarnaselt ka Taimer1 kohta.

Makrod

Näide

Näites seadistatakse Pordi E Timer0 tavalisse loendamise režiimi ja lubatakse ületäitumise ning võrdluskanali A katkestus.

#include <homelab/xmega/clksys_driver.h>
 
#include <homelab/pin.h>
#include <homelab/xmega/TC_driver.h>
#include <avr/interrupt.h>
 
// Ületäituvuse katkestus
ISR(TCE0_OVF_vect)
{
	led_on(led_green);
}
 
// Võrdluskanali A katkestus
ISR(TCE0_CCA_vect)
{
	led_off(led_green);
}
 
int main(void)
{
	// Seadista roheline LED väljundiks
	pin_setup_output(led_green);
	led_off(led_green);
 
	// Seame taimer E0i perioodi
	// Seame taimer E0i töötsükli pikkuse
	TC_SetPeriod(&TCE0, 20000);							
	TC_SetCompareA(&TCE0, 15000);						
 
	// Seame taimer E0i taktsageduse (F_CPU/1024)
	TC0_ConfigClockSource(&TCE0, TC_CLKSEL_DIV1024_gc);	
	// Seame taimer E0i töötama normaalrežiimis
	TC0_ConfigWGM(&TCE0, TC_WGMODE_NORMAL_gc);			
 
	// Lubame ületäituvuse katkestuse kõrge prioriteediga
	// Lubame värdluskanali A katkestuse keskmise prioriteediga
	TC0_SetOverflowIntLevel(&TCE0,TC_OVFINTLVL_HI_gc);	
	TC0_SetCCAIntLevel(&TCE0, TC_CCAINTLVL_MED_gc);		
 
	// Lubame keskmised ja kõrge prioriteedika katkestused
	// Lubame globaalselt katkestused
	PMIC.CTRL |= PMIC_MEDLVLEN_bm|PMIC_HILVLEN_bm;
	sei();												
 
	//Tühi tsükkel, programm jookseb katkestuste peal
	while(1);
}