Generating Complementary Driving
Samples Source Code
#define SIGNAL_PERIOD_EXAMPLE_VALUE (0xC8)
#define SIGNAL_DUTY_CYCLE_EXAMPLE_VALUE (0x64)
#include <avr/io.h>
void TCD0_init(void);
void TCD0_enableOutputChannels(void);
void PORT_init(void);
void TCD0_init(void)
{
TCD0.CTRLB = TCD_WGMODE_DS_gc;
TCD0.CMPBCLR = SIGNAL_PERIOD_EXAMPLE_VALUE;
TCD0.CMPBSET = SIGNAL_DUTY_CYCLE_EXAMPLE_VALUE + 1;
TCD0.CMPASET = SIGNAL_DUTY_CYCLE_EXAMPLE_VALUE - 1;
while(!(TCD0.STATUS & TCD_ENRDY_bm))
{
;
}
TCD0.CTRLA = TCD_CLKSEL_20MHZ_gc
| TCD_CNTPRES_DIV1_gc
| TCD_ENABLE_bm;
}
void TCD0_enableOutputChannels(void)
{
CPU_CCP = CCP_IOREG_gc;
TCD0.FAULTCTRL = TCD_CMPAEN_bm
| TCD_CMPBEN_bm;
}
void PORT_init(void)
{
PORTA.DIR |= PIN4_bm
| PIN5_bm;
}
int main(void)
{
PORT_init();
TCD0_enableOutputChannels();
TCD0_init();
while (1)
{
;
}
}
Controlling Synchronous Signals
Using Input Events Source Code
#define SETTLING_TIME_EXAMPLE_VALUE (0x02)
#define DUTY_CYCLE_EXAMPLE_VALUE (0xF6)
#include <avr/io.h>
void TCD0_init(void);
void TCD0_enableOutputChannels(void);
void EVENT_SYSTEM_init(void);
void PORT_init(void);
void TCD0_init(void)
{
TCD0.CTRLB = TCD_WGMODE_FOURRAMP_gc;
TCD0.CTRLC = TCD_CMPDSEL_bm;
TCD0.CMPASET = SETTLING_TIME_EXAMPLE_VALUE;
TCD0.CMPACLR = DUTY_CYCLE_EXAMPLE_VALUE;
TCD0.CMPBSET = SETTLING_TIME_EXAMPLE_VALUE;
TCD0.CMPBCLR = DUTY_CYCLE_EXAMPLE_VALUE;
TCD0.EVCTRLA = TCD_CFG_FILTER_gc
| TCD_EDGE_FALL_LOW_gc
| TCD_TRIGEI_bm;
TCD0.INPUTCTRLA = TCD_INPUTMODE_WAIT_gc;
while(!(TCD0.STATUS & TCD_ENRDY_bm))
{
;
}
TCD0.CTRLA = TCD_CLKSEL_20MHZ_gc
| TCD_CNTPRES_DIV4_gc
| TCD_ENABLE_bm;
}
void TCD0_enableOutputChannels(void)
{
CPU_CCP = CCP_IOREG_gc;
TCD0.FAULTCTRL = TCD_CMPAEN_bm
| TCD_CMPBEN_bm
| TCD_CMPCEN_bm
| TCD_CMPDEN_bm;
}
void EVENT_SYSTEM_init(void)
{
EVSYS.ASYNCCH2 = EVSYS_ASYNCCH2_PORTC_PIN5_gc;
EVSYS.ASYNCUSER6 = EVSYS_ASYNCUSER6_ASYNCCH2_gc;
}
void PORT_init(void)
{
PORTA.DIR |= PIN4_bm
| PIN5_bm;
PORTC.DIR |= PIN0_bm
| PIN1_bm;
PORTC.DIR &= ~PIN5_bm;
PORTC.PIN5CTRL = PORT_PULLUPEN_bm;
}
int main(void)
{
PORT_init();
EVENT_SYSTEM_init();
TCD0_enableOutputChannels();
TCD0_init();
while (1)
{
;
}
}