main.cpp


1
// --- AVR128DB64 ---
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
#include <util/atomic.h>
5
6
void initPins (void);
7
void initTCA0 (void);
8
void deleteTCA0 (void);
9
10
int main (void)
11
{
12
  deleteTCA0();
13
  initPins();
14
  initTCA0();
15
16
  while(1)
17
  {   }
18
}
19
20
void initPins (void)
21
{  
22
  PORTMUX.TCAROUTEA = PORTMUX_TCA0_PORTB_gc;  // TCA0 WO-x umrouten
23
  VPORTB.DIR = VPORTB.DIR | _BV(0);           // PB0 / TCA0-WO Output 
24
}
25
26
void initTCA0 (void)
27
{
28
  const uint16_t value = 65535;
29
  TCA0.SINGLE.CMP0BUF = value;                                            // TOP
30
  TCA0.SINGLE.CTRLA = TCA_SINGLE_CLKSEL_DIV1_gc;                          // CLK_PER divider
31
  TCA0.SINGLE.CTRLB = TCA_SINGLE_WGMODE_FRQ_gc | TCA_SINGLE_CMP0EN_bm;    // Frequency Generation Mode
32
  TCA0.SINGLE.CTRLA = TCA0.SINGLE.CTRLA | TCA_SINGLE_ENABLE_bm;           // Enable TCA
33
}
34
35
void deleteTCA0 (void)
36
{
37
  TCA0.SINGLE.CTRLA = 0;
38
  TCA0.SINGLE.CTRLB = 0;
39
  TCA0.SINGLE.CTRLC = 0;
40
  TCA0.SINGLE.CTRLD = 0;
41
  TCA0.SINGLE.INTCTRL = 0;
42
  TCA0.SINGLE.CNT = 0;
43
}