/* p11_7.c Dead-time creation using DTI feature of TCC0 * * See text for detailed description. * * PA08 = TCC0/WO[0], PB10 = TCC0/WO[4] * * Tested with Atmel Studio 7 v7.0.1006 and Keil MDK-ARM v5.21a. */ #include "samd21.h" void TCC0_init(void); unsigned char* ARRAY_PORT_PINCFG0 = (unsigned char*)®_PORT_PINCFG0; unsigned char* ARRAY_PORT_PMUX0 = (unsigned char*)®_PORT_PMUX0; unsigned char* ARRAY_PORT_PINCFG1 = (unsigned char*)®_PORT_PINCFG1; unsigned char* ARRAY_PORT_PMUX1 = (unsigned char*)®_PORT_PMUX1; int main(void) { TCC0_init(); while (1) { } } void TCC0_init(void) { REG_GCLK_CLKCTRL = 0x401A; /* GCLK0 -> TCC0, TCC1 */ REG_PM_APBCMASK |= 0x00000100; /* enable TCC0 Clock in PM */ REG_TCC0_CTRLA = 1; /* reset */ while (REG_TCC0_CTRLA & 1) {} /* wait till out of reset */ REG_TCC0_WAVE = 7; /* dual-slope TOP PWM */ REG_TCC0_PER = 5000; /* period */ REG_TCC0_CC0 = 2500; /* pulse width */ REG_TCC0_WEXCTRL = 0xFAFA0100; /* 250 clock cycles dead-time both polarity */ REG_TCC0_CTRLA |= 2; /* enable */ ARRAY_PORT_PINCFG0[8] |= 1; /* make PA08 output for TCC0/WO[0] */ ARRAY_PORT_PMUX0[4] = 0x04; /* PA08 = TCC0/WO[0] */ ARRAY_PORT_PINCFG1[10] |= 1; /* make PB10 output for TCC0/WO[4] */ ARRAY_PORT_PMUX1[5] = 0x05; /* PB10 = TCC0/WO[4] */ }