TCB 8-Bit PWM Mode Code
Example
#include <avr/io.h>
#define TCB_CMP_EXAMPLE_VALUE (0x80FF)
void CLOCK_init (void);
void PORT_init (void);
void TCB3_init (void);
void CLOCK_init (void)
{
ccp_write_io((void *) &(CLKCTRL.MCLKCTRLB), (CLKCTRL_PDIV_64X_gc | CLKCTRL_PEN_bm));
ccp_write_io((void *) &(CLKCTRL.MCLKCTRLA) , (CLKCTRL_CLKSEL_OSCULP32K_gc));
while (CLKCTRL.MCLKSTATUS & CLKCTRL_SOSC_bm)
{
;
}
}
void PORT_init (void)
{
PORTB_DIR |= PIN5_bm;
PORTB_OUT |= PIN5_bm;
}
void TCB3_init (void)
{
TCB3.CCMP = TCB_CMP_EXAMPLE_VALUE;
TCB3.CTRLA |= TCB_ENABLE_bm;
TCB3.CTRLA |= TCB_CLKSEL_CLKDIV2_gc;
TCB3.CTRLB |= TCB_CCMPEN_bm;
TCB3.CTRLB |= TCB_CNTMODE_PWM8_gc;
}
int main(void)
{
CLOCK_init();
PORT_init();
TCB3_init();
while (1)
{
;
}
}
TCB Time-Out Check Mode Code
Example
#include <avr/io.h>
#include <avr/interrupt.h>
void CLOCK_init (void);
void PORT_init (void);
void EVENT_SYSTEM_init (void);
void TCB0_init (void);
void CLOCK_init (void)
{
ccp_write_io( (void *) &CLKCTRL.MCLKCTRLB , (0 << CLKCTRL_PEN_bp));
ccp_write_io( (void *) &CLKCTRL.MCLKCTRLA , (CLKCTRL_CLKSEL_OSCULP32K_gc));
while (CLKCTRL.MCLKSTATUS & CLKCTRL_SOSC_bm)
{
;
}
}
void PORT_init (void)
{
PORTB.DIR |= PIN5_bm;
PORTB.OUT |= PIN5_bm;
PORTB.DIR &= ~PIN2_bm;
PORTB.PIN2CTRL = PORT_PULLUPEN_bm;
}
void EVENT_SYSTEM_init (void)
{
EVSYS.CHANNEL0 = EVSYS_GENERATOR_PORT1_PIN2_gc;
EVSYS.USERTCB0 = EVSYS_CHANNEL_CHANNEL0_gc;
}
void TCB0_init (void)
{
TCB0.CCMP = 0x7fff;
TCB0.CTRLA = TCB_CLKSEL_CLKDIV1_gc | TCB_ENABLE_bm;
TCB0.CTRLB = TCB_CNTMODE_TIMEOUT_gc;
TCB0.INTCTRL = TCB_CAPT_bm;
TCB0.EVCTRL = TCB_CAPTEI_bm | TCB_EDGE_bm;
}
ISR(TCB0_INT_vect)
{
TCB0.INTFLAGS = TCB_CAPT_bm;
PORTB.IN = PIN5_bm;
}
int main(void)
{
CLOCK_init();
PORT_init();
EVENT_SYSTEM_init();
TCB0_init();
sei();
while (1)
{
;
}
}
TCB Sleep Mode Operation Code
Example
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#define TCB_CMP_EXAMPLE_VALUE (0x7fff)
void CLOCK_init (void);
void SLPCTRL_init (void);
void PORT_init (void);
void TCB0_init (void);
void CLOCK_init (void)
{
ccp_write_io( (void *) &CLKCTRL.MCLKCTRLB , (0 << CLKCTRL_PEN_bp));
ccp_write_io( (void *) &CLKCTRL.MCLKCTRLA, (CLKCTRL_CLKSEL_OSCULP32K_gc));
while (CLKCTRL.MCLKSTATUS & CLKCTRL_SOSC_bm)
{
;
}
}
void SLPCTRL_init (void)
{
SLPCTRL.CTRLA = SLPCTRL_SMODE_gm | SLPCTRL_SMODE_STDBY_gc;
}
void PORT_init (void)
{
PORTB.DIR |= PIN5_bm;
PORTB.OUT |= PIN5_bm;
}
void TCB0_init (void)
{
TCB0.CCMP = TCB_CMP_EXAMPLE_VALUE;
TCB0.CTRLA = TCB_CLKSEL_CLKDIV1_gc | TCB_ENABLE_bm | TCB_RUNSTDBY_bm;
TCB0.INTCTRL = TCB_CAPT_bm;
}
ISR(TCB0_INT_vect)
{
TCB0.INTFLAGS = TCB_CAPT_bm;
PORTB.IN = PIN5_bm;
}
int main(void)
{
CLOCK_init();
SLPCTRL_init();
PORT_init();
TCB0_init();
sei();
while (1)
{
sleep_mode();
}
}